[
  {
    "path": ".changelog/3013.txt",
    "content": "```release-note:REPLACEME\r\n\r\n```\r\n"
  },
  {
    "path": ".changelog/3021.txt",
    "content": "```release-note:REPLACEME\r\n\r\n```\r\n"
  },
  {
    "path": ".changelog/3022.txt",
    "content": "```release-note:REPLACEME\r\n\r\n```\r\n"
  },
  {
    "path": ".changelog/3026.txt",
    "content": "```release-note:enhancement\r\ndns: `google_dns_managed_zone` added support for Non-RFC1918 fields for reverse lookup and fowarding paths.\r\n```\r\n"
  },
  {
    "path": ".changelog/3029.txt",
    "content": "```release-note:REPLACEME\r\n\r\n```\r\n"
  },
  {
    "path": ".changelog/3031.txt",
    "content": ""
  },
  {
    "path": ".changelog/3033.txt",
    "content": "```release-note:breakingchange\r\ncompute: Added conditional requirement of `google_compute_**region**_backend_service` `backend.capacity_scaler` to no longer accept the API default if not INTERNAL. Non-INTERNAL backend services must now specify `capacity_scaler` explicitly and have a total capacity greater than 0. In addition, API default of 1.0 must now be explicitly set and will be treated as nil or zero if not set in config.\r\n```\r\n```release-note:bug\r\ncompute: Fixed `google_compute_**region**_backend_service` so it no longer has a permadiff if `backend.capacity_scaler` is unset in config by requiring capacity scaler. \r\n```\r\n```release-note:bug\r\ncompute: Fixed `backend.capacity_scaler` to actually set zero (0.0) value.\r\n```\r\n"
  },
  {
    "path": ".codeclimate.yml",
    "content": "version: \"2\"\nchecks:\n  argument-count:\n    enabled: false\n  complex-logic:\n    enabled: false\n  file-lines:\n    enabled: false\n  method-complexity:\n    enabled: false\n  method-count:\n    enabled: false\n  method-lines:\n    enabled: false\n  nested-control-flow:\n    enabled: false\n  return-statements:\n    enabled: false\n  similar-code:\n    enabled: false\n  identical-code:\n    enabled: false\n"
  },
  {
    "path": ".expeditor/buildkite/verify.sh",
    "content": "#!/bin/bash\n\nset -ueo pipefail\n\necho \"--- system details\"\nuname -a\nruby -v\nbundle --version\n\necho \"--- bundle install\"\nbundle config set --local without tools maintenance deploy\nbundle install --jobs=7 --retry=3\n\necho \"+++ bundle exec rake $RAKE_TASK\"\nbundle exec rake $RAKE_TASK\n"
  },
  {
    "path": ".expeditor/config.yml",
    "content": "# Documentation available at https://expeditor.chef.io/docs/getting-started/\n---\n\npipelines:\n - verify:\n    description: Pull Request validation tests\n    public: true\n\nslack:\n notify_channel: inspec-notify\n\ngithub:\n delete_branch_on_merge: true\n minor_bump_labels:\n  - \"Version: Bump Minor\"\n major_bump_labels:\n  - \"Version: Bump Major\"\n\n version_tag_format: v{{version}}\n\nrelease_branches:\n  - main\n \nchangelog:\n categories:\n  - \"Type: New Resource\": \"New Resources\"\n  - \"Type: New Feature\": \"New Features\"\n  - \"Type: Enhancement\": \"Enhancements\"\n  - \"Type: Bug\": \"Bug Fixes\"\n\nsubscriptions:\n  - workload: pull_request_merged:{{github_repo}}:{{release_branch}}:*\n    actions:\n     - built_in:bump_version:\n        ignore_labels:\n         - \"Version: Skip Bump\"\n         - \"Expeditor: Skip All\"\n     - bash:.expeditor/update_version.sh:\n        only_if: built_in:bump_version\n     - built_in:update_changelog:\n        ignore_labels:\n         - \"Changelog: Skip Update\"\n         - \"Expeditor: Skip All\"\n\n"
  },
  {
    "path": ".expeditor/update_version.sh",
    "content": "#!/bin/bash\n#\n# After a PR merge, Chef Expeditor will bump the PATCH version in the VERSION file.\n# It then executes this file to update any other files/components with that new version.\n#\n\nset -ev\n\nsed -i -r \"s/^version\\: .*/version\\: $(cat VERSION)/\" inspec.yml\n"
  },
  {
    "path": ".expeditor/verify.pipeline.yml",
    "content": "expeditor:\n  defaults:\n    buildkite:\n      timeout_in_minutes: 20\n\n\nsteps:\n\n- label: lint-ruby-3.1\n  command:\n    - RAKE_TASK=lint /workdir/.expeditor/buildkite/verify.sh\n  expeditor:\n    executor:\n      docker:\n        image: ruby:3.1-bullseye\n\n\n- label: run-tests-ruby-3.1\n  command:\n    - RAKE_TASK=default /workdir/.expeditor/buildkite/verify.sh\n  expeditor:\n    executor:\n      docker:\n        image: ruby:3.1-bullseye\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "# Order is important. The last matching pattern has the most precedence.\n\n*             @inspec/inspec-cloud-devs\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.MD",
    "content": "### Description\n\nPlease describe what this change achieves. Ensure you have read the [Contributing to InSpec GCP](https://github.com/inspec/inspec-gcp/CONTRIBUTING.md) document before \nsubmitting.\n\n### Issues Resolved\n\nList any existing issues this PR resolves, or any Discourse or StackOverflow discussion that's relevant.\n\nPlease ensure commits have been signed-off for the Developer Certificate of Origin. See <https://github.com/chef/chef/blob/master/CONTRIBUTING.md#developer-certification-of-origin-dco>\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: bundler\n  directory: \"/\"\n  schedule:\n    interval: daily\n  open-pull-requests-limit: 10\n  ignore:\n  - dependency-name: inspec-bin\n    versions:\n    - 4.26.13\n    - 4.28.0\n    - 4.29.3\n    - 4.31.0\n    - 4.31.1\n    - 4.32.0\n"
  },
  {
    "path": ".github/workflows/ci-main-pull-request-stub.yml",
    "content": "# stub to call common GitHub Action (GA) as part of Continuous Integration (CI) Pull Request process checks for main branch\n# inputs are described in the chef/common-github-actions/<GA.yml> with same name as this stub\n#\n# secrets are inherited from the calling workflow, typically SONAR_TOKEN, SONAR_HOST_URL, GH_TOKEN, AKEYLESS_JWT_ID, POLARIS_SERVER_URL and POLARIS_ACCESS_TOKEN\n\nname: CI Pull Request on Main Branch\n\non: \n  pull_request:\n    branches: [ main, release/** ]\n  push:\n    branches: [ main, release/** ]\n\n  workflow_dispatch:\n\npermissions:\n  contents: read\n  \nenv:\n  STUB_VERSION: \"1.0.8\" \n\njobs: \n  echo_version:\n    name: 'Echo stub version'\n    runs-on: ubuntu-latest\n    steps:\n      - name: echo version of stub and inputs\n        run: |\n          echo \"CI main pull request stub version $STUB_VERSION\"\n\n  detect-custom-metadata:\n    name: 'Detect custom properties'\n    runs-on: ubuntu-latest\n    outputs:\n      primaryApplication: ${{ steps.set-custom-metadata.outputs.primaryApplication }}\n      appBuildLanguage: ${{ steps.set-custom-metadata.outputs.applicationBuildLanguage }}\n      appBuildProfile: ${{ steps.set-custom-metadata.outputs.applicationBuildProfile }}\n      versionFromFile: ${{ steps.set-version-from-file.outputs.versionFromFile }}\n    steps:\n      - name: 'Checkout repository'\n        uses: actions/checkout@v4\n        \n      - name: 'Detect version from file'\n        id: set-version-from-file\n        shell: bash\n        run: |\n          if [[ -f \"VERSION\" ]]; then\n            version=$(head -1 VERSION)\n            echo \"VERSION_FROM_FILE=${version}\" >> $GITHUB_ENV\n            echo \"versionFromFile=${version}\" >> $GITHUB_OUTPUT\n          elif [[ -f \"go.mod\" ]]; then\n            version=$(grep -Eo 'v[0-9]+\\.[0-9]+\\.[0-9]+' go.mod | head -1)\n            echo \"VERSION_FROM_FILE=${version}\" >> $GITHUB_ENV\n            echo \"versionFromFile=${version}\" >> $GITHUB_OUTPUT\n          else\n            echo \"VERSION_FROM_FILE not found, defaulting to empty\"\n            echo \"versionFromFile=\" >> $GITHUB_OUTPUT\n          fi\n        # do not do echo \"::set-output name=versionFromFile::$version\" any more per https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/\n\n      - name: 'Detect app, language, and build profile environment variables from repository custom properties'\n        id: set-custom-metadata\n      # GH API returns something like [{\"property_name\":\"GABuildLanguage\",\"value\":\"go\"},{\"property_name\":\"GABuildProfile\",\"value\":\"cli\"},{\"property_name\":\"primaryApplication\",\"value\":\"chef-360\"}]'\n        run: |\n          response=$(gh api -H \"Accept: application/vnd.github+json\" -H \"X-GitHub-Api-Version: 2022-11-28\" /repos/${{ github.repository }}/properties/values) \n\n          primaryApplication=$(echo \"$response\" | jq -r '.[] | select(.property_name==\"primaryApplication\") | .value')\n          GABuildLanguage=$(echo \"$response\" | jq -r '.[] | select(.property_name==\"GABuildLanguage\") | .value')\n          GABuildProfile=$(echo \"$response\" | jq -r '.[] | select(.property_name==\"GABuildProfile\") | .value')\n          \n          echo \"PRIMARY_APPLICATION=$primaryApplication\" >> $GITHUB_ENV\n          echo \"GA_BUILD_LANGUAGE=$GABuildLanguage\" >> $GITHUB_ENV\n          echo \"GA_BUILD_PROFILE=$GABuildProfile\" >> $GITHUB_ENV\n\n          # If workflow_dispatch, use inputs (left), if other trigger, use default env (right)\n          echo \"primaryApplication=${primaryApplication}\" >> $GITHUB_OUTPUT\n          echo \"applicationBuildLanguage=${GABuildLanguage}\" >> $GITHUB_OUTPUT\n          echo \"applicationBuildProfile=${GABuildProfile}\" >> $GITHUB_OUTPUT\n        continue-on-error: true\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \n    \n  call-ci-main-pr-check-pipeline:\n    uses: chef/common-github-actions/.github/workflows/ci-main-pull-request.yml@main\n    # needs: [detect-custom-metadata, detect-version-from-file]\n    needs: [detect-custom-metadata]\n    secrets: inherit\n    permissions: \n      id-token: write\n      contents: read\n\n    with:   \n      application: ${{ needs.detect-custom-metadata.outputs.primaryApplication }}\n      visibility: ${{ github.event.repository.visibility }}   #  private, public, or internal\n      # go-private-modules: GOPRIVATE for Go private modules, default is 'github.com/progress-platform-services/*\n\n      # if version specified, it takes precedence; can be a semver like 1.0.2-xyz or a tag like \"latest\"\n      version: ${{ needs.detect-custom-metadata.outputs.versionFromFile || '1.0.0' }}\n      detect-version-source-type: 'file' # options include \"none\" (do not detect), \"file\", \"github-tag\" or \"github-release\"\n      detect-version-source-parameter: '' # use for file name\n      language: ${{ needs.detect-custom-metadata.outputs.appBuildLanguage }} # Go, Ruby, Rust, JavaScript, TypeScript, Python, Java, C#, PHP, other - used for build and SonarQube language setting\n      \n      # complexity-checks, linting, trufflehog and trivy\n      perform-complexity-checks: true\n      # scc-output-filename: 'scc-output.txt'\n      perform-language-linting: true    # Perform language-specific linting and pre-compilation checks\n      perform-trufflehog-scan: true\n      fail-trufflehog-on-secrets-found: true\n      perform-trivy-scan: true\n\n      # grype vulnerability scanning\n      perform-grype-scan: true\n      grype-fail-on-high: true\n      grype-fail-on-critical: true\n             \n      # perform application build and unit testing, will use custom repository properties when implemented for chef-primary-application, chef-build-profile, and chef-build-language\n      build: true\n      build-profile: ${{ needs.detect-custom-metadata.outputs.appBuildProfile }}\n      unit-tests: false\n      unit-test-output-path: \"path/to/file.out\"\n      unit-test-command-override: \"\"\n \n      # BlackDuck SAST (Polaris) require a build or binary present in repo to do SAST testing\n      # requires these secrets: POLARIS_SERVER_URL, POLARIS_ACCESS_TOKEN\n      perform-blackduck-polaris: true\n      polaris-application-name: \"Chef-Agents\"  # one of these: Chef-Agents, Chef-Automate, Chef-Chef360, Chef-Habitat, Chef-Infrastructure-Server, Chef-Shared-Services, Chef-Other, Chef-Non-Product\n      polaris-project-name: ${{ github.event.repository.name }}   # arch-sample-cli\n      # polaris-working-directory: '.' # Working directory for the scan, defaults to . but usually lang-dependent like ./src\n      # polaris-coverity-build-command: 'go build -o bin/chef-cli.exe' # Coverity build command, typically done in build stage by language or here as param 1-liner like \"mvn clean install\"\n      # polaris-coverity-clean-command: 'go clean' # Coverity clean command, typically done before build stage by language or here as param 1-liner like \"mvn clean\"\n      # polaris-detect-search-depth: '5' # Detect search depth, blank but can be set to \"3\" to search up to 3 levels of subdirectories for code to scan'\n      # polaris-assessment-mode: 'SAST' # Assessment mode (SAST, CI or SOURCE_UPLOAD)\n      # wait-for-scan: true\n      # polaris-detect-args: ''  # Additional Detect arguments, can supply extra arguments like \"--detect.diagnostic=true\"\n      # coverity_build_command: \"go build\"\n      # coverity_clean_command: \"go clean\"\n      # polaris-config-path: ''   # Path to Detect configuration file, typically a file supplied at root level like ./detect-config.yml\n      # polaris-coverity-config-path: ''  # Path to Coverity configuration file, typically a file supplied at root level like ./coverity.yml\n      # polaris-coverity-args: '' # Additional Coverity arguments,can supply extra arguments like \"--config-override capture.build.build-command=make\n      \n      # perform SonarQube scan, with or without unit test coverage data\n      # requires secrets SONAR_TOKEN and SONAR_HOST_URL (progress.sonar.com)\n      perform-sonarqube-scan: true\n      # perform-sonar-build: true\n      # build-profile: 'default' \n      # report-unit-test-coverage: true\n      perform-docker-scan: false  # scan Dockerfile and built images with Docker Scout or Trivy; see repo custom properties matching \"container\"\n\n      # report to central developer dashboard\n      report-to-atlassian-dashboard: false\n      quality-product-name: 'Chef-Agents'   # product name for quality reporting, like Chef360, Courier, Inspec\n      # quality-product-name: ${{ github.event.repository.name }}   # like 'Chef-360' - the product name for quality reporting, like Chef360, Courier, Inspec\n      # quality-sonar-app-name: 'YourSonarAppName'\n      # quality-testing-type: 'Integration' like Unit, Integration, e2e, api, Performance, Security\n      # quality-service-name: 'YourServiceOrRepoName'\n      # quality-junit-report: 'path/to/junit/report''\n\n      # perform Habitat-based and native packaging, publish to package repositories\n      package-binaries: false     # Package binaries (e.g., RPM, DEB, MSI, dpkg + signing + SHA)\n      habitat-build: false        # Create Habitat packages\n      publish-habitat-packages: false   # Publish Habitat packages to Builder\n      publish-habitat-hab_package: false # Chef Habitat package to install (e.g., core/nginx)\n      publish-habitat-hab_version: \"1.0.0\" # Chef Habitat package version (optional)\n      publish-habitat-hab_release: \"20240101010101\"  # Chef Habitat package release (optional)\n      publish-habitat-hab_channel: \"stable\"  # Chef Habitat package channel (e.g., stable, base, base-2025); default is stable\n      publish-habitat-hab_auth_token: \"\"   # Chef Habitat Builder authentication token (uses secret if not provided)\n      publish-habitat-runner_os: \"ubuntu-latest\"   # OS runner for Habitat package publishing job, can also be windows-latest\n      habitat-grype-scan: false  # Scan built Habitat packages with Grype for vulnerabilities\n      publish-packages: false     # Publish packages (e.g., container from Dockerfile to ECR, go-releaser binary to releases page, omnibus to artifactory, gems, choco, homebrew, other app stores)\n\n      # generate and export Software Bill of Materials (SBOM) in various formats\n      generate-sbom: true\n      export-github-sbom: true      # SPDX JSON artifact on job instance  \n      generate-msft-sbom: false\n      license_scout: false      # Run license scout for license compliance (uses .license_scout.yml)\n\n      # perform Blackduck software composition analysis (SCA) for 3rd party CVEs, licensing, and operational risk\n      perform-blackduck-sca-scan: true # combined with generate sbom & generate github-sbom, also needs version above\n      run-bundle-install: true # generate Gemfile.lock at runtime for SBOM pipeline\n      blackduck-project-group-name: 'Chef-Agents' # typically one of (Chef), Chef-Agents, Chef-Automate, Chef-Chef360, Chef-Habitat, Chef-Infrastructure-Server, Chef-Shared-Services, Chef-Non-Product'\n      blackduck-project-name: ${{ github.event.repository.name }} # BlackDuck project name, typically the repository name\n      blackduck-force-low-accuracy-mode: false # if true, forces BlackDuck Detect to run in low accuracy mode which can reduce scan time for large projects at the cost of potentially missing some vulnerabilities; see https://synopsys.atlassian.net/wiki/spaces/INTDOCS/pages/1138617921/Black+Duck+Detect+Accuracy+Levels for details\n      \n      # udf1: 'default' # user defined flag 1\n      # udf2: 'default' # user defined flag 2 \n      # udf3: 'default' # user defined flag 3  \n"
  },
  {
    "path": ".gitignore",
    "content": ".envrc\n.ruby-version\n.direnv\nGemfile.lock\ninspec.lock\n.kitchen\n*.plan\n*.tfstate*\nlocal\n.vscode\n.terraform\n*.idea*\n*.env\n*inspec-gcp.tfvars.json\n*gcp-inspec-attributes.yaml\ninspec-cassettes\n*terraform.tfvars\n*inspec.json"
  },
  {
    "path": ".rspec",
    "content": "--color\n--require spec_helper\n"
  },
  {
    "path": ".rubocop.yml",
    "content": "AllCops:\n  TargetRubyVersion: 2.6\n  Exclude:\n  - Gemfile\n  - generate/Gemfile\n  - Rakefile\n  - 'test/**/*'\n  - 'examples/**/*'\n  - 'vendor/**/*'\n  - 'lib/bundles/inspec-init/templates/**/*'\nDocumentation:\n  Enabled: false\nEncoding:\n  Enabled: true\nHashSyntax:\n  Enabled: true\nClassLength:\n  Max: 200\n  Exclude:\n  - 'libraries/google_compute_firewall.rb'\nLineLength:\n  Enabled: false\nEmptyLinesAroundBlockBody:\n  Enabled: false\nMethodLength:\n  Max: 45\nNumericLiterals:\n  MinDigits: 10\nMetrics/AbcSize:\n  Enabled: false\nMetrics/CyclomaticComplexity:\n  Enabled: false\nMetrics/PerceivedComplexity:\n  Enabled: false\nStyle/PercentLiteralDelimiters:\n  PreferredDelimiters:\n    '%':  '{}'\n    '%i': ()\n    '%q': '{}'\n    '%Q': ()\n    '%r': '{}'\n    '%s': ()\n    '%w': '{}'\n    '%W': ()\n    '%x': ()\nLayout/HashAlignment:\n  Enabled: false\nLayout/EmptyLineAfterGuardClause:\n  Enabled: false\nLayout/ParameterAlignment:\n  Enabled: false\nNaming/PredicateName:\n  Enabled: false\nStyle/ClassAndModuleChildren:\n  Enabled: false\nStyle/ConditionalAssignment:\n  Enabled: false\nStyle/AndOr:\n  Enabled: false\nStyle/Not:\n  Enabled: false\nNaming/FileName:\n  Enabled: true\n  Regex: !ruby/regexp '/^.{3,99}$/'\nStyle/TrailingCommaInArrayLiteral:\n  EnforcedStyleForMultiline: comma\nStyle/TrailingCommaInHashLiteral:\n  EnforcedStyleForMultiline: comma\nStyle/TrailingCommaInArguments:\n  EnforcedStyleForMultiline: comma\nStyle/NegatedIf:\n  Enabled: false\nStyle/UnlessElse:\n  Enabled: false\nBlockDelimiters:\n  Enabled: false\nLayout/SpaceAroundOperators:\n  Enabled: false\nStyle/IfUnlessModifier:\n  Enabled: false\nStyle/RescueStandardError:\n  Enabled: false\nStyle/OptionalBooleanParameter:\n  Enabled: false\nLint/MissingSuper:\n  Enabled: false\nMetrics/MethodLength:\n  Enabled: false\nStyle/AccessorGrouping:\n  Enabled: false\nStyle/GlobalStdStream:\n  Enabled: false\n"
  },
  {
    "path": ".travis.yml",
    "content": "sudo: false\nlanguage: ruby\ncache: bundler\n\nrvm:\n  - 2.4.3\n\nscript:\n  - bundle config set --local without integration\n  - bundle exec rake\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\n<!-- latest_release 1.11.136 -->\n## [v1.11.136](https://github.com/inspec/inspec-gcp/tree/v1.11.136) (2025-10-06)\n\n#### Merged Pull Requests\n- Reorganize InSpec resource docs [#661](https://github.com/inspec/inspec-gcp/pull/661) ([IanMadd](https://github.com/IanMadd))\n<!-- latest_release -->\n\n## [v1.11.135](https://github.com/inspec/inspec-gcp/tree/v1.11.135) (2024-10-18)\n\n#### Merged Pull Requests\n- CHEF-12238-V2-MAGIC-MODULE-monitoring_v3-Projects__group - Resource Implementation [#656](https://github.com/inspec/inspec-gcp/pull/656) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.134](https://github.com/inspec/inspec-gcp/tree/v1.11.134) (2024-10-16)\n\n#### Merged Pull Requests\n- CHEF-12247-V0-MAGIC-MODULE-dataproc_v1-Batch - Resource Implementation [#655](https://github.com/inspec/inspec-gcp/pull/655) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.133](https://github.com/inspec/inspec-gcp/tree/v1.11.133) (2024-10-10)\n\n#### Merged Pull Requests\n- CHEF-12479 Automatically generated by magic modules for service: run_v2 and reso… [#651](https://github.com/inspec/inspec-gcp/pull/651) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.132](https://github.com/inspec/inspec-gcp/tree/v1.11.132) (2024-10-10)\n\n#### Merged Pull Requests\n- CHEF-12253-v4-MAGIC-MODULE-datafusion_v1-Instance - Resource Implementation [#654](https://github.com/inspec/inspec-gcp/pull/654) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.131](https://github.com/inspec/inspec-gcp/tree/v1.11.131) (2024-10-08)\n\n#### Merged Pull Requests\n- CHEF-12251-v2-MAGIC-MODULE-apigee_v1-Organizations__instances__attachment - Resource Implementation [#653](https://github.com/inspec/inspec-gcp/pull/653) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.130](https://github.com/inspec/inspec-gcp/tree/v1.11.130) (2024-09-24)\n\n#### Merged Pull Requests\n- CHEF-12476-MAGIC-MODULE-bigtableadmin_v2-Projects__instances__clusters__backup - Resource Implementation [#652](https://github.com/inspec/inspec-gcp/pull/652) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.129](https://github.com/inspec/inspec-gcp/tree/v1.11.129) (2024-08-29)\n\n#### Merged Pull Requests\n- CHEF-12252 Automatically generated by magic modules for service: apigee_v1 and r… [#650](https://github.com/inspec/inspec-gcp/pull/650) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.128](https://github.com/inspec/inspec-gcp/tree/v1.11.128) (2024-08-20)\n\n#### Merged Pull Requests\n- CHEF-12257-MAGIC-MODULE-metastore_v1-services-backup - Resource Implementation [#644](https://github.com/inspec/inspec-gcp/pull/644) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.127](https://github.com/inspec/inspec-gcp/tree/v1.11.127) (2024-08-19)\n\n#### Merged Pull Requests\n- CHEF-12248-MAGIC-MODULE-Dataproc_v1_session - Resource Implementation [#642](https://github.com/inspec/inspec-gcp/pull/642) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.126](https://github.com/inspec/inspec-gcp/tree/v1.11.126) (2024-08-12)\n\n#### Merged Pull Requests\n- CHEF-12482-v1.4-MAGIC-MODULE-run_v2-Service - Resource Implementation [#648](https://github.com/inspec/inspec-gcp/pull/648) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.125](https://github.com/inspec/inspec-gcp/tree/v1.11.125) (2024-08-05)\n\n#### Merged Pull Requests\n- CHEF-12474-v3-MAGIC-MODULE-bigtableadmin_v2-Projects__instances__appProfile - Resource Implementation [#643](https://github.com/inspec/inspec-gcp/pull/643) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.124](https://github.com/inspec/inspec-gcp/tree/v1.11.124) (2024-07-23)\n\n#### Merged Pull Requests\n- CHEF-12255 Manual DataProc Metastore fedration resource created [#638](https://github.com/inspec/inspec-gcp/pull/638) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.123](https://github.com/inspec/inspec-gcp/tree/v1.11.123) (2024-07-11)\n\n#### Merged Pull Requests\n- CHEF-12256-MAGIC-MODULE-Dataproc-metastore-service - Resource Implementation [#639](https://github.com/inspec/inspec-gcp/pull/639) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.122](https://github.com/inspec/inspec-gcp/tree/v1.11.122) (2024-07-03)\n\n#### Merged Pull Requests\n- CHEF-12475-v2-MAGIC-MODULE-bigtableadmin_v2-Projects__instances__cluster - Resource Implementation [#636](https://github.com/inspec/inspec-gcp/pull/636) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.121](https://github.com/inspec/inspec-gcp/tree/v1.11.121) (2024-07-01)\n\n#### Merged Pull Requests\n- CHEF-7186-MAGIC-MODULE-compute_v1-RegionSecurityPolicy - Resource Implementation [#634](https://github.com/inspec/inspec-gcp/pull/634) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.120](https://github.com/inspec/inspec-gcp/tree/v1.11.120) (2024-06-27)\n\n#### Merged Pull Requests\n- CHEF-12243-MAGIC-MODULE-Dataproc-Jobs-Resource Implementation [#633](https://github.com/inspec/inspec-gcp/pull/633) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.119](https://github.com/inspec/inspec-gcp/tree/v1.11.119) (2024-06-24)\n\n#### Merged Pull Requests\n- CHEF-7205-v1-MAGIC-MODULE-compute_v1-Reservation - Resource Implementation [#630](https://github.com/inspec/inspec-gcp/pull/630) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.118](https://github.com/inspec/inspec-gcp/tree/v1.11.118) (2024-06-20)\n\n#### Merged Pull Requests\n- CHEF-12245-MAGIC-MODULE-dataproc_v1-Projects__regions__autoscalingPolicy - Resource Implementation [#632](https://github.com/inspec/inspec-gcp/pull/632) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.117](https://github.com/inspec/inspec-gcp/tree/v1.11.117) (2024-06-20)\n\n#### Merged Pull Requests\n- CHEF-12244-MAGIC-MODULE-Dataproc Workflow Template - Resource Implementation [#631](https://github.com/inspec/inspec-gcp/pull/631) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.116](https://github.com/inspec/inspec-gcp/tree/v1.11.116) (2024-06-17)\n\n#### Merged Pull Requests\n- CHEF-7348-ORG-MAGIC-MODULE-orgpolicy-Folders__policy - Resource Implementation [#556](https://github.com/inspec/inspec-gcp/pull/556) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.115](https://github.com/inspec/inspec-gcp/tree/v1.11.115) (2024-06-11)\n\n#### Merged Pull Requests\n- CHEF-7347-V3-MAGIC-MODULE-orgpolicy_v2-Folders__constraint - Resource Implementation [#626](https://github.com/inspec/inspec-gcp/pull/626) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.114](https://github.com/inspec/inspec-gcp/tree/v1.11.114) (2024-06-05)\n\n#### Merged Pull Requests\n- CHEF-7352-MAGIC-MODULE-orgpolicy-Projects__policy - Resource Implementation [#554](https://github.com/inspec/inspec-gcp/pull/554) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.113](https://github.com/inspec/inspec-gcp/tree/v1.11.113) (2024-05-30)\n\n#### Merged Pull Requests\n- Rename orgpolicy properties [#629](https://github.com/inspec/inspec-gcp/pull/629) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.112](https://github.com/inspec/inspec-gcp/tree/v1.11.112) (2024-05-28)\n\n#### Merged Pull Requests\n- CHEF-7351_1-MAGIC-MODULE-orgpolicy_v2-Projects__constraint - Resource Implementation [#620](https://github.com/inspec/inspec-gcp/pull/620) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.111](https://github.com/inspec/inspec-gcp/tree/v1.11.111) (2024-05-28)\n\n#### Merged Pull Requests\n- CHEF-7349-MAGIC-MODULE-Orgpolicy_v2-Organizations_constraint - Resource Implementation [#622](https://github.com/inspec/inspec-gcp/pull/622) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.110](https://github.com/inspec/inspec-gcp/tree/v1.11.110) (2024-05-20)\n\n#### Merged Pull Requests\n- Deprecate active support blank method [#627](https://github.com/inspec/inspec-gcp/pull/627) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.109](https://github.com/inspec/inspec-gcp/tree/v1.11.109) (2024-05-09)\n\n#### Merged Pull Requests\n- CHEF-7206_1-MAGIC-MODULE-compute_v1-ResourcePolicy - Resource Implementation [#617](https://github.com/inspec/inspec-gcp/pull/617) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.108](https://github.com/inspec/inspec-gcp/tree/v1.11.108) (2024-05-06)\n\n#### Merged Pull Requests\n- CHEF-7210-MAGIC-MODULE-compute_v1-TargetSslProxy - Resource Implementation [#618](https://github.com/inspec/inspec-gcp/pull/618) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.107](https://github.com/inspec/inspec-gcp/tree/v1.11.107) (2024-05-06)\n\n#### Merged Pull Requests\n- CHEF-7216_2-MAGIC-MODULE-compute_v1-RegionTargetHttpsProxy - Resource Implementation [#605](https://github.com/inspec/inspec-gcp/pull/605) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.106](https://github.com/inspec/inspec-gcp/tree/v1.11.106) (2024-05-03)\n\n#### Merged Pull Requests\n- CHEF-7215__-MAGIC-MODULE-compute_v1-RegionTargetHttpProxy - Resource Implementation [#604](https://github.com/inspec/inspec-gcp/pull/604) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.105](https://github.com/inspec/inspec-gcp/tree/v1.11.105) (2024-05-03)\n\n#### Merged Pull Requests\n- Fix uninitialized constant Parser::AST::Processor::Mixin [#623](https://github.com/inspec/inspec-gcp/pull/623) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.104](https://github.com/inspec/inspec-gcp/tree/v1.11.104) (2024-04-25)\n\n#### Merged Pull Requests\n- CHEF-7208-MAGIC-MODULE-compute_v1-TargetGrpcProxy - Resource Implementation [#616](https://github.com/inspec/inspec-gcp/pull/616) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.103](https://github.com/inspec/inspec-gcp/tree/v1.11.103) (2024-04-25)\n\n#### Merged Pull Requests\n- CHEF-7201-MAGIC-MODULE-compute_v1-RegionCommitment - Resource Implementation [#613](https://github.com/inspec/inspec-gcp/pull/613) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.102](https://github.com/inspec/inspec-gcp/tree/v1.11.102) (2024-04-24)\n\n#### Merged Pull Requests\n- CHEF-7200_1-MAGIC-MODULE-compute_v1-RegionAutoscaler - Resource Implementation [#615](https://github.com/inspec/inspec-gcp/pull/615) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.101](https://github.com/inspec/inspec-gcp/tree/v1.11.101) (2024-04-03)\n\n#### Merged Pull Requests\n- CHEF-7211-MAGIC-MODULE-compute_v1-TargetVpnGateway - Resource Implementation [#612](https://github.com/inspec/inspec-gcp/pull/612) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.100](https://github.com/inspec/inspec-gcp/tree/v1.11.100) (2024-04-02)\n\n#### Merged Pull Requests\n- CHEF-7214-MAGIC-MODULE-compute_v1-RegionSslPolicy - Resource Implementation [#614](https://github.com/inspec/inspec-gcp/pull/614) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.99](https://github.com/inspec/inspec-gcp/tree/v1.11.99) (2024-04-01)\n\n#### Merged Pull Requests\n- CHEF-7217_1-MAGIC-MODULE-compute_v1-RegionUrlMap - Resource Implementation [#609](https://github.com/inspec/inspec-gcp/pull/609) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.98](https://github.com/inspec/inspec-gcp/tree/v1.11.98) (2024-03-28)\n\n#### Merged Pull Requests\n- CHEF-7209-MAGIC-MODULE-compute_v1-TargetInstance - Resource Implementation [#610](https://github.com/inspec/inspec-gcp/pull/610) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.97](https://github.com/inspec/inspec-gcp/tree/v1.11.97) (2024-03-28)\n\n#### Merged Pull Requests\n- CHEF-7218_1-MAGIC-MODULE-compute_v1-InterconnectAttachment - Resource Implementation [#603](https://github.com/inspec/inspec-gcp/pull/603) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.96](https://github.com/inspec/inspec-gcp/tree/v1.11.96) (2024-03-28)\n\n#### Merged Pull Requests\n- CHEF-7198-MAGIC-MODULE-compute_v1-PacketMirroring - Resource Implementation [#601](https://github.com/inspec/inspec-gcp/pull/601) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.95](https://github.com/inspec/inspec-gcp/tree/v1.11.95) (2024-03-28)\n\n#### Merged Pull Requests\n- CHEF-11234: Fix broken CI issue `can&#39;t create Thread: Operation not permitted (ThreadError)` [#611](https://github.com/inspec/inspec-gcp/pull/611) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.94](https://github.com/inspec/inspec-gcp/tree/v1.11.94) (2024-03-14)\n\n#### Merged Pull Requests\n- CHEF-7202_4-MAGIC-MODULE-compute_v1-RegionDiskType - Resource Implementation [#598](https://github.com/inspec/inspec-gcp/pull/598) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.93](https://github.com/inspec/inspec-gcp/tree/v1.11.93) (2024-02-07)\n\n#### Merged Pull Requests\n- CHEF-7367-MAGIC-MODULE-Dataflow-v1b3-Projects-Locations-Jobs - Resource Implementation [#595](https://github.com/inspec/inspec-gcp/pull/595) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.92](https://github.com/inspec/inspec-gcp/tree/v1.11.92) (2024-02-06)\n\n#### Merged Pull Requests\n- CHEF-7196_2-MAGIC-MODULE-compute_v1-NetworkFirewallPolicy - Resource Implementation [#593](https://github.com/inspec/inspec-gcp/pull/593) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.91](https://github.com/inspec/inspec-gcp/tree/v1.11.91) (2024-02-06)\n\n#### Merged Pull Requests\n- CHEF-7342-MAGIC-MODULE-compute_v1-GlobalNetworkEndpointGroup - Resource Implementation [#594](https://github.com/inspec/inspec-gcp/pull/594) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.90](https://github.com/inspec/inspec-gcp/tree/v1.11.90) (2024-02-06)\n\n#### Merged Pull Requests\n- CHEF-7350-MAGIC-MODULE-orgpolicy-Organizations__policy - Resource Implementation [#555](https://github.com/inspec/inspec-gcp/pull/555) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.89](https://github.com/inspec/inspec-gcp/tree/v1.11.89) (2024-02-06)\n\n#### Merged Pull Requests\n- CHEF-7195-MAGIC-MODULE-compute_v1-NetworkEdgeSecurityService - Resource Implementation [#580](https://github.com/inspec/inspec-gcp/pull/580) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.88](https://github.com/inspec/inspec-gcp/tree/v1.11.88) (2024-02-05)\n\n#### Merged Pull Requests\n- CHEF-7197-MAGIC-MODULE-compute_v1-NodeType - Resource Implementation [#582](https://github.com/inspec/inspec-gcp/pull/582) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.87](https://github.com/inspec/inspec-gcp/tree/v1.11.87) (2024-02-05)\n\n#### Merged Pull Requests\n- CHEF-7193-MAGIC-MODULE-compute_v1-MachineType - Resource Implementation [#592](https://github.com/inspec/inspec-gcp/pull/592) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.86](https://github.com/inspec/inspec-gcp/tree/v1.11.86) (2024-02-05)\n\n#### Merged Pull Requests\n- CHEF-7191-MAGIC-MODULE-compute_v1-License - Resource Implementation [#588](https://github.com/inspec/inspec-gcp/pull/588) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.85](https://github.com/inspec/inspec-gcp/tree/v1.11.85) (2024-02-01)\n\n#### Merged Pull Requests\n- CHEF-7194-MAGIC-MODULE-compute_v1-NetworkAttachment - Resource Implementation [#578](https://github.com/inspec/inspec-gcp/pull/578) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.84](https://github.com/inspec/inspec-gcp/tree/v1.11.84) (2024-02-01)\n\n#### Merged Pull Requests\n- CHEF-7377-ServiceNetworking-ServiceConnections [#570](https://github.com/inspec/inspec-gcp/pull/570) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.83](https://github.com/inspec/inspec-gcp/tree/v1.11.83) (2024-02-01)\n\n#### Merged Pull Requests\n- CHEF-7192_1-MAGIC-MODULE-compute_v1-MachineImage - Resource Implementation [#584](https://github.com/inspec/inspec-gcp/pull/584) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.82](https://github.com/inspec/inspec-gcp/tree/v1.11.82) (2024-01-31)\n\n#### Merged Pull Requests\n- Fix Verify Pipeline timeout issue [#586](https://github.com/inspec/inspec-gcp/pull/586) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.81](https://github.com/inspec/inspec-gcp/tree/v1.11.81) (2024-01-31)\n\n#### Merged Pull Requests\n- Revert &quot;CHEF-7191-MAGIC-MODULE-compute_v1-License - Resource Implementation&quot; [#585](https://github.com/inspec/inspec-gcp/pull/585) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.80](https://github.com/inspec/inspec-gcp/tree/v1.11.80) (2024-01-31)\n\n#### Merged Pull Requests\n- CHEF-7191-MAGIC-MODULE-compute_v1-License - Resource Implementation [#579](https://github.com/inspec/inspec-gcp/pull/579) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.79](https://github.com/inspec/inspec-gcp/tree/v1.11.79) (2024-01-25)\n\n#### Merged Pull Requests\n- Handle array responses [#575](https://github.com/inspec/inspec-gcp/pull/575) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.78](https://github.com/inspec/inspec-gcp/tree/v1.11.78) (2024-01-25)\n\n#### Merged Pull Requests\n- CHEF-7374: Add missing properties to google_service_account_key resource [#576](https://github.com/inspec/inspec-gcp/pull/576) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.77](https://github.com/inspec/inspec-gcp/tree/v1.11.77) (2024-01-23)\n\n#### Merged Pull Requests\n- CHEF-7353 Kubernetes Engine response attribute update [#571](https://github.com/inspec/inspec-gcp/pull/571) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.76](https://github.com/inspec/inspec-gcp/tree/v1.11.76) (2024-01-23)\n\n#### Merged Pull Requests\n- CHEF-7383-ComputeXPN Resource [#574](https://github.com/inspec/inspec-gcp/pull/574) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.75](https://github.com/inspec/inspec-gcp/tree/v1.11.75) (2024-01-22)\n\n#### Merged Pull Requests\n- Fix Http Error logics  [#572](https://github.com/inspec/inspec-gcp/pull/572) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.74](https://github.com/inspec/inspec-gcp/tree/v1.11.74) (2024-01-22)\n\n#### Merged Pull Requests\n- CHEF-7362-Inspec-gcp-cloud-kms-key-rings-crypto-keys-crypto-key-versions [#428](https://github.com/inspec/inspec-gcp/pull/428) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.73](https://github.com/inspec/inspec-gcp/tree/v1.11.73) (2024-01-19)\n\n#### Merged Pull Requests\n- CHEF-7375: SecretManager - Project Secrets  [#569](https://github.com/inspec/inspec-gcp/pull/569) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.72](https://github.com/inspec/inspec-gcp/tree/v1.11.72) (2024-01-18)\n\n#### Merged Pull Requests\n- CHEF-7386-compute-RegionNetworkEndpointGroup - Resource Implementation [#537](https://github.com/inspec/inspec-gcp/pull/537) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.71](https://github.com/inspec/inspec-gcp/tree/v1.11.71) (2024-01-18)\n\n#### Merged Pull Requests\n- CHEF-8912- MAGIC-MODULE-apigee-Organizations__api - Resource Implementation [#542](https://github.com/inspec/inspec-gcp/pull/542) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.70](https://github.com/inspec/inspec-gcp/tree/v1.11.70) (2024-01-18)\n\n#### Merged Pull Requests\n- CHEF-3309-InSpec GCP Http error fixes [#568](https://github.com/inspec/inspec-gcp/pull/568) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.69](https://github.com/inspec/inspec-gcp/tree/v1.11.69) (2024-01-11)\n\n#### Merged Pull Requests\n- Refactor Long to Short Name Conversion [#565](https://github.com/inspec/inspec-gcp/pull/565) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.68](https://github.com/inspec/inspec-gcp/tree/v1.11.68) (2024-01-08)\n\n#### Merged Pull Requests\n- Reverted version pinning [#567](https://github.com/inspec/inspec-gcp/pull/567) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.67](https://github.com/inspec/inspec-gcp/tree/v1.11.67) (2023-12-21)\n\n#### Merged Pull Requests\n- Update inspec version pinning in Gemfile [#563](https://github.com/inspec/inspec-gcp/pull/563) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.66](https://github.com/inspec/inspec-gcp/tree/v1.11.66) (2023-12-15)\n\n#### Merged Pull Requests\n- CHEF - Removed the wrong dir from inspec-gcp. [#561](https://github.com/inspec/inspec-gcp/pull/561) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.65](https://github.com/inspec/inspec-gcp/tree/v1.11.65) (2023-12-13)\n\n#### Merged Pull Requests\n- CHEF-7382-MAGIC-MODULE-compute-VpnGateway - Resource Implementation [#534](https://github.com/inspec/inspec-gcp/pull/534) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.64](https://github.com/inspec/inspec-gcp/tree/v1.11.64) (2023-12-12)\n\n#### Merged Pull Requests\n- chore: correct typo in README for resource reference [#558](https://github.com/inspec/inspec-gcp/pull/558) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.63](https://github.com/inspec/inspec-gcp/tree/v1.11.63) (2023-12-12)\n\n#### Merged Pull Requests\n- CHEF-7384: MAGIC-MODULE-compute-ServiceAttachment - Resource Implementation [#535](https://github.com/inspec/inspec-gcp/pull/535) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.62](https://github.com/inspec/inspec-gcp/tree/v1.11.62) (2023-12-08)\n\n#### Merged Pull Requests\n- CHEF-7357-MAGIC-MODULE-apigee-Organizations__envgroups__attachment - Resource Implementation [#540](https://github.com/inspec/inspec-gcp/pull/540) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.61](https://github.com/inspec/inspec-gcp/tree/v1.11.61) (2023-12-08)\n\n#### Merged Pull Requests\n- CHEF-7356-MAGIC-MODULE-apigee-Organizations__envgroup - Resource Implementation [#539](https://github.com/inspec/inspec-gcp/pull/539) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.60](https://github.com/inspec/inspec-gcp/tree/v1.11.60) (2023-12-08)\n\n#### Merged Pull Requests\n- CHEF-7354-MAGIC-MODULE-artifactregistry-Projects__locations__repository - Resource Implementation [#544](https://github.com/inspec/inspec-gcp/pull/544) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.59](https://github.com/inspec/inspec-gcp/tree/v1.11.59) (2023-12-08)\n\n#### Merged Pull Requests\n- Removed worng dir [#551](https://github.com/inspec/inspec-gcp/pull/551) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.58](https://github.com/inspec/inspec-gcp/tree/v1.11.58) (2023-12-08)\n\n#### Merged Pull Requests\n- CHEF-7364-MAGIC-MODULE-composer-Projects__locations__environment - Resource Implementation [#546](https://github.com/inspec/inspec-gcp/pull/546) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.57](https://github.com/inspec/inspec-gcp/tree/v1.11.57) (2023-12-06)\n\n#### Merged Pull Requests\n- chore: uncomment terraform scripts [#549](https://github.com/inspec/inspec-gcp/pull/549) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.56](https://github.com/inspec/inspec-gcp/tree/v1.11.56) (2023-12-06)\n\n#### Merged Pull Requests\n- CHEF-7369 Updated dataproc_cluster resource [#545](https://github.com/inspec/inspec-gcp/pull/545) ([Nik08](https://github.com/Nik08))\n\n## [v1.11.55](https://github.com/inspec/inspec-gcp/tree/v1.11.55) (2023-12-05)\n\n#### Merged Pull Requests\n- Chore: Remove redundant `return` statement to fix rubocop 1.58.0 lint offense [#548](https://github.com/inspec/inspec-gcp/pull/548) ([ahasunos](https://github.com/ahasunos))\n\n## [v1.11.54](https://github.com/inspec/inspec-gcp/tree/v1.11.54) (2023-12-01)\n\n#### Merged Pull Requests\n- CHEF-7355-MAGIC-MODULE-apigee-Organization - Resource Implementation [#541](https://github.com/inspec/inspec-gcp/pull/541) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.53](https://github.com/inspec/inspec-gcp/tree/v1.11.53) (2023-11-29)\n\n#### Merged Pull Requests\n- CHEF-7365-MAGIC-MODULE-composer-Projects__locations__imageVersion - Resource Implementation [#527](https://github.com/inspec/inspec-gcp/pull/527) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.52](https://github.com/inspec/inspec-gcp/tree/v1.11.52) (2023-10-16)\n\n#### Merged Pull Requests\n- CHEF-5584-MAGIC-MODULE-vertex_ai-Tensorboards__experiments__runs__timeSeries_resource - Resource Implementation [#524](https://github.com/inspec/inspec-gcp/pull/524) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.51](https://github.com/inspec/inspec-gcp/tree/v1.11.51) (2023-10-13)\n\n#### Merged Pull Requests\n- CHEF-5554-MAGIC-MODULE-vertex_ai-Datasets__dataItem - Resource Implementation [#494](https://github.com/inspec/inspec-gcp/pull/494) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.50](https://github.com/inspec/inspec-gcp/tree/v1.11.50) (2023-10-13)\n\n#### Merged Pull Requests\n- CHEF-5579-MAGIC-MODULE-vertex_ai-Study - Resource Implementation [#522](https://github.com/inspec/inspec-gcp/pull/522) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.49](https://github.com/inspec/inspec-gcp/tree/v1.11.49) (2023-10-12)\n\n#### Merged Pull Requests\n- CHEF-5563-MAGIC-MODULE-vertex_ai-Index - Resource Implementation [#521](https://github.com/inspec/inspec-gcp/pull/521) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.48](https://github.com/inspec/inspec-gcp/tree/v1.11.48) (2023-10-12)\n\n#### Merged Pull Requests\n- CHEF-5572-MAGIC-MODULE-vertex_ai-Models__evaluations__slice - Resource Implementation [#508](https://github.com/inspec/inspec-gcp/pull/508) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.47](https://github.com/inspec/inspec-gcp/tree/v1.11.47) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5556-MAGIC-MODULE-vertex_ai-Datasets__savedQuery - Resource Implementation [#495](https://github.com/inspec/inspec-gcp/pull/495) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.46](https://github.com/inspec/inspec-gcp/tree/v1.11.46) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5565-MAGIC-MODULE-vertex_ai-MetadataStores__artifact - Resource Implementation [#501](https://github.com/inspec/inspec-gcp/pull/501) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.45](https://github.com/inspec/inspec-gcp/tree/v1.11.45) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5566-MAGIC-MODULE-vertex_ai-MetadataStores__context - Resource Implementation [#502](https://github.com/inspec/inspec-gcp/pull/502) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.44](https://github.com/inspec/inspec-gcp/tree/v1.11.44) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5567-MAGIC-MODULE-vertex_ai-MetadataStores__execution - Resource Implementation [#503](https://github.com/inspec/inspec-gcp/pull/503) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.43](https://github.com/inspec/inspec-gcp/tree/v1.11.43) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5553-MAGIC-MODULE-vertex_ai-Datasets__annotationSpec - Resource Implementation [#492](https://github.com/inspec/inspec-gcp/pull/492) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.42](https://github.com/inspec/inspec-gcp/tree/v1.11.42) (2023-10-10)\n\n#### Merged Pull Requests\n- CHEF-5569-MAGIC-MODULE-vertex_ai-ModelDeploymentMonitoringJob - Resource Implementation [#505](https://github.com/inspec/inspec-gcp/pull/505) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.41](https://github.com/inspec/inspec-gcp/tree/v1.11.41) (2023-10-09)\n\n#### Merged Pull Requests\n- CHEF-5568-MAGIC-MODULE-vertex_ai-MetadataStores__metadataSchema - Resource Implementation [#504](https://github.com/inspec/inspec-gcp/pull/504) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.40](https://github.com/inspec/inspec-gcp/tree/v1.11.40) (2023-10-09)\n\n#### Merged Pull Requests\n- CHEF-5570-MAGIC-MODULE-vertex_ai-Model - Resource Implementation [#485](https://github.com/inspec/inspec-gcp/pull/485) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.39](https://github.com/inspec/inspec-gcp/tree/v1.11.39) (2023-10-09)\n\n#### Merged Pull Requests\n- CHEF-5574-MAGIC-MODULE-vertex_ai-NasJobs__nasTrialDetail - Resource Implementation [#491](https://github.com/inspec/inspec-gcp/pull/491) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.38](https://github.com/inspec/inspec-gcp/tree/v1.11.38) (2023-10-09)\n\n#### Merged Pull Requests\n- CHEF-5564-MAGIC-MODULE-vertex_ai-MetadataStore - Resource Implementation [#490](https://github.com/inspec/inspec-gcp/pull/490) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.37](https://github.com/inspec/inspec-gcp/tree/v1.11.37) (2023-09-27)\n\n#### Merged Pull Requests\n- CHEF-5555-MAGIC-MODULE-vertex_ai-Datasets__dataItems__annotation - Resource Implementation [#516](https://github.com/inspec/inspec-gcp/pull/516) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.36](https://github.com/inspec/inspec-gcp/tree/v1.11.36) (2023-09-25)\n\n#### Merged Pull Requests\n- CHEF-5571-MAGIC-MODULE-vertex_ai-Models__evaluation - Resource Implementation [#506](https://github.com/inspec/inspec-gcp/pull/506) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.35](https://github.com/inspec/inspec-gcp/tree/v1.11.35) (2023-09-25)\n\n#### Merged Pull Requests\n- CHEF-5562-MAGIC-MODULE-vertex_ai-IndexEndpoint - Resource Implementation [#497](https://github.com/inspec/inspec-gcp/pull/497) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.34](https://github.com/inspec/inspec-gcp/tree/v1.11.34) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5582-MAGIC-MODULE-vertex_ai-Tensorboards__experiment - Resource Implementation [#499](https://github.com/inspec/inspec-gcp/pull/499) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.33](https://github.com/inspec/inspec-gcp/tree/v1.11.33) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5583-MAGIC-MODULE-vertex_ai-Tensorboards__experiments__run - Resource Implementation [#513](https://github.com/inspec/inspec-gcp/pull/513) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.32](https://github.com/inspec/inspec-gcp/tree/v1.11.32) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5560-MAGIC-MODULE-vertex_ai-Featurestores__entityTypes__feature - Resource Implementation [#517](https://github.com/inspec/inspec-gcp/pull/517) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.31](https://github.com/inspec/inspec-gcp/tree/v1.11.31) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5561-MAGIC-MODULE-vertex_ai-HyperparameterTuningJob - Resource Implementation [#515](https://github.com/inspec/inspec-gcp/pull/515) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.30](https://github.com/inspec/inspec-gcp/tree/v1.11.30) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5560-MAGIC-MODULE-vertex_ai-Featurestores__entityType - Resource Implementation [#500](https://github.com/inspec/inspec-gcp/pull/500) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.29](https://github.com/inspec/inspec-gcp/tree/v1.11.29) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5559-MAGIC-MODULE-vertex_ai-Featurestores__entityType - Resource Implementation [#496](https://github.com/inspec/inspec-gcp/pull/496) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.28](https://github.com/inspec/inspec-gcp/tree/v1.11.28) (2023-09-22)\n\n#### Merged Pull Requests\n- CHEF-5580-MAGIC-MODULE-vertex_ai-Studies__trial - Resource Implementation [#507](https://github.com/inspec/inspec-gcp/pull/507) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.27](https://github.com/inspec/inspec-gcp/tree/v1.11.27) (2023-09-20)\n\n#### Merged Pull Requests\n- CHEF-5558-MAGIC-MODULE-vertex_ai-Featurestore - Resource Implementation [#483](https://github.com/inspec/inspec-gcp/pull/483) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.26](https://github.com/inspec/inspec-gcp/tree/v1.11.26) (2023-09-20)\n\n#### Merged Pull Requests\n- CHEF-5575-MAGIC-MODULE-vertex_ai-PipelineJob - Resource Implementation [#484](https://github.com/inspec/inspec-gcp/pull/484) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.25](https://github.com/inspec/inspec-gcp/tree/v1.11.25) (2023-09-19)\n\n#### Merged Pull Requests\n- CHEF-5577-MAGIC-MODULE-vertex_ai-Schedule - Resource Implementation [#487](https://github.com/inspec/inspec-gcp/pull/487) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.24](https://github.com/inspec/inspec-gcp/tree/v1.11.24) (2023-09-19)\n\n#### Merged Pull Requests\n- CHEF-5581-MAGIC-MODULE-vertex_ai-Tensorboard - Resource Implementation [#489](https://github.com/inspec/inspec-gcp/pull/489) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.23](https://github.com/inspec/inspec-gcp/tree/v1.11.23) (2023-09-18)\n\n#### Merged Pull Requests\n- CHEF-5557-MAGIC-MODULE-vertex_ai-Endpoint - Resource Implementation [#482](https://github.com/inspec/inspec-gcp/pull/482) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.22](https://github.com/inspec/inspec-gcp/tree/v1.11.22) (2023-09-18)\n\n#### Merged Pull Requests\n- CHEF-5573-MAGIC-MODULE-vertex_ai-NasJob - Resource Implementation [#488](https://github.com/inspec/inspec-gcp/pull/488) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.21](https://github.com/inspec/inspec-gcp/tree/v1.11.21) (2023-09-15)\n\n#### Merged Pull Requests\n- CHEF-5549-MAGIC-MODULE-vertex_ai-BatchPredictionJob - Resource Implementation [#477](https://github.com/inspec/inspec-gcp/pull/477) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.20](https://github.com/inspec/inspec-gcp/tree/v1.11.20) (2023-09-15)\n\n#### Merged Pull Requests\n- CHEF-5550-MAGIC-MODULE-vertex_ai-CustomJob - Resource Implementation [#476](https://github.com/inspec/inspec-gcp/pull/476) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.19](https://github.com/inspec/inspec-gcp/tree/v1.11.19) (2023-09-14)\n\n#### Merged Pull Requests\n- CHEF-5585-MAGIC-MODULE-vertex_ai-TrainingPipeline - Resource Implementation [#479](https://github.com/inspec/inspec-gcp/pull/479) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.18](https://github.com/inspec/inspec-gcp/tree/v1.11.18) (2023-09-11)\n\n#### Merged Pull Requests\n- CHEF-5552-MAGIC-MODULE-vertex_ai-Dataset - Resource Implementation [#467](https://github.com/inspec/inspec-gcp/pull/467) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.17](https://github.com/inspec/inspec-gcp/tree/v1.11.17) (2023-09-08)\n\n#### Merged Pull Requests\n- CHEF-6191-Fixed Linting Naming Issues [#473](https://github.com/inspec/inspec-gcp/pull/473) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.16](https://github.com/inspec/inspec-gcp/tree/v1.11.16) (2023-09-07)\n\n#### Merged Pull Requests\n- CHEF-5991-GlobalNetworkEndpointGroup Resource [#462](https://github.com/inspec/inspec-gcp/pull/462) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.15](https://github.com/inspec/inspec-gcp/tree/v1.11.15) (2023-09-07)\n\n#### Merged Pull Requests\n- Fixed vertex ai uri handleing-current version had no support for base… [#466](https://github.com/inspec/inspec-gcp/pull/466) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.14](https://github.com/inspec/inspec-gcp/tree/v1.11.14) (2023-08-29)\n\n#### Merged Pull Requests\n- CHEF-5883-ImageFamilyView Resource-GCP Compute [#449](https://github.com/inspec/inspec-gcp/pull/449) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.13](https://github.com/inspec/inspec-gcp/tree/v1.11.13) (2023-08-29)\n\n#### Merged Pull Requests\n- CHEF-4076-DeidentifyTemplate [#461](https://github.com/inspec/inspec-gcp/pull/461) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.12](https://github.com/inspec/inspec-gcp/tree/v1.11.12) (2023-08-29)\n\n#### Merged Pull Requests\n- CHEF-4076 Resource added for DeIdentify Template  [#447](https://github.com/inspec/inspec-gcp/pull/447) ([balasubramanian-s](https://github.com/balasubramanian-s))\n\n## [v1.11.11](https://github.com/inspec/inspec-gcp/tree/v1.11.11) (2023-08-29)\n\n#### Merged Pull Requests\n- Removed unused files [#460](https://github.com/inspec/inspec-gcp/pull/460) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.10](https://github.com/inspec/inspec-gcp/tree/v1.11.10) (2023-08-29)\n\n#### Merged Pull Requests\n- Removed the support for expeditor changes for ruby run time 2.7 [#459](https://github.com/inspec/inspec-gcp/pull/459) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.9](https://github.com/inspec/inspec-gcp/tree/v1.11.9) (2023-08-28)\n\n#### Merged Pull Requests\n- No Change [#454](https://github.com/inspec/inspec-gcp/pull/454) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.8](https://github.com/inspec/inspec-gcp/tree/v1.11.8) (2023-08-24)\n\n#### Merged Pull Requests\n- Naming linting fix [#448](https://github.com/inspec/inspec-gcp/pull/448) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.7](https://github.com/inspec/inspec-gcp/tree/v1.11.7) (2023-08-17)\n\n#### Merged Pull Requests\n-  CHEF-4075 Resource added for Dlp stored info types [#446](https://github.com/inspec/inspec-gcp/pull/446) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.6](https://github.com/inspec/inspec-gcp/tree/v1.11.6) (2023-08-16)\n\n#### Merged Pull Requests\n- CHEF-4074 dlp inspect template resource [#445](https://github.com/inspec/inspec-gcp/pull/445) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.5](https://github.com/inspec/inspec-gcp/tree/v1.11.5) (2023-08-16)\n\n#### Merged Pull Requests\n- CHEF-4073 DLP-job-trigger-resource [#443](https://github.com/inspec/inspec-gcp/pull/443) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.4](https://github.com/inspec/inspec-gcp/tree/v1.11.4) (2023-07-27)\n\n#### Merged Pull Requests\n- CHEF-4077  DLP job resources [#441](https://github.com/inspec/inspec-gcp/pull/441) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.3](https://github.com/inspec/inspec-gcp/tree/v1.11.3) (2023-07-27)\n\n#### Merged Pull Requests\n- CHEF-1604 api updated from beta4 to v1 [#440](https://github.com/inspec/inspec-gcp/pull/440) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.2](https://github.com/inspec/inspec-gcp/tree/v1.11.2) (2023-07-27)\n\n#### Merged Pull Requests\n- CHEF-4288 wrong atrribute workloadMetadataConfig fixed [#442](https://github.com/inspec/inspec-gcp/pull/442) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.11.1](https://github.com/inspec/inspec-gcp/tree/v1.11.1) (2023-06-12)\n\n#### Merged Pull Requests\n- Fix blog post link [#436](https://github.com/inspec/inspec-gcp/pull/436) ([futtetennista](https://github.com/futtetennista))\n\n## [v1.11.0](https://github.com/inspec/inspec-gcp/tree/v1.11.0) (2023-05-03)\n\n#### Merged Pull Requests\n- RESOURCE-599 State added in Cloud Scheduler files generated from MM [#439](https://github.com/inspec/inspec-gcp/pull/439) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.39](https://github.com/inspec/inspec-gcp/tree/v1.10.39) (2023-01-31)\n\n#### Merged Pull Requests\n- RESOURCE-564 Update the Readme.md file in inspec-gcp [#434](https://github.com/inspec/inspec-gcp/pull/434) ([soumyo13](https://github.com/soumyo13))\n\n## [v1.10.38](https://github.com/inspec/inspec-gcp/tree/v1.10.38) (2023-01-31)\n\n#### Merged Pull Requests\n- RESOURCE-586  Fix the build lint issue in inspec-gcp [#435](https://github.com/inspec/inspec-gcp/pull/435) ([soumyo13](https://github.com/soumyo13))\n\n## [v1.10.37](https://github.com/inspec/inspec-gcp/tree/v1.10.37) (2022-07-29)\n\n#### Merged Pull Requests\n- RESOURCE-466-magic-moment-gcp-cloud-kms-key-rings-import-jobs [#426](https://github.com/inspec/inspec-gcp/pull/426) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.36](https://github.com/inspec/inspec-gcp/tree/v1.10.36) (2022-07-27)\n\n#### Merged Pull Requests\n- RESOURCE-458-gcp-cloud-kms-ekm-connections [#425](https://github.com/inspec/inspec-gcp/pull/425) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.35](https://github.com/inspec/inspec-gcp/tree/v1.10.35) (2022-07-13)\n\n#### Merged Pull Requests\n- RESOURCE 456-gcp-cloud-kms-projects-locations [#422](https://github.com/inspec/inspec-gcp/pull/422) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.34](https://github.com/inspec/inspec-gcp/tree/v1.10.34) (2022-07-04)\n\n#### Merged Pull Requests\n- google_project_iam_binding.rb file added [#424](https://github.com/inspec/inspec-gcp/pull/424) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.33](https://github.com/inspec/inspec-gcp/tree/v1.10.33) (2022-07-04)\n\n#### Merged Pull Requests\n- 420 undefined method google project iam binding [#423](https://github.com/inspec/inspec-gcp/pull/423) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.32](https://github.com/inspec/inspec-gcp/tree/v1.10.32) (2022-07-04)\n\n#### Merged Pull Requests\n- Allow more flexibility to GOOGLE_APPLICATION_CREDENTIALS parsing [#415](https://github.com/inspec/inspec-gcp/pull/415) ([rbclark](https://github.com/rbclark))\n\n## [v1.10.31](https://github.com/inspec/inspec-gcp/tree/v1.10.31) (2022-06-30)\n\n#### Merged Pull Requests\n- support reading profile from creds [#417](https://github.com/inspec/inspec-gcp/pull/417) ([sathish-progress](https://github.com/sathish-progress))\n\n## [v1.10.30](https://github.com/inspec/inspec-gcp/tree/v1.10.30) (2022-06-19)\n\n#### Merged Pull Requests\n- RESOURCE-409-magic-module-template-for-health-region-check [#419](https://github.com/inspec/inspec-gcp/pull/419) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.29](https://github.com/inspec/inspec-gcp/tree/v1.10.29) (2022-06-16)\n\n#### Merged Pull Requests\n- input and value updated from controls [#407](https://github.com/inspec/inspec-gcp/pull/407) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.28](https://github.com/inspec/inspec-gcp/tree/v1.10.28) (2022-06-15)\n\n#### Merged Pull Requests\n- RESOURCE-325-soc2-section-cc6-6-gcp [#411](https://github.com/inspec/inspec-gcp/pull/411) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.27](https://github.com/inspec/inspec-gcp/tree/v1.10.27) (2022-05-19)\n\n#### Merged Pull Requests\n- Do not raise an error when calling resource_id if @connection is nil [#416](https://github.com/inspec/inspec-gcp/pull/416) ([rbclark](https://github.com/rbclark))\n\n## [v1.10.26](https://github.com/inspec/inspec-gcp/tree/v1.10.26) (2022-05-10)\n\n#### Merged Pull Requests\n- RESOURCE-356 add-superclass-resource-id-method-for-gcp [#414](https://github.com/inspec/inspec-gcp/pull/414) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.25](https://github.com/inspec/inspec-gcp/tree/v1.10.25) (2022-05-06)\n\n#### Merged Pull Requests\n-  RESOURCE-37-sql  added for sql operations [#412](https://github.com/inspec/inspec-gcp/pull/412) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.24](https://github.com/inspec/inspec-gcp/tree/v1.10.24) (2022-04-22)\n\n#### Merged Pull Requests\n- RESOURCE-68 compute-global-public-delegated-prefixes [#413](https://github.com/inspec/inspec-gcp/pull/413) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.23](https://github.com/inspec/inspec-gcp/tree/v1.10.23) (2022-03-14)\n\n#### Merged Pull Requests\n- RESOURCE-55 region health check services [#401](https://github.com/inspec/inspec-gcp/pull/401) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.21](https://github.com/inspec/inspec-gcp/tree/v1.10.21) (2022-03-14)\n\n#### Merged Pull Requests\n- RESOURCE-54 F/region instance group [#377](https://github.com/inspec/inspec-gcp/pull/377) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.20](https://github.com/inspec/inspec-gcp/tree/v1.10.20) (2022-03-14)\n\n#### Merged Pull Requests\n- RESOURCE-65 added resource interconnects [#368](https://github.com/inspec/inspec-gcp/pull/368) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.19](https://github.com/inspec/inspec-gcp/tree/v1.10.19) (2022-02-25)\n\n#### Merged Pull Requests\n- RESOURCE-51 Bump version to 1.10.0 by Chef Expeditor Zone Operation [#389](https://github.com/inspec/inspec-gcp/pull/389) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.17](https://github.com/inspec/inspec-gcp/tree/v1.10.17) (2022-02-25)\n\n#### Merged Pull Requests\n- fix doc: inspec-gcp google_container_node_pool resource [#355](https://github.com/inspec/inspec-gcp/pull/355) ([pradeepbhadani](https://github.com/pradeepbhadani))\n\n## [v1.10.16](https://github.com/inspec/inspec-gcp/tree/v1.10.16) (2022-02-24)\n\n#### Merged Pull Requests\n- RESOURCE-34 Sql Connect Bump version to 1.10.0 by Chef Expeditor [#391](https://github.com/inspec/inspec-gcp/pull/391) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.15](https://github.com/inspec/inspec-gcp/tree/v1.10.15) (2022-02-23)\n\n#### Merged Pull Requests\n- Replace deprecated --without flag with bundle config [#330](https://github.com/inspec/inspec-gcp/pull/330) ([jayashrig158](https://github.com/jayashrig158))\n\n## [v1.10.14](https://github.com/inspec/inspec-gcp/tree/v1.10.14) (2022-02-23)\n\n#### Merged Pull Requests\n- RESOURCE-53 Region Operations Bump version to 1.10.0 by Chef Expeditor [#381](https://github.com/inspec/inspec-gcp/pull/381) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.13](https://github.com/inspec/inspec-gcp/tree/v1.10.13) (2022-02-23)\n\n#### Merged Pull Requests\n- Update inspec-bin requirement from 4.16.0 to 4.37.8 [#323](https://github.com/inspec/inspec-gcp/pull/323) ([dependabot-preview[bot]](https://github.com/dependabot-preview[bot]))\n\n## [v1.10.12](https://github.com/inspec/inspec-gcp/tree/v1.10.12) (2022-02-23)\n\n#### Merged Pull Requests\n- Upgrade to GitHub-native Dependabot [#319](https://github.com/inspec/inspec-gcp/pull/319) ([dependabot-preview[bot]](https://github.com/dependabot-preview[bot]))\n\n## [v1.10.11](https://github.com/inspec/inspec-gcp/tree/v1.10.11) (2022-02-23)\n\n#### Merged Pull Requests\n- F/sql database3 [#395](https://github.com/inspec/inspec-gcp/pull/395) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.10](https://github.com/inspec/inspec-gcp/tree/v1.10.10) (2022-02-23)\n\n#### Merged Pull Requests\n- RESOURCE-36 sql flags [#396](https://github.com/inspec/inspec-gcp/pull/396) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.9](https://github.com/inspec/inspec-gcp/tree/v1.10.9) (2022-02-22)\n\n#### Merged Pull Requests\n- RESOURCE-67 imageFamilyViews [#373](https://github.com/inspec/inspec-gcp/pull/373) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.8](https://github.com/inspec/inspec-gcp/tree/v1.10.8) (2022-02-22)\n\n#### Merged Pull Requests\n- soumyo/updated_readme_file [#333](https://github.com/inspec/inspec-gcp/pull/333) ([soumyo13](https://github.com/soumyo13))\n\n## [v1.10.7](https://github.com/inspec/inspec-gcp/tree/v1.10.7) (2022-02-22)\n\n#### Merged Pull Requests\n- RESOURCE-70 F/global operations [#362](https://github.com/inspec/inspec-gcp/pull/362) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.6](https://github.com/inspec/inspec-gcp/tree/v1.10.6) (2022-02-22)\n\n#### Merged Pull Requests\n- Firewall rules [#361](https://github.com/inspec/inspec-gcp/pull/361) ([ben-watt-es](https://github.com/ben-watt-es))\n\n## [v1.10.5](https://github.com/inspec/inspec-gcp/tree/v1.10.5) (2022-02-22)\n\n#### Merged Pull Requests\n- RESOURCE-64 F/license codes [#371](https://github.com/inspec/inspec-gcp/pull/371) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.4](https://github.com/inspec/inspec-gcp/tree/v1.10.4) (2022-02-22)\n\n#### Merged Pull Requests\n- RESOURCE-66 f/interconnect_location [#363](https://github.com/inspec/inspec-gcp/pull/363) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.3](https://github.com/inspec/inspec-gcp/tree/v1.10.3) (2022-02-22)\n\n#### Merged Pull Requests\n- RESOURCE-72 New resource disk types [#358](https://github.com/inspec/inspec-gcp/pull/358) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.2](https://github.com/inspec/inspec-gcp/tree/v1.10.2) (2022-02-21)\n\n#### Merged Pull Requests\n- RESOURCE-73 F/accelerator types [#357](https://github.com/inspec/inspec-gcp/pull/357) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.1](https://github.com/inspec/inspec-gcp/tree/v1.10.1) (2022-02-21)\n\n#### Merged Pull Requests\n- RESOURCE-200 2.5 , 2.6 ruby version removed [#397](https://github.com/inspec/inspec-gcp/pull/397) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.10.0](https://github.com/inspec/inspec-gcp/tree/v1.10.0) (2021-12-06)\n\n#### Merged Pull Requests\n- Added Support for GKE ServerConfig resource pack [#370](https://github.com/inspec/inspec-gcp/pull/370) ([varunsharma5](https://github.com/varunsharma5))\n\n## [v1.9.0](https://github.com/inspec/inspec-gcp/tree/v1.9.0) (2021-11-23)\n\n#### Merged Pull Requests\n- Fix for #366 to add error handling for missing primary_state attribute [#367](https://github.com/inspec/inspec-gcp/pull/367) ([jonlives](https://github.com/jonlives))\n\n## [v1.8.10](https://github.com/inspec/inspec-gcp/tree/v1.8.10) (2021-10-18)\n\n#### Merged Pull Requests\n- Add support for regional disks (plural) [#331](https://github.com/inspec/inspec-gcp/pull/331) ([frits-v](https://github.com/frits-v))\n\n## [v1.8.9](https://github.com/inspec/inspec-gcp/tree/v1.8.9) (2021-10-18)\n\n#### Merged Pull Requests\n- Issue/gce persistent disk csi driver config 350 v2 [#356](https://github.com/inspec/inspec-gcp/pull/356) ([sa-progress](https://github.com/sa-progress))\n\n## [v1.8.8](https://github.com/inspec/inspec-gcp/tree/v1.8.8) (2021-03-05)\n\n#### Merged Pull Requests\n- Conditionally pin chef-utils on ruby 2.5 [#310](https://github.com/inspec/inspec-gcp/pull/310) ([clintoncwolfe](https://github.com/clintoncwolfe))\n\n## [v1.8.7](https://github.com/inspec/inspec-gcp/tree/v1.8.7) (2021-03-05)\n\n#### Merged Pull Requests\n- Add 4 new features from Magic Modules (modular magician master branch) [#308](https://github.com/inspec/inspec-gcp/pull/308) ([trickyearlobe](https://github.com/trickyearlobe))\n\n## [v1.8.6](https://github.com/inspec/inspec-gcp/tree/v1.8.6) (2021-02-02)\n\n#### Merged Pull Requests\n- Adjusting examples to use updated lib name [#277](https://github.com/inspec/inspec-gcp/pull/277) ([lowwalker](https://github.com/lowwalker))\n\n## [v1.8.5](https://github.com/inspec/inspec-gcp/tree/v1.8.5) (2021-02-02)\n\n#### Merged Pull Requests\n- MM updates [#303](https://github.com/inspec/inspec-gcp/pull/303) ([slevenick](https://github.com/slevenick))\n\n## [v1.8.4](https://github.com/inspec/inspec-gcp/tree/v1.8.4) (2021-02-02)\n\n#### Merged Pull Requests\n- Several updates to CI testing [#306](https://github.com/inspec/inspec-gcp/pull/306) ([clintoncwolfe](https://github.com/clintoncwolfe))\n\n## [v1.8.3](https://github.com/inspec/inspec-gcp/tree/v1.8.3) (2021-02-02)\n\n#### Merged Pull Requests\n- Update inspec-bin requirement from 4.16.0 to 4.26.4 [#304](https://github.com/inspec/inspec-gcp/pull/304) ([dependabot-preview[bot]](https://github.com/dependabot-preview[bot]))\n\n## [v1.8.2](https://github.com/inspec/inspec-gcp/tree/v1.8.2) (2020-11-16)\n\n#### Merged Pull Requests\n- Add AccessLevels, MM updates [#285](https://github.com/inspec/inspec-gcp/pull/285) ([slevenick](https://github.com/slevenick))\n\n## [v1.8.1](https://github.com/inspec/inspec-gcp/tree/v1.8.1) (2020-11-05)\n\n#### Merged Pull Requests\n- MM updates, container cluster additions [#284](https://github.com/inspec/inspec-gcp/pull/284) ([slevenick](https://github.com/slevenick))\n\n## [v1.8.0](https://github.com/inspec/inspec-gcp/tree/v1.8.0) (2020-09-29)\n\n#### Merged Pull Requests\n- MM updates [#280](https://github.com/inspec/inspec-gcp/pull/280) ([slevenick](https://github.com/slevenick))\n\n## [v1.7.0](https://github.com/inspec/inspec-gcp/tree/v1.7.0) (2020-06-24)\n\n#### Merged Pull Requests\n- Memcache updates [#269](https://github.com/inspec/inspec-gcp/pull/269) ([slevenick](https://github.com/slevenick))\n\n## [v1.6.0](https://github.com/inspec/inspec-gcp/tree/v1.6.0) (2020-05-19)\n\n#### Merged Pull Requests\n- Fix instance helpers, managed zone helpers [#259](https://github.com/inspec/inspec-gcp/pull/259) ([slevenick](https://github.com/slevenick))\n\n## [v1.5.0](https://github.com/inspec/inspec-gcp/tree/v1.5.0) (2020-05-07)\n\n#### Merged Pull Requests\n- Fix Service account keys, MM-updates [#256](https://github.com/inspec/inspec-gcp/pull/256) ([slevenick](https://github.com/slevenick))\n\n## [v1.4.0](https://github.com/inspec/inspec-gcp/tree/v1.4.0) (2020-04-28)\n\n#### Merged Pull Requests\n- SQL labels, MM updates [#254](https://github.com/inspec/inspec-gcp/pull/254) ([slevenick](https://github.com/slevenick))\n\n## [v1.3.0](https://github.com/inspec/inspec-gcp/tree/v1.3.0) (2020-04-17)\n\n#### Merged Pull Requests\n- Add encryption, retention policy to buckets (#3384) (#382) [#250](https://github.com/inspec/inspec-gcp/pull/250) ([slevenick](https://github.com/slevenick))\n\n## [v1.2.0](https://github.com/inspec/inspec-gcp/tree/v1.2.0) (2020-04-16)\n\n#### Merged Pull Requests\n- Add security policies [#246](https://github.com/inspec/inspec-gcp/pull/246) ([slevenick](https://github.com/slevenick))\n\n## [v1.1.0](https://github.com/inspec/inspec-gcp/tree/v1.1.0) (2020-04-14)\n\n#### Merged Pull Requests\n- Catch up to mm master, bucket labels [#244](https://github.com/inspec/inspec-gcp/pull/244) ([slevenick](https://github.com/slevenick))\n\n## [v1.0.0](https://github.com/inspec/inspec-gcp/tree/v1.0.0) (2020-04-06)\n\n#### Merged Pull Requests\n- inspec-gcp 1.0 [#226](https://github.com/inspec/inspec-gcp/pull/226) ([slevenick](https://github.com/slevenick))\n\n## [v0.23.4](https://github.com/inspec/inspec-gcp/tree/v0.23.4) (2020-01-21)\n\n#### Merged Pull Requests\n- service_account_scopes nilclass [#227](https://github.com/inspec/inspec-gcp/pull/227) ([bgeesaman](https://github.com/bgeesaman))\n\n## [v0.23.3](https://github.com/inspec/inspec-gcp/tree/v0.23.3) (2020-01-14)\n\n#### Merged Pull Requests\n- updated README.md [#225](https://github.com/inspec/inspec-gcp/pull/225) ([mattbowes](https://github.com/mattbowes))\n\n## [v0.23.2](https://github.com/inspec/inspec-gcp/tree/v0.23.2) (2019-12-13)\n\n#### Merged Pull Requests\n- This resource is a singleton and is only driven off one unique key, &quot;… [#220](https://github.com/inspec/inspec-gcp/pull/220) ([lhasadreams](https://github.com/lhasadreams))\n\n## [v0.23.1](https://github.com/inspec/inspec-gcp/tree/v0.23.1) (2019-12-11)\n\n#### Merged Pull Requests\n- Delete more UrlMap route rules [#219](https://github.com/inspec/inspec-gcp/pull/219) ([slevenick](https://github.com/slevenick))\n\n## [v0.23.0](https://github.com/inspec/inspec-gcp/tree/v0.23.0) (2019-12-11)\n\n#### Merged Pull Requests\n- Add ACM resources, fix file name bug [#218](https://github.com/inspec/inspec-gcp/pull/218) ([slevenick](https://github.com/slevenick))\n\n## [v0.22.0](https://github.com/inspec/inspec-gcp/tree/v0.22.0) (2019-12-10)\n\n#### Merged Pull Requests\n- Add spanner instance IAM policy support [#214](https://github.com/inspec/inspec-gcp/pull/214) ([slevenick](https://github.com/slevenick))\n\n## [v0.21.4](https://github.com/inspec/inspec-gcp/tree/v0.21.4) (2019-12-04)\n\n#### Merged Pull Requests\n- Update cloud billing info test [#207](https://github.com/inspec/inspec-gcp/pull/207) ([slevenick](https://github.com/slevenick))\n\n## [v0.21.3](https://github.com/inspec/inspec-gcp/tree/v0.21.3) (2019-12-04)\n\n#### Merged Pull Requests\n- Update rubocop deprecated settings. [#213](https://github.com/inspec/inspec-gcp/pull/213) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.21.2](https://github.com/inspec/inspec-gcp/tree/v0.21.2) (2019-11-26)\n\n#### Merged Pull Requests\n- Update google_sql_users.md [#208](https://github.com/inspec/inspec-gcp/pull/208) ([mattbowes](https://github.com/mattbowes))\n\n## [v0.21.1](https://github.com/inspec/inspec-gcp/tree/v0.21.1) (2019-11-21)\n\n#### Merged Pull Requests\n- Add support for bigquery subnetworks and networks to generate [#206](https://github.com/inspec/inspec-gcp/pull/206) ([slevenick](https://github.com/slevenick))\n\n## [v0.21.0](https://github.com/inspec/inspec-gcp/tree/v0.21.0) (2019-11-18)\n\n#### Merged Pull Requests\n- Add support for project billing info [#205](https://github.com/inspec/inspec-gcp/pull/205) ([slevenick](https://github.com/slevenick))\n\n## [v0.20.0](https://github.com/inspec/inspec-gcp/tree/v0.20.0) (2019-11-06)\n\n#### Merged Pull Requests\n- Add Cloud Scheduler Job [#203](https://github.com/inspec/inspec-gcp/pull/203) ([slevenick](https://github.com/slevenick))\n\n## [v0.19.1](https://github.com/inspec/inspec-gcp/tree/v0.19.1) (2019-11-04)\n\n#### Merged Pull Requests\n- Add a test example in google_service_account.md and fix for #200 [#199](https://github.com/inspec/inspec-gcp/pull/199) ([pradeepbhadani](https://github.com/pradeepbhadani))\n\n## [v0.19.0](https://github.com/inspec/inspec-gcp/tree/v0.19.0) (2019-10-30)\n\n#### Merged Pull Requests\n- Add Spanner resources, IAM member to bigquery dataset [#198](https://github.com/inspec/inspec-gcp/pull/198) ([slevenick](https://github.com/slevenick))\n\n## [v0.18.1](https://github.com/inspec/inspec-gcp/tree/v0.18.1) (2019-10-30)\n\n#### Merged Pull Requests\n- Fix typo in docs/resources/google_service_account.md. [#197](https://github.com/inspec/inspec-gcp/pull/197) ([pradeepbhadani](https://github.com/pradeepbhadani))\n\n## [v0.18.0](https://github.com/inspec/inspec-gcp/tree/v0.18.0) (2019-10-30)\n\n#### Merged Pull Requests\n- Add google_project_service [#196](https://github.com/inspec/inspec-gcp/pull/196) ([slevenick](https://github.com/slevenick))\n\n## [v0.17.1](https://github.com/inspec/inspec-gcp/tree/v0.17.1) (2019-10-28)\n\n#### Merged Pull Requests\n- Rubocop update [#195](https://github.com/inspec/inspec-gcp/pull/195) ([slevenick](https://github.com/slevenick))\n\n## [v0.17.0](https://github.com/inspec/inspec-gcp/tree/v0.17.0) (2019-10-23)\n\n#### Merged Pull Requests\n- Add google_compute_router_nat [#190](https://github.com/inspec/inspec-gcp/pull/190) ([slevenick](https://github.com/slevenick))\n\n## [v0.16.2](https://github.com/inspec/inspec-gcp/tree/v0.16.2) (2019-10-23)\n\n#### Merged Pull Requests\n- Update check on DNSSEC to be case independent after API update from &#39;… [#188](https://github.com/inspec/inspec-gcp/pull/188) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.16.1](https://github.com/inspec/inspec-gcp/tree/v0.16.1) (2019-10-14)\n\n#### Merged Pull Requests\n- Add project ID to new MM terraform resources.  Inject random name for… [#187](https://github.com/inspec/inspec-gcp/pull/187) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.16.0](https://github.com/inspec/inspec-gcp/tree/v0.16.0) (2019-10-14)\n\n#### Merged Pull Requests\n- Add generate functionality [#186](https://github.com/inspec/inspec-gcp/pull/186) ([slevenick](https://github.com/slevenick))\n\n## [v0.15.3](https://github.com/inspec/inspec-gcp/tree/v0.15.3) (2019-10-10)\n\n#### Merged Pull Requests\n- Fix dataproc test, add node groups, node templates, network endpoints [#185](https://github.com/inspec/inspec-gcp/pull/185) ([slevenick](https://github.com/slevenick))\n\n## [v0.15.2](https://github.com/inspec/inspec-gcp/tree/v0.15.2) (2019-10-07)\n\n#### Merged Pull Requests\n- Add dataproc_cluster resource, doc fixes [#181](https://github.com/inspec/inspec-gcp/pull/181) ([slevenick](https://github.com/slevenick))\n\n## [v0.15.1](https://github.com/inspec/inspec-gcp/tree/v0.15.1) (2019-09-19)\n\n#### Merged Pull Requests\n- docs: typo/fix broken URL link [#180](https://github.com/inspec/inspec-gcp/pull/180) ([pomverte](https://github.com/pomverte))\n\n## [v0.15.0](https://github.com/inspec/inspec-gcp/tree/v0.15.0) (2019-09-16)\n\n#### Merged Pull Requests\n- Appengine, ML engine, project IAM resources [#178](https://github.com/inspec/inspec-gcp/pull/178) ([slevenick](https://github.com/slevenick))\n\n## [v0.14.0](https://github.com/inspec/inspec-gcp/tree/v0.14.0) (2019-09-16)\n\n#### Merged Pull Requests\n- Project iam policy [#177](https://github.com/inspec/inspec-gcp/pull/177) ([slevenick](https://github.com/slevenick))\n\n## [v0.13.2](https://github.com/inspec/inspec-gcp/tree/v0.13.2) (2019-08-29)\n\n#### Merged Pull Requests\n- Propagate default empty string for org id. [#176](https://github.com/inspec/inspec-gcp/pull/176) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.13.1](https://github.com/inspec/inspec-gcp/tree/v0.13.1) (2019-08-29)\n\n#### Merged Pull Requests\n- Ensure an agreeable default value for gcp_organization_id for skipping affected tests. [#175](https://github.com/inspec/inspec-gcp/pull/175) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.13.0](https://github.com/inspec/inspec-gcp/tree/v0.13.0) (2019-08-27)\n\n#### Merged Pull Requests\n- Add organization log sink resource [#173](https://github.com/inspec/inspec-gcp/pull/173) ([slevenick](https://github.com/slevenick))\n\n## [v0.12.4](https://github.com/inspec/inspec-gcp/tree/v0.12.4) (2019-08-23)\n\n#### Merged Pull Requests\n- Fix for regional compute disk creation and testing. [#171](https://github.com/inspec/inspec-gcp/pull/171) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.12.3](https://github.com/inspec/inspec-gcp/tree/v0.12.3) (2019-08-23)\n\n#### Merged Pull Requests\n- Updates to resources from MM [#167](https://github.com/inspec/inspec-gcp/pull/167) ([slevenick](https://github.com/slevenick))\n\n## [v0.12.2](https://github.com/inspec/inspec-gcp/tree/v0.12.2) (2019-08-23)\n\n#### Merged Pull Requests\n- Upgrade tf [#166](https://github.com/inspec/inspec-gcp/pull/166) ([slevenick](https://github.com/slevenick))\n\n## [v0.12.1](https://github.com/inspec/inspec-gcp/tree/v0.12.1) (2019-08-23)\n\n#### Merged Pull Requests\n- Add support for regional Google compute disk [#164](https://github.com/inspec/inspec-gcp/pull/164) ([walterdolce](https://github.com/walterdolce))\n\n## [v0.12.0](https://github.com/inspec/inspec-gcp/tree/v0.12.0) (2019-08-23)\n\n#### Merged Pull Requests\n- Update to InSpec 4 [#155](https://github.com/inspec/inspec-gcp/pull/155) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.11.0](https://github.com/inspec/inspec-gcp/tree/v0.11.0) (2019-07-18)\n\n#### Merged Pull Requests\n- Add expeditor and buildkite verify pipeline [#159](https://github.com/inspec/inspec-gcp/pull/159) ([miah](https://github.com/miah))\n\n\n\n## [v0.11.0](https://github.com/inspec/inspec-gcp/tree/v0.11.0) (2019-04-30)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.10.0...v0.11.0)\n\n**Closed issues:**\n\n- google\\_container\\_cluster method has\\_logging\\_enabled? reporting wrong [\\#136](https://github.com/inspec/inspec-gcp/issues/136)\n- Add support for google\\_subnetwork\\_iam\\_bindings [\\#122](https://github.com/inspec/inspec-gcp/issues/122)\n- Add support for google\\_folders and related resources [\\#111](https://github.com/inspec/inspec-gcp/issues/111)\n\n**Merged pull requests:**\n\n- Subnet iam policy [\\#142](https://github.com/inspec/inspec-gcp/pull/142) ([slevenick](https://github.com/slevenick))\n- Regional node pools [\\#139](https://github.com/inspec/inspec-gcp/pull/139) ([slevenick](https://github.com/slevenick))\n- Add exists? method to google\\_compute\\_address [\\#138](https://github.com/inspec/inspec-gcp/pull/138) ([ivantsepp](https://github.com/ivantsepp))\n- Logging enabled regex [\\#137](https://github.com/inspec/inspec-gcp/pull/137) ([slevenick](https://github.com/slevenick))\n- Version bump 0100 [\\#133](https://github.com/inspec/inspec-gcp/pull/133) ([skpaterson](https://github.com/skpaterson))\n- Correct names for nested object properties. [\\#132](https://github.com/inspec/inspec-gcp/pull/132) ([slevenick](https://github.com/slevenick))\n- Add support for backend buckets, cloud functions [\\#130](https://github.com/inspec/inspec-gcp/pull/130) ([slevenick](https://github.com/slevenick))\n\n## [v0.10.0](https://github.com/inspec/inspec-gcp/tree/v0.10.0) (2019-03-20)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.9.0...v0.10.0)\n\n**Closed issues:**\n\n- google\\_compute\\_router: iterating bgp.advertised\\_ip\\_ranges? [\\#128](https://github.com/inspec/inspec-gcp/issues/128)\n- Fix dataset test display [\\#125](https://github.com/inspec/inspec-gcp/issues/125)\n- test setup fails when specifying a region other than europe-west2 [\\#114](https://github.com/inspec/inspec-gcp/issues/114)\n- Filter projects by ACTIVE status [\\#108](https://github.com/inspec/inspec-gcp/issues/108)\n- JUnit, JSON Reporters not working  [\\#89](https://github.com/inspec/inspec-gcp/issues/89)\n- google\\_project\\_alert\\_policy doc use \"name\" when code ask \"policy\"  [\\#86](https://github.com/inspec/inspec-gcp/issues/86)\n- google\\_compute\\_firewall: can't use allow\\_ssh? when the the rule is a DENY rule [\\#73](https://github.com/inspec/inspec-gcp/issues/73)\n- Support DNS record sets [\\#66](https://github.com/inspec/inspec-gcp/issues/66)\n- Support regional clusters [\\#65](https://github.com/inspec/inspec-gcp/issues/65)\n- Avoid dynamic property definition, or warn about it [\\#25](https://github.com/inspec/inspec-gcp/issues/25)\n\n**Merged pull requests:**\n\n- Move region to MM generated [\\#129](https://github.com/inspec/inspec-gcp/pull/129) ([slevenick](https://github.com/slevenick))\n- to\\_s updates [\\#127](https://github.com/inspec/inspec-gcp/pull/127) ([slevenick](https://github.com/slevenick))\n- Add folder resource [\\#120](https://github.com/inspec/inspec-gcp/pull/120) ([slevenick](https://github.com/slevenick))\n- Update for google\\_container\\_regional\\_clusters control. [\\#118](https://github.com/inspec/inspec-gcp/pull/118) ([skpaterson](https://github.com/skpaterson))\n- Update google\\_container\\_regional\\_cluster control to use correct region. [\\#117](https://github.com/inspec/inspec-gcp/pull/117) ([skpaterson](https://github.com/skpaterson))\n- Ensure region selection works as expected. [\\#116](https://github.com/inspec/inspec-gcp/pull/116) ([skpaterson](https://github.com/skpaterson))\n- improve test info in README [\\#115](https://github.com/inspec/inspec-gcp/pull/115) ([bleything](https://github.com/bleything))\n- Add BigQuery, Source Repositories [\\#113](https://github.com/inspec/inspec-gcp/pull/113) ([slevenick](https://github.com/slevenick))\n- Update google\\_organization\\(s\\) controls only\\_if condition to include o… [\\#112](https://github.com/inspec/inspec-gcp/pull/112) ([skpaterson](https://github.com/skpaterson))\n- Add ability to test individual as well as multiple organisations [\\#110](https://github.com/inspec/inspec-gcp/pull/110) ([walterdolce](https://github.com/walterdolce))\n- Implement ability to filter GCP projects by lifecycle state [\\#109](https://github.com/inspec/inspec-gcp/pull/109) ([walterdolce](https://github.com/walterdolce))\n- Master updated [\\#107](https://github.com/inspec/inspec-gcp/pull/107) ([slevenick](https://github.com/slevenick))\n- Merge most recent Magic Modules generated master [\\#105](https://github.com/inspec/inspec-gcp/pull/105) ([slevenick](https://github.com/slevenick))\n- Http hc backend [\\#104](https://github.com/inspec/inspec-gcp/pull/104) ([slevenick](https://github.com/slevenick))\n- Trigger healthcheck additions [\\#103](https://github.com/inspec/inspec-gcp/pull/103) ([slevenick](https://github.com/slevenick))\n- Target pools autoscalers [\\#102](https://github.com/inspec/inspec-gcp/pull/102) ([slevenick](https://github.com/slevenick))\n- Version bump 090 [\\#101](https://github.com/inspec/inspec-gcp/pull/101) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.9.0](https://github.com/inspec/inspec-gcp/tree/v0.9.0) (2019-01-21)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.8.0...v0.9.0)\n\n**Merged pull requests:**\n\n- Add instance group manager and resource record set resources [\\#100](https://github.com/inspec/inspec-gcp/pull/100) ([slevenick](https://github.com/slevenick))\n- Pubsub subscription + topic [\\#99](https://github.com/inspec/inspec-gcp/pull/99) ([slevenick](https://github.com/slevenick))\n- Adding pagination for key rings and crypto keys resources. [\\#97](https://github.com/inspec/inspec-gcp/pull/97) ([skpaterson](https://github.com/skpaterson))\n- Add compute disk resource [\\#96](https://github.com/inspec/inspec-gcp/pull/96) ([slevenick](https://github.com/slevenick))\n- Feat/pubsub magicmodule [\\#95](https://github.com/inspec/inspec-gcp/pull/95) ([jnahelou](https://github.com/jnahelou))\n- Fix for forwarding rules with nil network and update README. [\\#93](https://github.com/inspec/inspec-gcp/pull/93) ([skpaterson](https://github.com/skpaterson))\n- Tweaks to MM SSL policies resources and update README. [\\#92](https://github.com/inspec/inspec-gcp/pull/92) ([skpaterson](https://github.com/skpaterson))\n- Add support for google\\_compute\\_forwarding\\_rules and google\\_compute\\_forwarding\\_rule [\\#91](https://github.com/inspec/inspec-gcp/pull/91) ([jnahelou](https://github.com/jnahelou))\n- Add Magic Modules generated resource for SSL Policy [\\#90](https://github.com/inspec/inspec-gcp/pull/90) ([slevenick](https://github.com/slevenick))\n- Update README for new resources [\\#85](https://github.com/inspec/inspec-gcp/pull/85) ([skpaterson](https://github.com/skpaterson))\n- Added support for google\\_compute\\_region\\_instance\\_group\\_manager [\\#84](https://github.com/inspec/inspec-gcp/pull/84) ([jnahelou](https://github.com/jnahelou))\n- Updating README with new resources and adding CHANGELOG for v0.8.0. [\\#83](https://github.com/inspec/inspec-gcp/pull/83) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.8.0](https://github.com/inspec/inspec-gcp/tree/v0.8.0) (2018-11-23)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.7.0...v0.8.0)\n\n**Closed issues:**\n\n- google\\_storage\\_bucket\\_acl fails with \"Not Found\" when the ACL doesn't exist [\\#80](https://github.com/inspec/inspec-gcp/issues/80)\n- How to Install? [\\#77](https://github.com/inspec/inspec-gcp/issues/77)\n- Magic Modules [\\#74](https://github.com/inspec/inspec-gcp/issues/74)\n- verifying via kitchen-terraform verifier [\\#71](https://github.com/inspec/inspec-gcp/issues/71)\n- Using InSpec with the GCP transport crashes when used with `file\\(\\)` resources [\\#61](https://github.com/inspec/inspec-gcp/issues/61)\n\n**Merged pull requests:**\n\n- Update the DNS key and zone signing methods to the new key names. [\\#82](https://github.com/inspec/inspec-gcp/pull/82) ([skpaterson](https://github.com/skpaterson))\n- Fix an error when the bucket ACL doesn't exist [\\#81](https://github.com/inspec/inspec-gcp/pull/81) ([iangelov](https://github.com/iangelov))\n- Add support for google\\_compute\\_vpn\\_tunnels and google\\_compute\\_vpn\\_tunnel [\\#79](https://github.com/inspec/inspec-gcp/pull/79) ([jnahelou](https://github.com/jnahelou))\n- Improve some of the infrastructure tests that were failing under 'nor… [\\#78](https://github.com/inspec/inspec-gcp/pull/78) ([skpaterson](https://github.com/skpaterson))\n- Improve fw resources to handle 'all' cases. [\\#76](https://github.com/inspec/inspec-gcp/pull/76) ([skpaterson](https://github.com/skpaterson))\n- Version bump v0.7.0. [\\#75](https://github.com/inspec/inspec-gcp/pull/75) ([skpaterson](https://github.com/skpaterson))\n- Updated README for new GCP profile initialization, pending https://gi… [\\#70](https://github.com/inspec/inspec-gcp/pull/70) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.7.0](https://github.com/inspec/inspec-gcp/tree/v0.7.0) (2018-10-25)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.6.0...v0.7.0)\n\n**Merged pull requests:**\n\n- Extra nil checks, some error values changed [\\#69](https://github.com/inspec/inspec-gcp/pull/69) ([alexpop](https://github.com/alexpop))\n- Fix nil checks in google\\_project\\_logging\\_audit\\_config resource [\\#68](https://github.com/inspec/inspec-gcp/pull/68) ([alexpop](https://github.com/alexpop))\n- Fix nil exception when no zones are returned for a region [\\#67](https://github.com/inspec/inspec-gcp/pull/67) ([alexpop](https://github.com/alexpop))\n- Bump version to v0.6.0 [\\#64](https://github.com/inspec/inspec-gcp/pull/64) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.6.0](https://github.com/inspec/inspec-gcp/tree/v0.6.0) (2018-10-18)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.5.0...v0.6.0)\n\n**Closed issues:**\n\n- google\\_project resource works with project ID/number instead of name as seen in the docs [\\#39](https://github.com/inspec/inspec-gcp/issues/39)\n- Improved firewall rule handling [\\#27](https://github.com/inspec/inspec-gcp/issues/27)\n- Enhancement: Support Fuzzy Match with Instance Group Name [\\#23](https://github.com/inspec/inspec-gcp/issues/23)\n- google\\_compute\\_instance\\_group doesn't respond to exists? or exist?  [\\#22](https://github.com/inspec/inspec-gcp/issues/22)\n- google\\_compute\\_instance\\_group: location symbol doesn't exist [\\#21](https://github.com/inspec/inspec-gcp/issues/21)\n- Node Pool fails requiring cluster\\_id [\\#20](https://github.com/inspec/inspec-gcp/issues/20)\n- google\\_container\\_node\\_pool.rb example bug [\\#19](https://github.com/inspec/inspec-gcp/issues/19)\n- found the documentation [\\#17](https://github.com/inspec/inspec-gcp/issues/17)\n\n**Merged pull requests:**\n\n- Improve google\\_project\\#to\\_s output [\\#62](https://github.com/inspec/inspec-gcp/pull/62) ([adrienthebo](https://github.com/adrienthebo))\n- Add service account auth instructions and example [\\#60](https://github.com/inspec/inspec-gcp/pull/60) ([alexpop](https://github.com/alexpop))\n- Adding google\\_user\\(s\\) and project alert policy resources [\\#59](https://github.com/inspec/inspec-gcp/pull/59) ([skpaterson](https://github.com/skpaterson))\n- Added support for metadata and label content based compliance [\\#58](https://github.com/inspec/inspec-gcp/pull/58) ([pleonovitch](https://github.com/pleonovitch))\n- Updated Dockerfile with more layers and terraform [\\#57](https://github.com/inspec/inspec-gcp/pull/57) ([jjasghar](https://github.com/jjasghar))\n- Updates to controls affected by service account name change. [\\#56](https://github.com/inspec/inspec-gcp/pull/56) ([skpaterson](https://github.com/skpaterson))\n- Added resource doc links from recent PRs. [\\#55](https://github.com/inspec/inspec-gcp/pull/55) ([skpaterson](https://github.com/skpaterson))\n- Kubernetes resource updates [\\#54](https://github.com/inspec/inspec-gcp/pull/54) ([skpaterson](https://github.com/skpaterson))\n- Cloud SQL resources [\\#53](https://github.com/inspec/inspec-gcp/pull/53) ([skpaterson](https://github.com/skpaterson))\n- Storage updates [\\#52](https://github.com/inspec/inspec-gcp/pull/52) ([skpaterson](https://github.com/skpaterson))\n- VM Updates [\\#51](https://github.com/inspec/inspec-gcp/pull/51) ([skpaterson](https://github.com/skpaterson))\n- Networking related updates [\\#50](https://github.com/inspec/inspec-gcp/pull/50) ([skpaterson](https://github.com/skpaterson))\n- Project audit logging [\\#49](https://github.com/inspec/inspec-gcp/pull/49) ([skpaterson](https://github.com/skpaterson))\n- Minor fix for region instead of zone in first google\\_compute\\_region e… [\\#48](https://github.com/inspec/inspec-gcp/pull/48) ([skpaterson](https://github.com/skpaterson))\n-  Updates for service account and related resources [\\#47](https://github.com/inspec/inspec-gcp/pull/47) ([skpaterson](https://github.com/skpaterson))\n- Add google\\_compute\\_region\\(s\\) resources, tests etc. and updated README. [\\#46](https://github.com/inspec/inspec-gcp/pull/46) ([skpaterson](https://github.com/skpaterson))\n- Added google\\_compute\\_network\\(s\\) and google\\_compute\\_subnetwork\\(s\\) resources. [\\#45](https://github.com/inspec/inspec-gcp/pull/45) ([skpaterson](https://github.com/skpaterson))\n- Bump version to v0.5.0 [\\#44](https://github.com/inspec/inspec-gcp/pull/44) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.5.0](https://github.com/inspec/inspec-gcp/tree/v0.5.0) (2018-08-21)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.4.0...v0.5.0)\n\n**Closed issues:**\n\n- Unable to use resources provided by this library when invoked via test kitchen and kitchen-terraform [\\#37](https://github.com/inspec/inspec-gcp/issues/37)\n\n**Merged pull requests:**\n\n- Resolve Debian 8 EOL issue, now pin all tf module versions explicitly. [\\#43](https://github.com/inspec/inspec-gcp/pull/43) ([skpaterson](https://github.com/skpaterson))\n- Added project logging resources [\\#42](https://github.com/inspec/inspec-gcp/pull/42) ([skpaterson](https://github.com/skpaterson))\n- Add storage bucket IAM resources [\\#41](https://github.com/inspec/inspec-gcp/pull/41) ([skpaterson](https://github.com/skpaterson))\n- Update the google\\_project version as per \\#39.  Also udpate the associ… [\\#40](https://github.com/inspec/inspec-gcp/pull/40) ([skpaterson](https://github.com/skpaterson))\n- Add kms resources [\\#36](https://github.com/inspec/inspec-gcp/pull/36) ([skpaterson](https://github.com/skpaterson))\n- Bump version to 0.4.0 [\\#34](https://github.com/inspec/inspec-gcp/pull/34) ([skpaterson](https://github.com/skpaterson))\n- Add iam resources [\\#33](https://github.com/inspec/inspec-gcp/pull/33) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.4.0](https://github.com/inspec/inspec-gcp/tree/v0.4.0) (2018-06-25)\n[Full Changelog](https://github.com/inspec/inspec-gcp/compare/v0.3.0...v0.4.0)\n\n**Merged pull requests:**\n\n- Add more resources [\\#32](https://github.com/inspec/inspec-gcp/pull/32) ([skpaterson](https://github.com/skpaterson))\n- Fw small fix [\\#31](https://github.com/inspec/inspec-gcp/pull/31) ([skpaterson](https://github.com/skpaterson))\n- Improved firewall resource [\\#30](https://github.com/inspec/inspec-gcp/pull/30) ([skpaterson](https://github.com/skpaterson))\n- README improvements and update resource docs to make more accessible. [\\#29](https://github.com/inspec/inspec-gcp/pull/29) ([skpaterson](https://github.com/skpaterson))\n\n## [v0.3.0](https://github.com/inspec/inspec-gcp/tree/v0.3.0) (2018-06-14)\n**Closed issues:**\n\n- update google\\_project inline documentation [\\#12](https://github.com/inspec/inspec-gcp/issues/12)\n- add missing documentation [\\#11](https://github.com/inspec/inspec-gcp/issues/11)\n- google\\_compute\\_instance does not return the right value for machine\\_type [\\#10](https://github.com/inspec/inspec-gcp/issues/10)\n\n**Merged pull requests:**\n\n- Bump version and corrected minimum inspec version in root config file. [\\#28](https://github.com/inspec/inspec-gcp/pull/28) ([skpaterson](https://github.com/skpaterson))\n- Fixes according to issues: \\#19, \\#20, \\#21 and \\#22. [\\#24](https://github.com/inspec/inspec-gcp/pull/24) ([skpaterson](https://github.com/skpaterson))\n- Add plural resources [\\#18](https://github.com/inspec/inspec-gcp/pull/18) ([skpaterson](https://github.com/skpaterson))\n- Added missing documentation following InSpec standards, resolves \\#11. [\\#16](https://github.com/inspec/inspec-gcp/pull/16) ([skpaterson](https://github.com/skpaterson))\n- Add FAQ for inspec exec errors when gcp transport is not specified.  … [\\#15](https://github.com/inspec/inspec-gcp/pull/15) ([skpaterson](https://github.com/skpaterson))\n- Update google\\_project inline documentation and make other resource do… [\\#14](https://github.com/inspec/inspec-gcp/pull/14) ([skpaterson](https://github.com/skpaterson))\n- Adding machine\\_size helper function to tidy up API response for machi… [\\#13](https://github.com/inspec/inspec-gcp/pull/13) ([skpaterson](https://github.com/skpaterson))\n- add kudos for @martezr [\\#9](https://github.com/inspec/inspec-gcp/pull/9) ([chris-rock](https://github.com/chris-rock))\n- Added minimum supported inspec version to inspec.yml [\\#8](https://github.com/inspec/inspec-gcp/pull/8) ([skpaterson](https://github.com/skpaterson))\n- Updating Gemfile to use latest inspec release.  Fix for only\\_if test … [\\#7](https://github.com/inspec/inspec-gcp/pull/7) ([skpaterson](https://github.com/skpaterson))\n- update readme with api and quota settings [\\#6](https://github.com/inspec/inspec-gcp/pull/6) ([chris-rock](https://github.com/chris-rock))\n- add travis checks [\\#5](https://github.com/inspec/inspec-gcp/pull/5) ([chris-rock](https://github.com/chris-rock))\n- pass when terraform destory may fail [\\#4](https://github.com/inspec/inspec-gcp/pull/4) ([chris-rock](https://github.com/chris-rock))\n- Added configuration flag to separate resources requiring elevated pri… [\\#3](https://github.com/inspec/inspec-gcp/pull/3) ([skpaterson](https://github.com/skpaterson))\n- Inspec train gcp [\\#2](https://github.com/inspec/inspec-gcp/pull/2) ([skpaterson](https://github.com/skpaterson))\n- update readme [\\#1](https://github.com/inspec/inspec-gcp/pull/1) ([chris-rock](https://github.com/chris-rock))\n\n\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Chef Code of Conduct\n\nParticipants in this project must adhere to the [Chef Code of Conduct](https://chef.github.io/chef-oss-practices/policies/code-of-conduct/)."
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "\n\n\n# Contributing to the InSpec GCP Resource Pack\n\nWe are glad you want to contribute to InSpec GCP! This document will help answer common questions you may have during your first contribution.\n\nAll participants are expected to follow the [InSpec Code of Conduct](https://github.com/inspec/inspec/blob/master/CODE_OF_CONDUCT.md).\n\n## Submitting Issues\n\nWe utilize **Github Issues** for issue tracking and contributions. You can contribute in two ways:\n\n1. Reporting an issue or making a feature request [here](https://github.com/chef/inspec-gcp/issues/new).\n2. Adding features or fixing bugs yourself and contributing your code to InSpec.\n\nWe ask you not to submit security concerns via Github. For details on submitting potential security issues please see <https://www.chef.io/security/>\n\n## Contribution Process\n\nWe have a 3 step process for contributions:\n\n1. Commit changes to a git branch, making sure to sign-off those changes for the [Developer Certificate of Origin](#developer-certification-of-origin-dco).\n2. Create a Github Pull Request for your change, following the instructions in the pull request template.\n3. Perform a [Code Review](#code-review-process) with the project maintainers on the pull request.\n\n### Pull Request Requirements\n\nChef Projects are built to last. We strive to ensure high quality throughout the experience. In order to ensure this, we require that all pull requests to Chef projects meet these specifications:\n\n1. **Tests:** To ensure high quality code and protect against future regressions, we require InSpec GCP to have integration test coverage. See [test/integration/verify/controls](https://github.com/inspec/inspec-gcp/tree/master/test/integration/verify/controls). \n2. **Green CI Tests:** We use [Travis CI](https://travis-ci.org/) to test all pull requests. We require these test runs to succeed on every pull request before being merged.\n3. **Up-to-date Documentation:**  Every code change should be reflected in an update for our [documentation](https://github.com/inspec/inspec-gcp/tree/master/docs). We expect PRs to update the documentation with the code change.\n\nIn addition to this it would be nice to include the description of the problem you are solving\n  with your change. You can use [Issue Template](https://github.com/inspec/inspec-gcp/tree/master/ISSUE_TEMPLATE.md) in the description section\n  of the pull request.\n\n### Code Review Process\n\nCode review takes place in Github pull requests. See [this article](https://help.github.com/articles/about-pull-requests/) if you're not familiar with Github Pull Requests.\n\nOnce you open a pull request, project maintainers will review your code and respond to your pull request with any feedback they might have. The process at this point is as follows:\n\n1. One thumbs-up (:+1:) are required from [inspec/inspec-cloud-devs](https://github.com/orgs/inspec/teams/inspec-cloud-devs)\n2. When ready, your pull request will be merged into `master`, we may require you to rebase your PR to the latest `master`.\n3. Once the PR is merged, you will be included in `CHANGELOG.md` in a subsequent release.\n\nIf you would like to learn about when your code will be available in a release of Chef, read more about [Chef Release Cycles](#release-cycles).\n\n### Developer Certification of Origin (DCO)\n\nLicensing is very important to open source projects. It helps ensure the software continues to be available under the terms that the author desired.\n\nChef uses [the Apache 2.0 license](https://github.com/chef/chef/blob/master/LICENSE) to strike a balance between open contribution and allowing you to use the software however you would like to.\n\nThe license tells you what rights you have that are provided by the copyright holder. It is important that the contributor fully understands what rights they are licensing and agrees to them. Sometimes the copyright holder isn't the contributor, such as when the contributor is doing work on behalf of a company.\n\nTo make a good faith effort to ensure these criteria are met, Chef requires the Developer Certificate of Origin (DCO) process to be followed.\n\nThe DCO is an attestation attached to every contribution made by every developer. In the commit message of the contribution, the developer simply adds a Signed-off-by statement and thereby agrees to the DCO, which you can find below or at <http://developercertificate.org/>.\n\n```\nDeveloper's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I\n    have the right to submit it under the open source license\n    indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the\n    best of my knowledge, is covered under an appropriate open\n    source license and I have the right under that license to\n    submit that work with modifications, whether created in whole\n    or in part by me, under the same open source license (unless\n    I am permitted to submit under a different license), as\n    Indicated in the file; or\n\n(c) The contribution was provided directly to me by some other\n    person who certified (a), (b) or (c) and I have not modified\n    it.\n\n(d) I understand and agree that this project and the contribution\n    are public and that a record of the contribution (including\n    all personal information I submit with it, including my\n    sign-off) is maintained indefinitely and may be redistributed\n    consistent with this project or the open source license(s)\n    involved.\n```\n\nFor more information on the change see the Chef Blog post [Introducing Developer Certificate of Origin](https://blog.chef.io/2016/09/19/introducing-developer-certificate-of-origin/)\n\n#### DCO Sign-Off Methods\n\nThe DCO requires a sign-off message in the following format appear on each commit in the pull request:\n\n```\nSigned-off-by: Julia Child <juliachild@chef.io>\n```\n\nThe DCO text can either be manually added to your commit body, or you can add either **-s** or **--signoff** to your usual git commit commands. If you forget to add the sign-off you can also amend a previous commit with the sign-off by running **git commit --amend -s**. If you've pushed your changes to Github already you'll need to force push your branch after this with **git push -f**.\n\n### Obvious Fix Policy\n\nSmall contributions, such as fixing spelling errors, where the content is small enough to not be considered intellectual property, can be submitted without signing the contribution for the DCO.\n\nAs a rule of thumb, changes are obvious fixes if they do not introduce any new functionality or creative thinking. Assuming the change does not affect functionality, some common obvious fix examples include the following:\n\n- Spelling / grammar fixes\n- Typo correction, white space and formatting changes\n- Comment clean up\n- Bug fixes that change default return values or error codes stored in constants\n- Adding logging messages or debugging output\n- Changes to 'metadata' files like Gemfile, .gitignore, build scripts, etc.\n- Moving source files from one directory or package to another\n\n**Whenever you invoke the \"obvious fix\" rule, please say so in your commit message:**\n\n```\n------------------------------------------------------------------------\ncommit 370adb3f82d55d912b0cf9c1d1e99b132a8ed3b5\nAuthor: Julia Child <juliachild@chef.io>\nDate:   Wed Sep 18 11:44:40 2015 -0700\n\n  Fix typo in the README.\n\n  Obvious fix.\n\n------------------------------------------------------------------------\n```\n\n## InSpec Community\n\nInSpec is made possible by a strong community of developers, system administrators, auditor and security experts. If you have any questions or if you would like to get involved in the InSpec community you can check out:\n\n- [InSpec Mailing List](https://discourse.chef.io/c/inspec)\n- [Chef Community Slack](https://community-slack.chef.io/)\n\nAlso here are some additional pointers to some awesome Chef content:\n\n- [InSpec Docs](https://www.inspec.io/docs/)\n- [Learn Chef](https://learn.chef.io/)\n- [Chef Website](https://www.chef.io/)"
  },
  {
    "path": "Dockerfile",
    "content": "FROM ruby:2.5\nMAINTAINER Chef Software, Inc. <docker@chef.io>\n\nARG TF_VERSION=0.11.8\n\nCOPY Gemfile .\nRUN bundle install\nRUN gem list && apt-get update\nRUN apt-get install unzip\nADD https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip .\nRUN unzip terraform_${TF_VERSION}_linux_amd64.zip && mv terraform /usr/local/bin/ && mkdir /inspec\nRUN rm terraform_${TF_VERSION}_linux_amd64.zip\nRUN apt-get clean && \\\n    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*\nWORKDIR /inspec\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\ngem 'bundle'\ngem 'faraday', '>= 0.16.2'\ngem 'google-api-client'\ngem 'google-cloud'\ngem 'googleauth'\n# we are pinning to inspec-core-bin below 6.0 to avoid bringing licensing change in the CI\ngem 'inspec-core-bin', '>= 5.22.36', '< 6.0'\ngem 'rubocop', '>= 0.77.0'\ngem 'parser', '< 3.3.1.0'\n\ngroup :development do\n  gem 'github_changelog_generator'\n  gem 'pry-coolline'\n  gem 'rake'\n  gem 'vcr'\n  gem 'webmock'\nend\n"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "content": "### 🎛 Description\n\n**Choose one:** is this a 🐛 bug report or 🙋 feature request?\n\nBriefly describe the issue and the expected behavior. \n\n### 🌍 InSpec and Platform Version\n\nTell us which version of InSpec (`inspec version` or SHA of a commit).\n\n### 🤔 Replication Case\n\nTell us what steps to take to replicate your problem.  See [How to create a Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve)\nfor information on how to create a good replication case.\n\n### 💁 Possible Solutions\n\nIf you have already ideas how to solve the issue, add them here.\n\n### 💻 Stacktrace\n\nPlease include the stacktrace output or link to a gist of it, if there is one.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2017 Chef Software Inc.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS 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": "README.md",
    "content": "# InSpec GCP (Google Cloud Platform) Resource Pack\n\n* **Project State-: Maintained**\n\nFor more information on project states and SLAs, see [this documentation](https://github.com/chef/chef-oss-practices/blob/master/repo-management/repo-states.md).\n\nThis InSpec resource pack uses the native Google Cloud Platform (GCP) support in InSpec and provides the required resources to write tests for GCP.\n\nThis implementation was inspired on the ideas by [Martez Reed](https://github.com/martezr/inspec-gcp).\n\n## Prerequisites\n\n### Install and configure the Google cloud SDK*\n\nDownload the [SDK](https://cloud.google.com/sdk/docs/) and run the installation:\n\n```\n./google-cloud-sdk/install.sh\n```\n\n### Create credentials file via:\n\n```bash\ngcloud auth application-default login\n```\nIf successful, this should be similar to:\n```bash\n$ cat ~/.config/gcloud/application_default_credentials.json\n\n{\n  \"client_id\": \"764086051850-6qr4p6gpi6hn50asdr.apps.googleusercontent.com\",\n  \"client_secret\": \"d-fasdfasdfasdfaweroi23jknrmfs;f8sh\",\n  \"refresh_token\": \"1/asdfjlklwna;ldkna'dfmk-lCkju3-yQmjr20xVZonrfkE48L\",\n  \"type\": \"authorized_user\"\n}\n```\n\nWhile InSpec can use user accounts for authentication, [Google Cloud documentation](https://cloud.google.com/docs/authentication/) recommends using service accounts.\n\n### Create Service Accounts\n1. Go to `Console` in the Google Cloud.\n2. Click on `Service Accounts`.\n3. Click on `Create Service Accounts` and give the required details.\n4. Click on `Done`.\n5. Now Click on `Keys` Tab.\n6. Click on `Add Key`.\n7. Click on `Create New Key`.\n8. Select the Key type as `JSON`.\n9. Click on `Create`.\n10. The Service Account Key will be downloaded. For example: `myproject-1-feb7993e8660.jsonmyproject-1-feb7993e8660.json`\n11. Move the key to the `~/.config/gcloud` folder. If the file gets downloaded in the `Downloads` folder, use the below command.\n```bash\nmv ~/Downloads/myproject-1-feb7993e8660.json ~/.config/gcloud/\n```\n12. The json credential file for a service account looks like this:\n```bash\n$ cat ~/.config/gcloud/myproject-1-feb7993e8660.json\n{\n  \"type\": \"service_account\",\n  \"project_id\": \"myproject-1\",\n  \"private_key_id\": \"eb45b2fc0c33ea9b6fa212aaa08b1ed814bf8660\",\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvwIBADAN3662...fke9n6LAf268E/4EWhIzg==\\n-----END PRIVATE KEY-----\\n\",\n  \"client_email\": \"auto-testing@myproject-1.iam.gserviceaccount.com\",\n  \"client_id\": \"112144174133171863632\",\n  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n  \"token_uri\": \"https://oauth2.googleapis.com/token\",\n  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/auto-testing%40myproject-1.iam.gserviceaccount.com\"\n}\n```\n13. Now Setup the environmental variable for the 'GOOGLE_APPLICATION_CREDENTIALS'. And InSpec can be instructed to use it by setting this ENV variable prior to running `inspec exec`:\n```bash\n$ export GOOGLE_APPLICATION_CREDENTIALS='~/.config/gcloud/myproject-1-feb7993e8660.json'\n```\n\n#### NOTE:\nIf still error comes, please check your IAM roles and permissions.\n\n### Enable the appropriate APIs that you want to use:\n\n- [Enable Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/)\n- [Enable Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com)\n\n## Use the resources\n\nSince this is an InSpec resource pack, it only defines InSpec resources. It includes example tests only. To easily use the GCP resources in your tests do the following:\n\n###  Create a new profile for GCP\n\n```bash\n$ inspec init profile --platform gcp my-gcp-profile\n\nCreate new profile at /Users/spaterson/my-gcp-profile\n * Create directory libraries\n * Create file README.md\n * Create directory controls\n * Create file controls/example.rb\n * Create file inspec.yml\n * Create file attributes.yml\n * Create file libraries/.gitkeep\n```\n\n### Update `inputs.yml` to point to your project\n\n```yml\ngcp_project_id: 'my-gcp-project'\n```\n\nThe generated `inspec.yml` file automatically points to the InSpec GCP resource pack:\n\n```yaml\nname: my-gcp-profile\ntitle: My GCP InSpec Profile\nversion: 0.1.0\ninspec_version: '>= 4'\ninputs:\n  - name: gcp_project_id\n    required: true\n    description: 'The GCP project identifier.'\ndepends:\n  - name: inspec-gcp\n    url: https://github.com/inspec/inspec-gcp/archive/x.tar.gz\nsupports:\n  - platform: gcp\n```\n\n(For available inspec-gcp versions, see this list of [inspec-gcp versions](https://github.com/inspec/inspec-gcp/releases).)\n\n## Run the tests\n\n```bash\n$ cd my-gcp-profile/\n$ inspec exec . -t gcp:// --input-file inputs.yml\n\nProfile: GCP InSpec Profile (my-profile)\nVersion: 0.1.0\nTarget:  gcp://local-service-account@my-gcp-project.iam.gserviceaccount.com\nTarget ID: 8123456-12a3-1234-123a-a12s5c5abcx1\n\n  ✔  gcp-single-region-1.0: Ensure single region has the correct properties.\n     ✔  Region europe-west2 zone_names should include \"europe-west2-a\"\n  ✔  gcp-regions-loop-1.0: Ensure regions have the correct properties in bulk.\n     ✔  Region asia-east1 is expected to be up\n     ✔  Region asia-east2 is expected to be up\n     ✔  Region asia-northeast1 is expected to be up\n     ✔  Region asia-northeast2 is expected to be up\n     ✔  Region asia-northeast3 is expected to be up\n     ✔  Region asia-south1 is expected to be up\n     ✔  Region asia-south2 is expected to be up\n     ✔  Region asia-southeast1 is expected to be up\n     ✔  Region asia-southeast2 is expected to be up\n     ✔  Region australia-southeast1 is expected to be up\n     ✔  Region australia-southeast2 is expected to be up\n     ✔  Region europe-central2 is expected to be up\n     ✔  Region europe-north1 is expected to be up\n     ✔  Region europe-southwest1 is expected to be up\n     ✔  Region europe-west1 is expected to be up\n     ✔  Region europe-west2 is expected to be up\n     ✔  Region europe-west3 is expected to be up\n     ✔  Region europe-west4 is expected to be up\n     ✔  Region europe-west6 is expected to be up\n     ✔  Region europe-west8 is expected to be up\n     ✔  Region europe-west9 is expected to be up\n     ✔  Region me-west1 is expected to be up\n     ✔  Region northamerica-northeast1 is expected to be up\n     ✔  Region northamerica-northeast2 is expected to be up\n     ✔  Region southamerica-east1 is expected to be up\n     ✔  Region southamerica-west1 is expected to be up\n     ✔  Region us-central1 is expected to be up\n     ✔  Region us-east1 is expected to be up\n     ✔  Region us-east4 is expected to be up\n     ✔  Region us-east5 is expected to be up\n     ✔  Region us-south1 is expected to be up\n     ✔  Region us-west1 is expected to be up\n     ✔  Region us-west2 is expected to be up\n     ✔  Region us-west3 is expected to be up\n     ✔  Region us-west4 is expected to be up\n\n\nProfile:   Google Cloud Platform Resource Pack (inspec-gcp)\nVersion:   1.10.37\nTarget:    gcp://local-service-account@my-gcp-project.iam.gserviceaccount.com\nTarget ID: 8123456-12a3-1234-123a-a12s5c5abcx1\n\n     No tests executed.\n\nProfile Summary: 2 successful controls, 0 control failures, 0 controls skipped\nTest Summary:  36 successful, 0 failures, 0 skipped\n```\n\n## Resource documentation\n\nThe following resources are available in the InSpec GCP Profile\n| InSpec GCP Supported Resources                                                                                       | [https://www.inspec.io/docs/reference/resources/#gcp-resources](https://www.inspec.io/docs/reference/resources/#gcp-resources) |\n|:---------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|\n| Singular Resource                                                                                                    | Plural Resource                                                                                                                |\n| [google_access_context_manager_access_level](docs/resources/google_access_context_manager_access_level.md)           | [google_access_context_manager_access_levels](docs/resources/google_access_context_manager_access_levels.md)                   |\n| [google_access_context_manager_access_policy](docs/resources/google_access_context_manager_access_policy.md)         | [google_access_context_manager_access_policies](docs/resources/google_access_context_manager_access_policies.md)               |\n| [google_access_context_manager_service_perimeter](docs/resources/google_access_context_manager_service_perimeter.md) | [google_access_context_manager_service_perimeters](docs/resources/google_access_context_manager_service_perimeters.md)         |\n| [google_apigee_endpoint_attachment](docs/resources/google_apigee_endpoint_attachment.md)            | [google_apigee_endpoint_attachments](docs/resources/google_apigee_endpoint_attachments.md)                     |\n| [google_apigee_organization_envgroup](docs/resources/google_apigee_organization_envgroup.md)            | [google_apigee_organization_envgroups](docs/resources/google_apigee_organization_envgroups.md)                     |\n| [google_apigee_organization_instance_attachment](docs/resources/google_apigee_organization_instance_attachment.md)   | [google_apigee_organization_instance_attachments](docs/resources/google_apigee_organization_instance_attachments.md)           |\n| [google_apigee_organization_envgroup_attachment](docs/resources/google_apigee_organization_envgroup_attachment.md)   | [google_apigee_organization_envgroup_attachments](docs/resources/google_apigee_organization_envgroup_attachments.md)           |\n| [google_appengine_standard_app_version](docs/resources/google_appengine_standard_app_version.md)                     | [google_appengine_standard_app_versions](docs/resources/google_appengine_standard_app_versions.md)                             |\n| [google_bigquery_dataset](docs/resources/google_bigquery_dataset.md)                                                 | [google_bigquery_datasets](docs/resources/google_bigquery_datasets.md)                                                         |\n| [google_bigquery_table](docs/resources/google_bigquery_table.md)                                                     | [google_bigquery_tables](docs/resources/google_bigquery_tables.md)                                                             |\n| [google_bigtableadmin_cluster](docs/resources/google_bigtableadmin_cluster.md)                                                     | [google_bigtableadmin_clusters](docs/resources/google_bigtableadmin_clusters.md)                                                             |\n| [google_bigtableadmin_instance_app_profile](docs/resources/google_bigtableadmin_instance_app_profile.md)                                                     | [google_bigtableadmin_instance_app_profiles](docs/resources/google_bigtableadmin_instance_app_profiles.md)                                                             |\n| [google_billing_project_billing_info](docs/resources/google_billing_project_billing_info.md)                         | No Plural Resource                                                                                                             |\n| [google_cloud_scheduler_job](docs/resources/google_cloud_scheduler_job.md)                                           | [google_cloud_scheduler_jobs](docs/resources/google_cloud_scheduler_jobs.md)                                                   |\n| [google_cloudbuild_trigger](docs/resources/google_cloudbuild_trigger.md)                                             | [google_cloudbuild_triggers](docs/resources/google_cloudbuild_triggers.md)                                                     |\n| [google_cloudfunctions_cloud_function](docs/resources/google_cloudfunctions_cloud_function.md)                       | [google_cloudfunctions_cloud_functions](docs/resources/google_cloudfunctions_cloud_functions.md)                               |\n| [google_composer_project_location_environment](docs/resources/google_composer_project_location_environment.md)                           | [google_composer_project_location_environments](docs/resources/google_composer_project_location_environments.md)             |\n| [google_compute_address](docs/resources/google_compute_address.md)                                                   | [google_compute_addresses](docs/resources/google_compute_addresses.md)                                                         |\n| [google_compute_autoscaler](docs/resources/google_compute_autoscaler.md)                                             | [google_compute_autoscalers](docs/resources/google_compute_autoscalergoogle_compute_autoscaler.md)                             |\n| [google_compute_backend_bucket](docs/resources/google_compute_backend_bucket.md)                                     | No Plural Resource                                                                                                             |\n| [google_compute_backend_service](docs/resources/google_compute_backend_service.md)                                   | [google_compute_backend_services](docs/resources/google_compute_backend_services.md)                                           |\n| [google_compute_disk](docs/resources/google_compute_disk.md)                                                         | [google_compute_disks](docs/resources/google_compute_disks.md)                                                                 |\n| [google_compute_disk_type](docs/resources/google_compute_disk_type.md)                                               | [google_compute_disk_types](docs/resources/google_compute_disk_types.md)                                                       |\n| [google_data_loss_prevention_inspect_template](docs/resources/google_data_loss_prevention_inspect_template.md)                                               | [google_data_loss_prevention_inspect_templates](docs/resources/google_data_loss_prevention_inspect_templates.md)                                                       |\n| [google_compute_external_vpn_gateway](docs/resources/google_compute_external_vpn_gateway.md)                         | [google_compute_external_vpn_gateways](docs/resources/google_compute_external_vpn_gateways.md)                                 |\n| [google_compute_firewall](docs/resources/google_compute_firewall.md)                                                 | [google_compute_firewalls](docs/resources/google_compute_firewalls.md)                                                         |\n| [google_compute_forwarding_rule](docs/resources/google_compute_forwarding_rule.md)                                   | [google_compute_forwarding_rules](docs/resources/google_compute_forwarding_rules.md)                                           |\n| [google_compute_global_address](docs/resources/google_compute_global_address.md)                                     | [google_compute_global_addresses](docs/resources/google_compute_global_addresses.md)                                           |\n| [google_compute_global_forwarding_rule](docs/resources/google_compute_global_forwarding_rule.md)                     | [google_compute_global_forwarding_rules](docs/resources/google_compute_global_forwarding_rules.md)                             |\n| [google_compute_global_network_endpoint_group](docs/resources/google_compute_global_network_endpoint_group.md)                                 | [google_compute_global_network_endpoint_groups](docs/resources/google_compute_global_network_endpoint_groups.md)\n| [google_compute_global_operation](docs/resources/google_compute_global_operation.md)                                 | [google_compute_global_operations](docs/resources/google_compute_global_operations.md)                                         |\n| [google_compute_health_check](docs/resources/google_compute_health_check.md)                                         | [google_compute_health_checks](docs/resources/google_compute_health_checks.md)                                                 |\n| [google_compute_health_check_service](docs/resources/google_compute_health_check_service.md)                         | [google_compute_health_check_services](docs/resources/google_compute_health_check_services.md)                                 |\n| [google_compute_http_health_check](docs/resources/google_compute_http_health_check.md)                               | [google_compute_http_health_checks](docs/resources/google_compute_http_health_checks.md)                                       |\n| [google_compute_https_health_check](docs/resources/google_compute_https_health_check.md)                             | [google_compute_https_health_checks](docs/resources/google_compute_https_health_checks.md)                                     |\n| [google_compute_image_family_view](docs/resources/google_compute_image_family_view.md)                                                       | No Plural Resource                                                                                                             |\n| [google_compute_image](docs/resources/google_compute_image.md)                                                       | No Plural Resource                                                                                                             |\n| [google_compute_instance](docs/resources/google_compute_instance.md)                                                 | [google_compute_instances](docs/resources/google_compute_instances.md)                                                         |\n| [google_compute_instance](docs/resources/google_compute_interconnect_attachment.md)                                                 | [google_compute_instances](docs/resources/google_compute_interconnect_attachments.md)                                                         |\n| [google_compute_instance_group](docs/resources/google_compute_instance_group.md)                                     | [google_compute_instance_groups](docs/resources/google_compute_instance_groups.md)                                             |\n| [google_compute_instance_group_manager](docs/resources/google_compute_instance_group_manager.md)                     | [google_compute_instance_group_managers](docs/resources/google_compute_instance_group_managers.md)                             |\n| [google_compute_instance_template](docs/resources/google_compute_instance_template.md)                               | [google_compute_instance_templates](docs/resources/google_compute_instance_templates.md)                                       |\n| [google_compute_interconnect](docs/resources/google_compute_interconnect.md)                                         | [google_compute_interconnects](docs/resources/google_compute_interconnects.md)                                                 |\n| [google_compute_interconnect_location](docs/resources/google_compute_interconnect_location.md)                       | [google_compute_interconnect_locations](docs/resources/google_compute_interconnect_locations.md)                               |\n| [google_compute_license_code](docs/resources/google_compute_license_code.md)                                         | No Plural Resource                                                                                                             |\n| [google_compute_license](docs/resources/google_compute_license.md)                                                   | [google_compute_licenses](docs/resources/google_compute_licenses.md)                                                           |\n| [google_compute_machine_image](docs/resources/google_compute_machine_image.md)                                                   | [google_compute_machine_images](docs/resources/google_compute_machine_images.md)                                                           |\n| [google_compute_machine_type](docs/resources/google_compute_machine_type.md)                                                   | [google_compute_machine_types](docs/resources/google_compute_machine_types.md)                                                           |\n| [google_compute_network_attachment](docs/resources/google_compute_network_attachment.md)                                                   | [google_compute_network_attachments](docs/resources/google_compute_network_attachments.md)                                                           |\n| [google_compute_network_edge_security_service](docs/resources/google_compute_network_edge_security_service.md)                                         | No Plural Resource                                                                                                             |\n| [google_compute_network](docs/resources/google_compute_network.md)                                                   | [google_compute_networks](docs/resources/google_compute_networks.md)                                                           |\n| [google_compute_network_endpoint_group](docs/resources/google_compute_network_endpoint_group.md)                     | [google_compute_network_endpoint_groups](docs/resources/google_compute_network_endpoint_groups.md)                             |\n| [google_compute_network_firewall_policy](docs/resources/google_compute_network_firewall_policy.md)                     | [google_compute_network_firewall_policies](docs/resources/google_compute_network_firewall_policies.md)                             |\n| [google_compute_node_group](docs/resources/google_compute_node_group.md)                                             | [google_compute_node_groups](docs/resources/google_compute_node_groups.md)                                                     |\n| [google_compute_node_template](docs/resources/google_compute_node_template.md)                                       | [google_compute_node_templates](docs/resources/google_compute_node_templates.md)                                               |\n| [google_compute_node_type](docs/resources/google_compute_node_type.md)                           | [google_compute_node_types](docs/resources/google_compute_node_types.md)             |\n| [google_compute_packet_mirroring](docs/resources/google_compute_packet_mirroring.md)                           | [google_compute_packet_mirrorings](docs/resources/google_compute_packet_mirrorings.md)             |\n| [google_compute_project_info](docs/resources/google_compute_project_info.md)                                         | No Plural Resource                                                                                                             |\n| [google_compute_public_delegated_prefix](docs/resources/google_compute_public_delegated_prefix.md)                   | [google_compute_public_delegated_prefixes](docs/resources/google_compute_public_delegated_prefixes.md)                         |\n| [google_compute_region](docs/resources/google_compute_region.md)                                                     | [google_compute_regions](docs/resources/google_compute_regions.md)                                                             |\n| [google_compute_region_backend_service](docs/resources/google_compute_region_backend_service.md)                     | [google_compute_region_backend_services](docs/resources/google_compute_region_backend_services.md)                             |\n| [google_compute_region_commitment](docs/resources/google_compute_region_commitment.md)                     | [google_compute_region_commitments](docs/resources/google_compute_region_commitments.md)                             |\n| [google_compute_region_disk_type](docs/resources/google_compute_region_disk_type.md)                           | [google_compute_region_disk_types](docs/resources/google_compute_region_disk_types.md)                                   |\n| [google_compute_region_health_check](docs/resources/google_compute_region_health_check.md)                           | [google_compute_region_health_checks](docs/resources/google_compute_region_health_checks.md)                                   |\n| [google_compute_region_instance_group](docs/resources/google_compute_region_instance_group.md)                       | [google_compute_region_instance_groups](docs/resources/google_compute_region_instance_groups.md)                               |\n| [google_compute_region_instance_group_manager](docs/resources/google_compute_region_instance_group_manager.md)       | [google_compute_region_instance_group_managers](docs/resources/google_compute_region_instance_group_managers.md)               |\n| [google_compute_region_operation](docs/resources/google_compute_region_operation.md)                                 | [google_compute_region_operations](docs/resources/google_compute_region_operations.md)                                         |\n| [google_compute_region_operation](docs/resources/google_compute_region_url_map.md)                                 | [google_compute_region_operations](docs/resources/google_compute_region_url_maps.md)                                         |\n| [google_compute_regional_disk](docs/resources/google_compute_regional_disk.md)                                       | [google_compute_regional_disks](docs/resources/google_compute_regional_disks.md)                                               |\n| [google_compute_reservation](docs/resources/google_compute_reservation.md)                                                       | [google_compute_reservations](docs/resources/google_compute_reservations.md)                                                               |\n| [google_compute_resource_policy](docs/resources/google_compute_resource_policy.md)                                                       | [google_compute_resource_policies](docs/resources/google_compute_resource_policies.md)                                                               |\n| [google_compute_route](docs/resources/google_compute_route.md)                                                       | [google_compute_routes](docs/resources/google_compute_routes.md)                                                               |\n| [google_compute_router](docs/resources/google_compute_router.md)                                                     | [google_compute_routers](docs/resources/google_compute_routers.md)                                                             |\n| [google_compute_router_nat](docs/resources/google_compute_router_nat.md)                                             | [google_compute_router_nats](docs/resources/google_compute_router_nats.md)                                                     |\n| [google_compute_security_policy](docs/resources/google_compute_security_policy.md)                                   | [google_compute_security_policies](docs/resources/google_compute_security_policies.md)                                         |\n| [google_compute_snapshot](docs/resources/google_compute_snapshot.md)                                                 | [google_compute_snapshots](docs/resources/google_compute_snapshots.md)                                                         |\n| [google_compute_ssl_certificate](docs/resources/google_compute_ssl_certificate.md)                                   | [google_compute_ssl_certificates](docs/resources/google_compute_ssl_certificates.md)                                           |\n| [google_compute_ssl_policy](docs/resources/google_compute_ssl_policy.md)                                             | [google_compute_ssl_policies](docs/resources/google_compute_ssl_policies.md)                                                   |\n| [google_compute_service_attachment](docs/resources/google_compute_service_attachment.md)                           | [google_compute_service_attachments](docs/resources/google_compute_service_attachments.md)             |\n| [google_compute_subnetwork](docs/resources/google_compute_subnetwork.md)                                             | [google_compute_subnetworks](docs/resources/google_compute_subnetworks.md)                                                     |\n| [google_compute_target_grpc_proxy](docs/resources/google_compute_target_grpc_proxy.md)                                             | [google_compute_target_grpc_proxies](docs/resources/google_compute_target_grpc_proxies.md)                                                     |\n| [google_compute_subnetwork_iam_binding](docs/resources/google_compute_subnetwork_iam_binding.md)                     | No Plural Resource                                                                                                             |\n| [google_compute_subnetwork_iam_policy](docs/resources/google_compute_subnetwork_iam_policy.md)                       | No Plural Resource                                                                                                             |\n| [google_compute_target_http_proxy](docs/resources/google_compute_target_http_proxy.md)                               | [google_compute_target_http_proxies](docs/resources/google_compute_target_http_proxies.md)                                     |\n| [google_compute_target_https_proxy](docs/resources/google_compute_target_https_proxy.md)                             | [google_compute_target_https_proxies](docs/resources/google_compute_target_https_proxies.md)                                   |\n| [google_compute_target_https_proxy](docs/resources/google_compute_target_instance.md)                             | [google_compute_target_https_proxies](docs/resources/google_compute_target_instances.md)                                   |\n| [google_compute_target_pool](docs/resources/google_compute_target_pool.md)                                           | [google_compute_target_pools](docs/resources/google_compute_target_pools.md)                                                   |\n| [google_compute_target_ssl_proxy](docs/resources/google_compute_target_ssl_proxy.md)                                 | [google_compute_target_ssl_proxies](docs/resources/google_compute_target_ssl_proxies.md)                                       |\n| [google_compute_target_tcp_proxy](docs/resources/google_compute_target_tcp_proxy.md)                                 | [google_compute_target_tcp_proxies](docs/resources/google_compute_target_tcp_proxies.md)                                       |\n| [google_compute_url_map](docs/resources/google_compute_url_map.md)                                                   | [google_compute_url_maps](docs/resources/google_compute_url_maps.md)                                                           |\n| [google_compute_vpn_tunnel](docs/resources/google_compute_vpn_tunnel.md)                                             | [google_compute_vpn_tunnels](docs/resources/google_compute_vpn_tunnels.md)                                                     |\n| No Singular Resource                                           | [google_compute_xpn_resources](docs/resources/google_compute_xpn_resources.md)                                                     |\n| [google_compute_zone](docs/resources/google_compute_zone.md)                                                         | [google_compute_zones](docs/resources/google_compute_zones.md)                                                                 |\n| [google_compute_zone_operation](docs/resources/google_compute_zone_operation.md)                                     | [google_compute_zone_operations](docs/resources/google_compute_zone_operations.md)                                             |\n| [google_compute_region_target_http_proxy](docs/resources/google_compute_region_target_http_proxy.md)                                     | [google_compute_region_target_http_proxies](docs/resources/google_compute_region_target_http_proxies.md)                                             |\n| [google_container_cluster](docs/resources/google_container_cluster.md)                                               | [google_container_clusters](docs/resources/google_container_clusters.md)                                                       |\n| [google_container_node_pool](docs/resources/google_container_node_pool.md)                                           | [google_container_node_pools](docs/resources/google_container_node_pools.md)                                                   |\n| [google_container_server_config](docs/resources/google_container_server_config.md)                                   | No Plural Resource                                                                                                             |\n| [google_data_fusion_instance](docs/resources/google_data_fusion_instance.md)                                                 | [google_data_fusion_instances](docs/resources/google_data_fusion_instances.md)                                                         |\n| [google_dataflow_project_location_job](docs/resources/google_dataflow_project_location_job.md)                                                 | [google_dataflow_project_location_jobs](docs/resources/google_dataflow_project_location_jobs.md)                                                         |\n| [google_dataproc_autoscaling_policy](docs/resources/google_dataproc_autoscaling_policy.md)                                                 | [google_dataproc_autoscaling_policies](docs/resources/google_dataproc_autoscaling_policies.md)                                                         |\n| [google_dataproc_batch](docs/resources/google_dataproc_batch.md)                                                 | [google_dataproc_batches](docs/resources/google_dataproc_batches.md)                                                         |\n| [google_dataproc_cluster](docs/resources/google_dataproc_cluster.md)                                                 | [google_dataproc_clusters](docs/resources/google_dataproc_clusters.md)                                                         |\n| [google_dataproc_job](docs/resources/google_dataproc_job.md)                                                 | [google_dataproc_jobs](docs/resources/google_dataproc_jobs.md)                                                         |\n| [google_dataproc_metastore_federation](docs/resources/google_dataproc_metastore_federation.md)                                                 | [google_dataproc_metastore_federations](docs/resources/google_dataproc_metastore_federations.md)                                                         |\n| [google_dataproc_metastore_service_backup](docs/resources/google_dataproc_metastore_service_backup.md)                                                 | [google_dataproc_metastore_service_backups](docs/resources/google_dataproc_metastore_service_backups.md)                                                         |\n| [google_dataproc_metastore_service](docs/resources/google_dataproc_metastore_service.md)                                                                    | [google_dataproc_metastore_services](docs/resources/google_dataproc_metastore_services.md)                                 |\n| [google_dataproc_session](docs/resources/google_dataproc_session.md)                                                                    | [google_dataproc_sessions](docs/resources/google_dataproc_sessions.md)                                 |\n| [google_dataproc_workflow_template](docs/resources/google_dataproc_workflow_template.md)                                                 | [google_dataproc_workflow_templates](docs/resources/google_dataproc_workflow_templates.md)                                                         |\n| [google_dns_managed_zone](docs/resources/google_dns_managed_zone.md)                                                 | [google_dns_managed_zones](docs/resources/google_dns_managed_zones.md)                                                         |\n| [google_dns_resource_record_set](docs/resources/google_dns_resource_record_set.md)                                   | [google_dns_resource_record_sets](docs/resources/google_dns_resource_record_sets.md)                                           |\n| [google_dlp_dt](docs/resources/google_dlp_dt.md)                                                                     | [google_dlp_dts](docs/resources/google_dlp_dts.md)\n| [google_dlp_inspect_template](docs/resources/google_dlp_inspect_template.md)                                | [google_dlp_inspect_templates](docs/resources/google_dlp_inspect_templates.md)                     |\n| [google_dlp_job_trigger](docs/resources/google_dlp_job_trigger.md)                                   | [google_dlp_job_triggers](docs/resources/google_dlp_job_triggers.md)                         |\n| [google_dlp_job](docs/resources/google_dlp_job.md)                                                                    | [google_dlp_jobs](docs/resources/google_dlp_jobs.md)                                 |\n| [google_dlp_stored_info_type](docs/resources/google_dlp_stored_info_types.md)                         | [google_dlp_stored_info_types](docs/resources/google_dlp_stored_info_types.md)                         |\n| [google_filestore_instance](docs/resources/google_filestore_instance.md)                                             | [google_filestore_instances](docs/resources/google_filestore_instances.md)                                                     |\n| [google_iam_organization_custom_role](docs/resources/google_iam_organization_custom_role.md)                         | [google_iam_organization_custom_roles](docs/resources/google_iam_organization_custom_roles.md)                                 |\n| [google_kms_crypto_key](docs/resources/google_kms_crypto_key.md)                                                     | [google_kms_crypto_keys](docs/resources/google_kms_crypto_keys.md)                                                             |\n| [google_kms_crypto_key_iam_binding](docs/resources/google_kms_crypto_key_iam_binding.md)                             | [google_kms_crypto_key_iam_bindings](docs/resources/google_kms_crypto_key_iam_bindings.md)                                     |\n| [google_kms_crypto_key_iam_policy](docs/resources/google_kms_crypto_key_iam_policy.md)                               | No Plural Resource                                                                                                             |\n| [google_kms_crypto_key_version](docs/resources/google_kms_crypto_key_version.md)                             | [google_kms_crypto_key_versions](docs/resources/google_kms_crypto_key_versions.md)                                     |\n| [google_kms_ekm_connection](docs/resources/google_kms_ekm_connection.md)                                             | [google_kms_ekm_connections](docs/resources/google_kms_ekm_connections.md)                                                     |\n| [google_kms_key_ring](docs/resources/google_kms_key_ring.md)                                                         | [google_kms_key_rings](docs/resources/google_kms_key_rings.md)                                                                 |\n| [google_kms_key_ring_iam_binding](docs/resources/google_kms_key_ring_iam_binding.md)                                 | [google_kms_key_ring_iam_bindings](docs/resources/google_kms_key_ring_iam_bindings.md)                                         |\n| [google_kms_key_ring_iam_policy](docs/resources/google_kms_key_ring_iam_policy.md)                                   | No Plural Resource                                                                                                             |\n| [google_kms_key_ring_import_job](docs/resources/google_kms_key_ring_import_job.md)                                   | [google_kms_key_ring_import_jobs](docs/resources/google_kms_key_ring_import_jobs.md)                                           |\n| [google_kms_location](docs/resources/google_kms_location.md)                                                         | [google_kms_locations](docs/resources/google_kms_locations.md)                                                                 |\n| [google_logging_folder_exclusion](docs/resources/google_logging_folder_exclusion.md)                                 | [google_logging_folder_exclusions](docs/resources/google_logging_folder_exclusions.md)                                         |\n| [google_logging_folder_log_sink](docs/resources/google_logging_folder_log_sink.md)                                   | [google_logging_folder_log_sinks](docs/resources/google_logging_folder_log_sinks.md)                                           |\n| [google_logging_organization_log_sink](docs/resources/google_logging_organization_log_sink.md)                       | [google_logging_organization_log_sinks](docs/resources/google_logging_organization_log_sinks.md)                               |\n| [google_logging_project_exclusion](docs/resources/google_logging_project_exclusion.md)                               | [google_logging_project_exclusions](docs/resources/google_logging_project_exclusions.md)                                       |\n| [google_logging_project_sink](docs/resources/google_logging_project_sink.md)                                         | [google_logging_project_sinks](docs/resources/google_logging_project_sinks.md)                                                 |\n| [google_memcache_instance](docs/resources/google_memcache_instance.md)                                               | [google_memcache_instances](docs/resources/google_memcache_instances.md)                                                       |\n| [google_ml_engine_model](docs/resources/google_ml_engine_model.md)                                                   | [google_ml_engine_models](docs/resources/google_ml_engine_models.md)                                                           |\n| [google_monitoring_group](docs/resources/google_monitoring_group.md)                                                   | [google_monitoring_groups](docs/resources/google_monitoring_groups.md)                                                           |\n| [google_organization](docs/resources/google_organization.md)                                                         | [google_organizations](docs/resources/google_organizations.md)                                                                 |\n| No Singular Resource                                                |              [google_orgpolicy_folder_constraints](docs/resources/google_orgpolicy_folder_constraints.md)                                                                                                |\n| No Singular Resource                                                |              [google_orgpolicy_organization_constraints](docs/resources/google_orgpolicy_project_constraints.md)                                                                                                |\n| No Singular Resource                                                |              [google_orgpolicy_project_constraints](docs/resources/google_orgpolicy_project_constraints.md)                                                                                                |\n| [google_orgpolicy_folder_policy](docs/resources/google_orgpolicy_folder_policy.md)   | [google_orgpolicy_folder_policies](docs/resources/google_orgpolicy_folder_policies.md)                                                                 |\n| [google_orgpolicy_organization_policy](docs/resources/google_orgpolicy_organization_policy.md)   | [google_orgpolicy_organization_policies](docs/resources/google_orgpolicy_organization_policies.md)                                                                 |\n| [google_orgpolicy_project_policy](docs/resources/google_orgpolicy_project_policy.md)   | [google_orgpolicy_project_policies](docs/resources/google_orgpolicy_project_policies.md)                                                                 |\n| [google_organization_iam_binding](docs/resources/google_organization_iam_binding.md)                                 | No Plural Resource                                                                                                             |\n| [google_organization_iam_policy](docs/resources/google_organization_iam_policy.md)                                   | No Plural Resource                                                                                                             |\n| [google_organization_policy](docs/resources/google_organization_policy.md)                                           | No Plural Resource                                                                                                             |\n| [google_project](docs/resources/google_project.md)                                                                   | [google_projects](docs/resources/google_projects.md)                                                                           |\n| [google_project_alert_policy](docs/resources/google_project_alert_policy.md)                                         | [google_project_alert_policies](docs/resources/google_project_alert_policies.md)                                               |\n| [google_project_alert_policy_condition](docs/resources/google_project_alert_policy_condition.md)                     | No Plural Resource                                                                                                             |\n| [google_project_iam_binding](docs/resources/google_project_iam_binding.md)                                           | [google_project_iam_bindings](docs/resources/google_project_iam_bindings.md)                                                   |\n| [google_project_iam_custom_role](docs/resources/google_project_iam_custom_role.md)                                   | [google_project_iam_custom_roles](docs/resources/google_project_iam_custom_roles.md)                                           |\n| [google_project_iam_policy](docs/resources/google_project_iam_policy.md)                                             | No Plural Resource                                                                                                             |\n| [google_project_logging_audit_config](docs/resources/google_project_logging_audit_config.md)                         | No Plural Resource                                                                                                             |\n| [google_project_metric](docs/resources/google_project_metric.md)                                                     | [google_project_metrics](docs/resources/google_project_metrics.md)                                                             |\n| [google_project_service](docs/resources/google_project_service.md)                                                   | [google_project_services](docs/resources/google_project_services.md)                                                           |\n| [google_pubsub_subscription](docs/resources/google_pubsub_subscription.md)                                           | [google_pubsub_subscriptions](docs/resources/google_pubsub_subscriptions.md)                                                   |\n| [google_pubsub_subscription_iam_binding](docs/resources/google_pubsub_subscription_iam_binding.md)                   | No Plural Resource                                                                                                             |\n| [google_pubsub_subscription_iam_policy](docs/resources/google_pubsub_subscription_iam_policy.md)                     | No Plural Resource                                                                                                             |\n| [google_pubsub_topic](docs/resources/google_pubsub_topic.md)                                                         | [google_pubsub_topics](docs/resources/google_pubsub_topics.md)                                                                 |\n| [google_pubsub_topic_iam_binding](docs/resources/google_pubsub_topic_iam_binding.md)                                 | No Plural Resource                                                                                                             |\n| [google_pubsub_topic_iam_policy](docs/resources/google_pubsub_topic_iam_policy.md)                                   | No Plural Resource                                                                                                             |\n| [google_redis_instance](docs/resources/google_redis_instance.md)                                                     | [google_redis_instances](docs/resources/google_redis_instances.md)                                                             |\n| [google_compute_region_security_policy](docs/resources/google_compute_region_security_policy.md)                                                     | [google_compute_region_security_policies](docs/resources/google_compute_region_security_policies.md)                                                             |\n| [google_resourcemanager_folder](docs/resources/google_resourcemanager_folder.md)                                     | [google_resourcemanager_folders](docs/resources/google_resourcemanager_folders.md)                                             |\n| [google_resourcemanager_folder_iam_binding](docs/resources/google_resourcemanager_folder_iam_binding.md)             | No Plural Resource                                                                                                             |\n| [google_resourcemanager_folder_iam_policy](docs/resources/google_resourcemanager_folder_iam_policy.md)               | No Plural Resource                                                                                                             |\n| [google_run_job](docs/resources/google_run_job.md)                                       | [google_run_jobs](docs/resources/google_run_jobs.md)                                               |\n| [google_run_service](docs/resources/google_run_service.md)                                       | [google_run_services](docs/resources/google_run_services.md)                                               |\n| [google_runtime_config_config](docs/resources/google_runtime_config_config.md)                                       | [google_runtime_config_configs](docs/resources/google_runtime_config_configs.md)                                               |\n| [google_runtime_config_config_iam_binding](docs/resources/google_runtime_config_config_iam_binding.md)               | No Plural Resource                                                                                                             |\n| [google_runtime_config_config_iam_policy](docs/resources/google_runtime_config_config_iam_policy.md)                 | No Plural Resource                                                                                                             |\n| [google_runtime_config_variable](docs/resources/google_runtime_config_variable.md)                                   | [google_runtime_config_variables](docs/resources/google_runtime_config_variables.md)                                           |\n| [google_secret_manager_secret](docs/resources/google_secret_manager_secret.md)                           | [google_secret_manager_secrets](docs/resources/google_secret_manager_secrets.md)             |\n| [google_service_account](docs/resources/google_service_account.md)                                                   | [google_service_accounts](docs/resources/google_service_accounts.md)                                                           |\n| No Singular Resource                                                    | [google_service_networking_service_connections](docs/resources/google_service_networking_service_connections.md)                                                           |\n| [google_service_account_key](docs/resources/google_service_account_key.md)                                           | [google_service_account_keys](docs/resources/google_service_account_keys.md)                                                   |\n| [google_sourcerepo_repository](docs/resources/google_sourcerepo_repository.md)                                       | [google_sourcerepo_repositories](docs/resources/google_sourcerepo_repositories.md)                                             |\n| [google_spanner_database](docs/resources/google_spanner_database.md)                                                 | [google_spanner_databases](docs/resources/google_spanner_databases.md)                                                         |\n| [google_spanner_instance](docs/resources/google_spanner_instance.md)                                                 | [google_spanner_instances](docs/resources/google_spanner_instances.md)                                                         |\n| [google_spanner_instance_iam_binding](docs/resources/google_spanner_instance_iam_binding.md)                         | No Plural Resource                                                                                                             |\n| [google_spanner_instance_iam_policy](docs/resources/google_spanner_instance_iam_policy.md)                           | No Plural Resource                                                                                                             |\n| [google_sql_connect](docs/resources/google_sql_connect.md)                                                           | No Plural Resource                                                                                                             |\n| [google_sql_database](docs/resources/google_sql_database.md)                                                         | [google_sql_databases](docs/resources/google_sql_databases.md)                                                                 |\n| [google_sql_database_instance](docs/resources/google_sql_database_instance.md)                                       | [google_sql_database_instances](docs/resources/google_sql_database_instances.md)                                               |\n| No Singular Resource                                                                                                 | [google_sql_flags](docs/resources/google_sql_flags.md)                                                                         |\n| [google_sql_operation](docs/resources/google_sql_operation.md)                                                       | [google_sql_operations](docs/resources/google_sql_operations.md)                                                               |\n| [google_sql_ssl_cert](docs/resources/google_sql_ssl_cert.md)                                                         | [google_sql_ssl_certs](docs/resources/google_sql_ssl_certs.md)                                                                 |\n| [google_sql_user](docs/resources/google_sql_user.md)                                                                 | [google_sql_users](docs/resources/google_sql_users.md)                                                                         |\n| [google_storage_bucket](docs/resources/google_storage_bucket.md)                                                     | [google_storage_buckets](docs/resources/google_storage_buckets.md)                                                             |\n| [google_storage_bucket_acl](docs/resources/google_storage_bucket_acl.md)                                             | No Plural Resource                                                                                                             |\n| [google_storage_bucket_iam_binding](docs/resources/google_storage_bucket_iam_binding.md)                             | [google_storage_bucket_iam_bindings](docs/resources/google_storage_bucket_iam_bindings.md)                                     |\n| [google_storage_bucket_iam_policy](docs/resources/google_storage_bucket_iam_policy.md)                               | No Plural Resource                                                                                                             |\n| [google_storage_bucket_object](docs/resources/google_storage_bucket_object.md)                                       | [google_storage_bucket_objects](docs/resources/google_storage_bucket_objects.md)                                               |\n| [google_storage_default_object_acl](docs/resources/google_storage_default_object_acl.md)                             | No Plural Resource                                                                                                             |\n| [google_storage_object_acl](docs/resources/google_storage_object_acl.md)                                             | No Plural Resource                                                                                                             |\n| [google_user](docs/resources/google_user.md)                                                                         | [google_users](docs/resources/google_users.md)                                                                                 |\n| [google_vertex_ai_batch_prediction_job](docs/resources/google_vertex_ai_batch_prediction_job.md)                     | [google_vertex_ai_batch_prediction_jobs](docs/resources/google_vertex_ai_batch_prediction_jobs.md)                             |\n| [google_vertex_ai_custom_job](docs/resources/google_vertex_ai_custom_job.md)                                         | [google_vertex_ai_custom_jobs](docs/resources/google_vertex_ai_custom_jobs.md)                                                 |\n| [google_vertex_ai_dataset](docs/resources/google_vertex_ai_dataset.md)                                               | [google_vertex_ai_datasets](docs/resources/google_vertex_ai_datasets.md)                                                       |\n| [google_vertex_ai_datasets_annotation_spec](docs/resources/google_vertex_ai_datasets_annotation_spec.md)                                               | No Plural Resource                                                      |\n| No Singular Resource                                              | [google_vertex_ai_datasets_data_items](docs/resources/google_vertex_ai_datasets_data_items.md)                                                       |\n| No Singular Resource                                              | [google_vertex_ai_datasets_saved_queries](docs/resources/google_vertex_ai_datasets_saved_queries.md)                                                       |\n| [google_vertex_ai_endpoint](docs/resources/google_vertex_ai_endpoint.md)                                             | [google_vertex_ai_endpoints](docs/resources/google_vertex_ai_endpoints.md)                                                     |\n| [google_vertex_ai_featurestore](docs/resources/google_vertex_ai_featurestore.md)                           | [google_vertex_ai_featurestores](docs/resources/google_vertex_ai_featurestores.md)             |\n| [google_vertex_ai_featurestores_entity_type](docs/resources/google_vertex_ai_featurestores_entity_type.md)                           | [google_vertex_ai_featurestores_entity_types](docs/resources/google_vertex_ai_featurestores_entity_types.md)             |\n| [google_vertex_ai_featurestore_entity_type_feature](docs/resources/google_vertex_ai_featurestore_entity_type_feature.md)                           | [google_vertex_ai_featurestore_entity_type_features](docs/resources/google_vertex_ai_featurestore_entity_type_features.md)             |\n| [google_vertex_ai_hyperparameter_tuning_job](docs/resources/google_vertex_ai_hyperparameter_tuning_job.md)                                               | [google_vertex_ai_hyperparameter_tuning_jobs](docs/resources/google_vertex_ai_hyperparameter_tuning_jobs.md)                                                       |\n| [google_vertex_ai_index_endpoint](docs/resources/google_vertex_ai_index_endpoint.md)                                             | [google_vertex_ai_index_endpoints](docs/resources/google_vertex_ai_index_endpoints.md)                                                     |\n| [google_vertex_ai_index](docs/resources/google_vertex_ai_index.md)                                             | [google_vertex_ai_indices](docs/resources/google_vertex_ai_indices.md)                                                     |\n| [google_vertex_ai_metadata_store](docs/resources/google_vertex_ai_metadata_store.md)                                             | [google_vertex_ai_metadata_stores](docs/resources/google_vertex_ai_metadata_stores.md)                                                     |\n| [google_vertex_ai_metadata_stores_artifact](docs/resources/google_vertex_ai_metadata_stores_artifact.md)                                             | [google_vertex_ai_metadata_stores_artifacts](docs/resources/google_vertex_ai_metadata_stores_artifacts.md)                                                     |\n| [google_vertex_ai_metadata_stores_context](docs/resources/google_vertex_ai_metadata_stores_context.md)                                             | [google_vertex_ai_metadata_stores_contexts](docs/resources/google_vertex_ai_metadata_stores_contexts.md)                                                     |\n| [google_vertex_ai_metadata_stores_execution](docs/resources/google_vertex_ai_metadata_stores_execution.md)                                             | [google_vertex_ai_metadata_stores_executions](docs/resources/google_vertex_ai_metadata_stores_executions.md)                                                     |\n| [google_vertex_ai_metadata_stores_metadata_schema](docs/resources/google_vertex_ai_metadata_stores_metadata_schema.md)                                             | [google_vertex_ai_metadata_stores_metadata_schemas](docs/resources/google_vertex_ai_metadata_stores_metadata_schemas.md)                                                     |\n| [google_vertex_ai_model_deployment_monitoring_job](docs/resources/google_vertex_ai_model_deployment_monitoring_job.md)                           | [google_vertex_ai_model_deployment_monitoring_jobs](docs/resources/google_vertex_ai_model_deployment_monitoring_jobs.md)             |\n| [google_vertex_ai_model](docs/resources/google_vertex_ai_model.md)                                                                         | [google_vertex_ai_models](docs/resources/google_vertex_ai_models.md)                                                                                 |\n| [google_vertex_ai_models_evaluation](docs/resources/google_vertex_ai_models_evaluation.md)                           | [google_vertex_ai_models_evaluations](docs/resources/google_vertex_ai_models_evaluations.md)             |\n| [google_vertex_ai_models_evaluation_slice](docs/resources/google_vertex_ai_model_evaluation_slice.md)                           | [google_vertex_ai_models_evaluation_slices](docs/resources/google_vertex_ai_model_evaluation_slices.md)             |\n| [google_vertex_ai_nas_job](docs/resources/google_vertex_ai_nas_job.md)                                               | [google_vertex_ai_nas_jobs](docs/resources/google_vertex_ai_nas_jobs.md)                                                       |\n| [google_vertex_ai_nas_jobs_nas_trial_detail](docs/resources/google_vertex_ai_nas_jobs_nas_trial_detail.md)                                               | [google_vertex_ai_nas_jobs_nas_trial_details](docs/resources/google_vertex_ai_nas_jobs_nas_trial_details.md)                                                       |\n| [google_vertex_ai_pipeline_job](docs/resources/google_vertex_ai_pipeline_job.md)                                     | [google_vertex_ai_pipeline_jobs](docs/resources/google_vertex_ai_pipeline_jobs.md)                                   |\n| [google_vertex_ai_schedule](docs/resources/google_vertex_ai_schedule.md)                                             | [google_vertex_ai_schedules](docs/resources/google_vertex_ai_schedules.md)                                   |\n| [google_vertex_ai_study](docs/resources/google_vertex_ai_study.md)                           | [google_vertex_ai_studies](docs/resources/google_vertex_ai_studies.md)             |\n| [google_vertex_ai_studies_trial](docs/resources/google_vertex_ai_studies_trial.md)                           | [google_vertex_ai_studies_trials](docs/resources/google_vertex_ai_studies_trials.md)             |\n| [google_vertex_ai_tensorboard](docs/resources/google_vertex_ai_tensorboard.md)                                       | [google_vertex_ai_tensorboards](docs/resources/google_vertex_ai_tensorboards.md)                                   |\n| [google_vertex_ai_tensorboards_experiment](docs/resources/google_vertex_ai_tensorboards_experiment.md)                                       | [google_vertex_ai_tensorboards_experiments](docs/resources/google_vertex_ai_tensorboards_experiments.md)                                   |\n| [google_vertex_ai_tensorboard_experiment_run](docs/resources/google_vertex_ai_tensorboard_experiment_run.md)                                       | [google_vertex_ai_tensorboard_experiment_runs](docs/resources/google_vertex_ai_tensorboard_experiment_runs.md)                                   |\n| [google_vertex_ai_tensorboard_experiment_run_time_series_resource](docs/resources/google_vertex_ai_tensorboard_experiment_run_time_series_resource.md)                                       | [google_vertex_ai_tensorboard_experiment_run_time_series_resources](docs/resources/google_vertex_ai_tensorboard_experiment_run_time_series_resources.md)                                   |\n| [google_vertex_ai_training_pipeline](docs/resources/google_vertex_ai_training_pipeline.md)                           | [google_vertex_ai_training_pipelines](docs/resources/google_vertex_ai_training_pipelines.md)             |\n\n## Examples\n\n### Check SSH is Disabled for INGRESS across all GCP Projects\n\nWe use several plural resources for this example that loops across all projects and firewall rules.  Making use of a plural resource property, we filter firewall rules for direction 'INGRESS' :\n\n```\ntitle 'Loop over all GCP projects and look at firewalls in INGRESS direction'\n\ncontrol 'gcp-projects-firewalls-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure INGRESS firewalls in all projects have the correct properties using google_compute_firewall for detail.'\n\n  google_projects.project_names.each do |project_name|\n    google_compute_firewalls(project: project_name).where(firewall_direction: 'INGRESS').firewall_names.each do |firewall_name|\n      describe google_compute_firewall(project: project_name, name: firewall_name) do\n        its('allowed_ssh?')  { should be false }\n      end\n    end\n  end\nend\n```\n\nThis example assumes there are sufficient privileges to list all GCP projects.\n\n### Check that a particular label exists on all VMs across all projects and zones\n\nThis check ensures that VMs have label `must_be_there` for each project:\n```\ntitle 'Loop over all GCP projects and ensure all VMs have a particular label'\n\ncontrol 'gcp-projects-zones-vm-label-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure all VMs have must_be_there label key set'\n\n  google_projects.project_names.each do |project_name|\n    google_compute_zones(project: project_name).zone_names.each do |zone_name|\n      google_compute_instances(project: project_name, zone: zone_name).instance_names.each do |instance_name|\n        describe google_compute_instance(project: project_name, zone: zone_name, name: instance_name) do\n          its('labels_keys') { should include 'must_be_there' }\n        end\n      end\n    end\n  end\nend\n```\nThis example verifies there are sufficient privileges to list all regions.\n\n```\nnext unless google_compute_regions(project: gcp_project_id).resource_failed?\ngoogle_compute_regions(project: gcp_project_id).region_names.each do |region_name|\n  describe google_compute_region(project: gcp_project_id,  region: region_name) do\n    it { should be_up }\n  end\nend\n\nif google_compute_regions(project: gcp_project_id).resource_failed?\n  puts google_compute_regions(project: gcp_project_id).resource_exception_message\n  puts google_compute_regions(project: gcp_project_id,name: region_name).pretty_inspect\nend\n```\n\n\n\nThis example assumes there are sufficient privileges to list all GCP projects.\n\n\n## Test inspec-gcp resources\n\n1. Create a new GCP project\n2. Ensure this is currently set following: https://cloud.google.com/shell/docs/examples\n```bash\n$ gcloud config set project <project-name>\n$ gcloud config list project\n```\n3. Enable billing for your new project\n4. Enable various services necessary to run the tests:\n```bash\n$ gcloud services enable compute.googleapis.com \\\n    sourcerepo.googleapis.com \\\n    dns.googleapis.com \\\n    container.googleapis.com \\\n    cloudkms.googleapis.com \\\n    cloudbuild.googleapis.com\n```\n\n5. Environment variables can be used to specify project details e.g.\n```bash\nexport GCP_PROJECT_NAME=<project-name>\nexport GCP_PROJECT_NUMBER=<project-number>\nexport GCP_PROJECT_ID=<project-id>\n```\n\nSome resources require elevated privileges to create in GCP.  These are disabled by default but can be activated via:\n```bash\nexport GCP_ENABLE_PRIVILEGED_RESOURCES=1\n```\nThis takes effect during the \"plan\" task as described in the next section.  Affected terraform resources are included/excluded and associated inspec tests enabled/disabled accordingly.\n\nThe resource pack defaults to region `europe-west2`.  If a different region is desired e.g. `us-central1`, the following variables should be set:\n```bash\nexport GCP_LOCATION=\"us-central1\"\nexport GCP_ZONE=\"us-central1-a\"\nexport GCP_LB_REGION=\"us-central1\"\nexport GCP_LB_ZONE=\"us-central1-a\"\nexport GCP_LB_ZONE_MIG2=\"us-central1-b\"\nexport GCP_LB_ZONE_MIG3=\"us-central1-c\"\nexport GCP_KUBE_CLUSTER_ZONE=\"us-central1-a\"\nexport GCP_KUBE_CLUSTER_ZONE_EXTRA1=\"us-central1-b\"\nexport GCP_KUBE_CLUSTER_ZONE_EXTRA2=\"us-central1-c\"\nexport GCP_CLOUD_FUNCTION_REGION=\"us-central1\"\n```\n\nOther regions can be targeted by updating the above.  For example, see [https://cloud.google.com/compute/docs/regions-zones/](https://cloud.google.com/compute/docs/regions-zones/) for suitable values.\n\n6. Ensure the `In-use IP addresses` [quota](https://console.cloud.google.com/iam-admin/quotas) is set to 20 or above for chosen region\n\n7. Run the integration tests via:\n```bash\nbundle install && bundle exec rake test:integration\n```\n\nAlternatively, finer grained rake tasks are also available.  Executing these in order is the same as the above command:\n* Initialize local workspace (terraform init)\n``` bash\nbundle exec rake test:init_workspace\n```\n* Plan integration tests - ensures variables are set for Inspec and Terraform, runs \"terraform plan\"\n``` bash\nbundle exec rake test:plan_integration_tests\n```\n* Set up integration tests - actually creates the resources in GCP (terraform apply)\n``` bash\nbundle exec rake test:setup_integration_tests\n```\n* Run integration tests - runs the tests (inspec exec)\n``` bash\nbundle exec rake test:run_integration_tests\n```\n* Clean up integration tests - removes GCP resources (terraform destroy)\n``` bash\nbundle exec rake test:cleanup_integration_tests\n```\n\n## Further Reading\n\n* [Introduction to InSpec GCP](https://lollyrock.com/articles/inspec-cloud-gcp-setup/)\n* [InSpec GCP Deep Dive](https://www.chef.io/blog/inspec-gcp-deep-dive)\n\n## FAQ\n\n### Failure running \"inspec exec\" on my GCP profile\n\nIf an error such as the below occurs when running \"inspec exec\" on a newly created GCP profile:\n```\nlibraries/google_compute_instance.rb:26:in `block in initialize': undefined method `gcp_compute_client' for #<Train::Transports::Local::Connection:0x00007fcasdf1a532d0> (NoMethodError)\n```\nCheck that the GCP transport is being specified as below:\n```\n$ inspec exec . -t gcp://\n```\nThis tells the underlying transport layer (train) to use GCP.\n\n### `access not configured` error\n\nInSpec relies on the GCP API's to verify the settings. Therefore, it requires access to the API. If you try to access an API via an InSpec resource that is not enabled in your account, then you see an error like:\n\n```\ngoogleapi: Error 403: Access Not Configured. Compute Engine API has not been used in project 41111111111 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/compute.googleapis.com/overview then retry.\n```\n\n### Quota increase\n\nThe terraform templates generate sufficient resources to require an increase to default in_use IP addresses. Normally new projects have 10, increasing this to 20 or higher should be sufficient.\n\nTo find this setting, log in to the GCP web interface and go to **IAM and admin->Quotas** and look for \"Compute Engine API In-use IP addresses\".  From here you can \"Edit quotas\" to request more.\n```\nChanged Quota:\n+----------------------+------------------+\n| Region: europe-west2 | IN_USE_ADDRESSES |\n+----------------------+------------------+\n|       Changes        |     8 -> 64      |\n+----------------------+------------------+\n```\n\n### Errors on terraform destroy\n\nSometimes there can be occasional errors when performing the cleanup rake task. This happens when resources are already deleted and can be ignored.\n\n## Upgrading to version 1.0\n\nA guide on upgrading to version 1.0 can be found [here](docs/version_1_upgrade.md)\n\n## Support\n\nThe InSpec GCP resources are community supported. For bugs and features, please open a github issue and label it appropriately.\n\n## Kudos\n\nThis implementation is inspired by [inspec-azure](https://github.com/chef/inspec-azure) and [inspec-gcp](https://github.com/martezr/inspec-gcp)\n"
  },
  {
    "path": "Rakefile",
    "content": "#!/usr/bin/env rake\n\nrequire 'rake/testtask'\nrequire 'rubocop/rake_task'\n#require 'inifile'\nrequire_relative 'test/integration/configuration/gcp_inspec_config'\n\n# Rubocop\ndesc 'Run Rubocop lint checks'\ntask :rubocop do\n  RuboCop::RakeTask.new\nend\n\n# lint the project\ndesc 'Run robocop linter'\ntask lint: [:rubocop]\n\n# run tests\ntask default: ['test:check']\n\nnamespace :test do\n  # Specify the directory for the integration tests\n  integration_dir = \"test/integration\"\n\n  # Specify the terraform plan name\n  plan_name = \"inspec-gcp.plan\"\n\n  # Specify the file_name for terraform variables to be stored\n  variable_file_name = \"inspec-gcp.tfvars.json\"\n\n  # The below file allows to inject parameters as profile attributes to inspec\n  profile_attributes = \"gcp-inspec-attributes.yaml\"\n\n  # run inspec check to verify that the profile is properly configured\n  task :check do\n    dir = File.join(File.dirname(__FILE__))\n    sh(\"bundle exec inspec check #{dir} --chef-license=accept-silent\")\n    # run inspec check on the sample profile to ensure all resources are loaded okay\n    # Disabling inspec check on profile with path dependency due to https://github.com/inspec/inspec/issues/3571\n    #sh(\"cd #{integration_dir}/verify && bundle exec inspec check .\")\n  end\n\n\n  task :init_workspace do\n    # Initialize terraform workspace\n    cmd = format(\"cd %s/build/ && terraform init -upgrade\", integration_dir)\n    sh(cmd)\n  end\n\n  task :plan_integration_tests, [:seed] do |t, args|\n    puts \"----> Generating terraform and inspec variable files\"\n    puts \"Seeding random suffixes with: #{args.seed}\" unless args.seed.nil?\n    config = GCPInspecConfig::Config.new(args.seed)\n    config.store_json(variable_file_name)\n    config.store_yaml(profile_attributes)\n\n    puts \"----> Setup\"\n    # Create the plan that can be applied to GCP\n    cmd = format(\"cd %s/build/ && terraform plan  -var-file=%s -out %s\", integration_dir, variable_file_name, plan_name)\n #   puts cmd\n    sh(cmd)\n\n  end\n\n  task :setup_integration_tests do\n    # Apply the plan on GCP\n    cmd = format(\"cd %s/build/ && terraform apply %s\", integration_dir, plan_name)\n    sh(cmd)\n  end\n\n  task :run_integration_tests do\n    puts \"----> Run\"\n    # Since the default behaviour is to skip tests, the below absorbs an inspec \"101 run okay + skipped only\" exit code as successful\n    cmd = format(\"bundle exec inspec exec %s/verify --attrs %s/build/%s -t gcp:// --chef-license=accept-silent; rc=$?; if [ $rc -eq 0 ] || [ $rc -eq 101 ]; then exit 0; else exit 1; fi\", integration_dir, integration_dir, profile_attributes)\n    sh(cmd)\n  end\n\n  task :cleanup_integration_tests do\n    puts \"----> Cleanup\"\n    cmd = format(\"cd %s/build/ && terraform destroy -force -var-file=%s || true\", integration_dir, variable_file_name)\n    sh(cmd)\n\n  end\n\n  desc \"Perform Integration Tests\"\n  task :integration do\n    Rake::Task[\"test:init_workspace\"].execute\n    if File.exists?(File.join(integration_dir,\"build\",variable_file_name))\n      Rake::Task[\"test:cleanup_integration_tests\"].execute\n    end\n    Rake::Task[\"test:plan_integration_tests\"].execute\n    Rake::Task[\"test:setup_integration_tests\"].execute\n    Rake::Task[\"test:run_integration_tests\"].execute\n    Rake::Task[\"test:cleanup_integration_tests\"].execute\n  end\nend\n\n# Automatically generate a changelog for this project. Only loaded if\n# the necessary gem is installed.\n# use `rake changelog to=1.2.0`\nbegin\n  v = ENV['to']\n  require 'github_changelog_generator/task'\n  GitHubChangelogGenerator::RakeTask.new :changelog do |config|\n    config.future_release = v\n  end\nrescue LoadError\n  puts '>>>>> GitHub Changelog Generator not loaded, omitting tasks'\nend\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy                                            \n\n## Reporting a Vulnerability\n\nSee https://chef.io/security for our security policy and how to report a vulnerability.\n\n"
  },
  {
    "path": "VERSION",
    "content": "1.11.136"
  },
  {
    "path": "docs/version_1_upgrade.md",
    "content": "## Upgrading from 0.x to 1.0\n\nThis guide is meant to help upgrade InSpec controls for the 1.0 version. There were several breaking changes that happened during this upgrade in the pursuit of a more unified experience across the inspec-gcp resources.\n\n## Changes to undefined methods\n\nMany resources in 0.x had methods dynamically defined based on the API response retrieved by that resource. This resulted in methods being undefined if the response did not contain that field, particularly in the case of optional fields on resources. Undefined method errors are tricky to handle from within an InSpec control, causing difficulty in writing tests against optional fields.\n\nBy migrating resources to be generated via [Magic Modules](https://github.com/GoogleCloudPlatform/magic-modules) they now have the schema of the underlying object, making it unnecessary to dynamically define methods.\n\nWhat this means for you:\n\n* If you depended on checking if methods were defined in inspec-gcp 0.x, you will need to rewrite controls. Checks for `.nil?` in 1.0 should function similarly to how checking if a method was defined in 0.x\n\n* You can now safely check if an optional field is `nil` on resources\n\n* Better documentation of the fields supported by a resource\n\n* Much improved nested object traversal using the safe navigation operator (`&.`)\n\n## IAM resource changes\n\n### IAM bindings resources removed\n\nAll `*_iam_bindings` resources have been replaced with `*_iam_policy` resources that function in a similar fashion. `iam_policy` resources have the `bindings` field on them which functions in the same way as `iam_bindings` resources did in the past.\n\nA control using the 0.x `storage_bucket_iam_bindings` resource similar to this:\n\n```\n  describe google_storage_bucket_iam_bindings(bucket: 'bucket-name') do\n    it { should exist }\n    its('iam_binding_roles') { should include \"roles/storage.objectViewer\" }\n  end\n```\n\nCould be converted to a `storage_bucket_iam_policy` resource similar to:\n```\n  describe google_storage_bucket_iam_policy(bucket: 'bucket-name') do\n    it { should exist }\n    its('iam_binding_roles') { should include \"roles/storage.objectViewer\" }\n  end\n```\n\n## Resource identifiers changes\n\n### Long names -> individual identifiers\n\nSeveral resources in 0.x were identified by a single string that combined multiple different identifiers into a single URL-like format. An example of this is in the `google_kms_crypto_key_iam_binding` resource that would take a single string as the identifier:\n\n```\ngoogle_kms_crypto_key_iam_binding(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name',  role: 'roles/owner') do\n```\n\nThis creates a difficult situation where the user is required to know the format of the string and create it based on several different variables. In 1.0+ many of the constructor parameters have changed to simplify the use of these resources. For example, `google_kms_crypto_key_iam_binding` will take the following parameters in the future:\n\n```\ngoogle_kms_crypto_key_iam_binding(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\", crypto_key_name: \"name\", role: \"roles/editor\") do\n```\n\n## Time field changes\n\nSeveral resources (`google_storage_*` resources in particular) had methods ending in `_date` that would return the field parsed as a Ruby Time object. These have been simplified to always return as a Time object and renamed to remove the `_date` suffix to better match the API.\n\nExample:\n`google_storage_bucket_object.time_storage_class_updated_date` Renamed to `google_storage_bucket_object.time_storage_class_updated`\n\n## Removed fields\n\n* `google_container_cluster.zone`, a replacement can be found as `google_container_cluster.location`\n\n## Container resources\n\n* `google_container_regional_cluster` is removed, use `google_container_cluster`\n\n* `google_container_regional_node_pool` is removed, use `google_container_node_pool`\n\n* `google_container_cluster` and `google_container_node_pool` now use the the `location` field as an identifier rather than `zone`. They accept zones or regions as the `location` "
  },
  {
    "path": "docs-chef-io/content/_index.md",
    "content": "+++\ntitle = \"About the Chef InSpec Google Cloud Platform resource pack\"\ndraft = false\nlinkTitle = \"GCP resource pack\"\nsummary = \"Chef InSpec resources for auditing Google Cloud Platform.\"\n\n[cascade]\n  [cascade.params]\n    platform = \"gcp\"\n\n[menu.gcp]\n  title = \"About GCP resources\"\n  identifier = \"inspec/resources/gcp/about\"\n  parent = \"inspec/resources/gcp\"\n  weight = 10\n+++\n\nChef InSpec has resources for auditing Google Cloud Platform (GCP).\n\n## Prerequisites\n\nTo use Chef InSpec GCP resources:\n\n- [Install and configure the Google Cloud SDK](https://cloud.google.com/sdk/docs/).\n\n## Initialize an InSpec profile for auditing GCP\n\nTo use the GCP resources, follow these steps:\n\n1. Create a [service account](https://cloud.google.com/docs/authentication/getting-started) with the scopes appropriate for your needs.\n\n1. Download the credential JSON file, for example `project-credentials.json`, to your workspace and activate your service account:\n\n    ```bash\n    gcloud auth activate-service-account --key-file project-credentials.json\n    ```\n\n1. Create an InSpec profile for testing GCP resources:\n\n    ```bash\n    inspec init profile --platform gcp <PROFILE_NAME>\n    ```\n\n1. Create controls using the resources listed below.\n\n1. Assuming the `inputs.yml` file contains your GCP project ID, you execute the profile can then be executed using the following command:\n\n    ```bash\n    inspec exec <PROFILE_NAME> --input-file=<PROFILE_NAME>/inputs.yml -t gcp://\n    ```\n\n## Google Cloud Platform resources\n\nThe following InSpec Google Cloud resources are available in this resource pack.\n\n{{< inspec_resources_filter >}}\n\n{{< inspec_resources section=\"gcp\" platform=\"gcp\" >}}\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_access_level.md",
    "content": "+++\ntitle = \"google_access_context_manager_access_level resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_access_level\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_access_level resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_access_level` InSpec audit resource to to test a Google Cloud AccessLevel resource.\n\n## Examples\n\n```ruby\npolicy_name = google_access_context_manager_access_policies(org_id: '190694428152').names.first\n\ndescribe google_access_context_manager_access_level(parent: policy_name, name: \"ip_subnet\") do\n  it { should exist }\n  its('title') { should cmp \"ip_subnet\" }\n  its('basic.conditions.size') { should cmp 1 }\n  its('basic.conditions.first.ip_subnetworks') { should include \"192.0.2.0/24\" }\nend\n\ndescribe google_access_context_manager_access_level(parent: policy_name, name: \"none\") do\n  it { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_access_level` resource:\n\n\n  * `title`: Human readable title. Must be unique within the Policy.\n\n  * `description`: Description of the AccessLevel and its use. Does not affect behavior.\n\n  * `basic`: A set of predefined conditions for the access level and a combining function.\n\n    * `combining_function`: How the conditions list should be combined to determine if a request is granted this AccessLevel. If AND is used, each Condition in conditions must be satisfied for the AccessLevel to be applied. If OR is used, at least one Condition in conditions must be satisfied for the AccessLevel to be applied.\n    Possible values:\n      * AND\n      * OR\n\n    * `conditions`: A set of requirements for the AccessLevel to be granted.\n\n      * `ip_subnetworks`: A list of CIDR block IP subnetwork specification. May be IPv4 or IPv6. Note that for a CIDR IP address block, the specified IP address portion must be properly truncated (i.e. all the host bits must be zero) or the input is considered malformed. For example, \"192.0.2.0/24\" is accepted but \"192.0.2.1/24\" is not. Similarly, for IPv6, \"2001:db8::/32\" is accepted whereas \"2001:db8::1/32\" is not. The originating IP of a request must be in one of the listed subnets in order for this Condition to be true. If empty, all IP addresses are allowed.\n\n      * `required_access_levels`: A list of other access levels defined in the same Policy, referenced by resource name. Referencing an AccessLevel which does not exist is an error. All access levels listed must be granted for the Condition to be true. Format: accessPolicies/{policy_id}/accessLevels/{short_name}\n\n      * `members`: An allowed list of members (users, service accounts). Using groups is not supported yet.  The signed-in user originating the request must be a part of one of the provided members. If not specified, a request may come from any user (logged in/not logged in, not present in any groups, etc.). Formats: `user:{emailid}`, `serviceAccount:{emailid}`\n\n      * `negate`: Whether to negate the Condition. If true, the Condition becomes a NAND over its non-empty fields, each field must be false for the Condition overall to be satisfied. Defaults to false.\n\n      * `device_policy`: Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed.\n\n        * `require_screen_lock`: Whether or not screenlock is required for the DevicePolicy to be true. Defaults to false.\n\n        * `allowed_encryption_statuses`: A list of allowed encryptions statuses. An empty list allows all statuses.\n\n        * `allowed_device_management_levels`: A list of allowed device management levels. An empty list allows all management levels.\n\n        * `os_constraints`: A list of allowed OS versions. An empty list allows all types and all versions.\n\n          * `minimum_version`: The minimum allowed OS version. If not set, any version of this OS satisfies the constraint. Format: \"major.minor.patch\" such as \"10.5.301\", \"9.2.1\".\n\n          * `os_type`: The operating system type of the device.\n          Possible values:\n            * OS_UNSPECIFIED\n            * DESKTOP_MAC\n            * DESKTOP_WINDOWS\n            * DESKTOP_LINUX\n            * DESKTOP_CHROME_OS\n\n        * `require_admin_approval`: Whether the device needs to be approved by the customer admin.\n\n        * `require_corp_owned`: Whether the device needs to be corp owned.\n\n      * `regions`: The request must originate from one of the provided countries/regions. Format: A valid ISO 3166-1 alpha-2 code.\n\n  * `custom`: Custom access level conditions are set using the Cloud Common Expression Language to represent the necessary conditions for the level to apply to a request.  See CEL spec at: https://github.com/google/cel-spec.\n\n    * `expr`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. This page details the objects and attributes that are used to the build the CEL expressions for  custom access levels - https://cloud.google.com/access-context-manager/docs/custom-access-level-spec.\n\n      * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n      * `title`: Title for the expression, i.e. a short string describing its purpose.\n\n      * `description`: Description of the expression\n\n      * `location`: String indicating the location of the expression for error reporting, e.g. a file name and a position in the file\n\n  * `parent`: Name of the parent access policy\n\n  * `name`: Name of the access level\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_access_levels.md",
    "content": "+++\ntitle = \"google_access_context_manager_access_levels resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_access_levels\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_access_levels resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_access_levels` InSpec audit resource to to test a Google Cloud AccessLevel resource.\n\n## Examples\n\n```ruby\npolicy_name = google_access_context_manager_access_policies(org_id: '190694428152').names.first\n\ndescribe google_access_context_manager_access_levels(parent: policy_name) do\n  its('names') { should include \"ip_subnet\" }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_access_levels` resource:\n\nSee [google_access_context_manager_access_level](google_access_context_manager_access_level) for more detailed information.\n\n  * `titles`: an array of `google_access_context_manager_access_level` title\n  * `descriptions`: an array of `google_access_context_manager_access_level` description\n  * `basics`: an array of `google_access_context_manager_access_level` basic\n  * `customs`: an array of `google_access_context_manager_access_level` custom\n  * `parents`: an array of `google_access_context_manager_access_level` parent\n  * `names`: an array of `google_access_context_manager_access_level` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_access_policies.md",
    "content": "+++\ntitle = \"google_access_context_manager_access_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_access_policies\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_access_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_access_policies` InSpec audit resource to test a Google Cloud AccessPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_access_context_manager_access_policies(org_id: '190694428152') do\n  its('count') { should be >= 1 }\n  its('titles') { should include 'policytitle' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_access_policies` resource:\n\nSee [google_access_context_manager_access_policy](google_access_context_manager_access_policy) for more detailed information.\n\n  * `names`: an array of `google_access_context_manager_access_policy` name\n  * `create_times`: an array of `google_access_context_manager_access_policy` create_time\n  * `update_times`: an array of `google_access_context_manager_access_policy` update_time\n  * `parents`: an array of `google_access_context_manager_access_policy` parent\n  * `titles`: an array of `google_access_context_manager_access_policy` title\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_access_policy.md",
    "content": "+++\ntitle = \"google_access_context_manager_access_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_access_policy\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_access_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_access_policy` InSpec audit resource to to test a Google Cloud AccessPolicy resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_access_context_manager_access_policies(org_id: '190694428152').names.each do |policy_name|\n    describe google_access_context_manager_access_policy(name: policy_name) do\n      it { should exist }\n      its('title') { should cmp 'policytitle' }\n      its('parent') { should match '190694428152' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_access_policy` resource:\n\n\n  * `name`: Resource name of the AccessPolicy. Format: accessPolicies/{policy_id}\n\n  * `create_time`: Time the AccessPolicy was created in UTC.\n\n  * `update_time`: Time the AccessPolicy was updated in UTC.\n\n  * `parent`: The parent of this AccessPolicy in the Cloud Resource Hierarchy. Format: organizations/{organization_id}\n\n  * `title`: Human readable title. Does not affect behavior.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_service_perimeter.md",
    "content": "+++\ntitle = \"google_access_context_manager_service_perimeter resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_service_perimeter\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_service_perimeter resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_service_perimeter` InSpec audit resource to to test a Google Cloud ServicePerimeter resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_access_context_manager_access_policies(org_id: '190694428152').names.each do |policy_name|\n    describe google_access_context_manager_service_perimeter(policy_name: policy_name, name: 'restrict_all') do\n      it { should exist }\n      its('title') { should cmp 'restrict_all' }\n      its('status.restricted_services') { should include 'storage.googleapis.com' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_service_perimeter` resource:\n\n\n  * `title`: Human readable title. Must be unique within the Policy.\n\n  * `description`: Description of the ServicePerimeter and its use. Does not affect behavior.\n\n  * `create_time`: Time the AccessPolicy was created in UTC.\n\n  * `update_time`: Time the AccessPolicy was updated in UTC.\n\n  * `perimeter_type`: Specifies the type of the Perimeter. There are two types: regular and bridge. Regular Service Perimeter contains resources, access levels, and restricted services. Every resource can be in at most ONE regular Service Perimeter.  In addition to being in a regular service perimeter, a resource can also be in zero or more perimeter bridges. A perimeter bridge only contains resources. Cross project operations are permitted if all effected resources share some perimeter (whether bridge or regular). Perimeter Bridge does not contain access levels or services: those are governed entirely by the regular perimeter that resource is in.  Perimeter Bridges are typically useful when building more complex topologies with many independent perimeters that need to share some data with a common perimeter, but should not be able to share data among themselves.\n  Possible values:\n    * PERIMETER_TYPE_REGULAR\n    * PERIMETER_TYPE_BRIDGE\n\n  * `status`: ServicePerimeter configuration. Specifies sets of resources, restricted services and access levels that determine perimeter content and boundaries.\n\n    * `resources`: A list of GCP resources that are inside of the service perimeter. Currently only projects are allowed. Format: projects/{project_number}\n\n    * `access_levels`: A list of AccessLevel resource names that allow resources within the ServicePerimeter to be accessed from the internet. AccessLevels listed must be in the same policy as this ServicePerimeter. Referencing a nonexistent AccessLevel is a syntax error. If no AccessLevel names are listed, resources within the perimeter can only be accessed via GCP calls with request origins within the perimeter. For Service Perimeter Bridge, must be empty.  Format: accessPolicies/{policy_id}/accessLevels/{access_level_name}\n\n    * `restricted_services`: GCP services that are subject to the Service Perimeter restrictions. Must contain a list of services. For example, if `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions.\n\n    * `vpc_accessible_services`: Specifies how APIs are allowed to communicate within the Service Perimeter.\n\n      * `enable_restriction`: Whether to restrict API calls within the Service Perimeter to the list of APIs specified in 'allowedServices'.\n\n      * `allowed_services`: The list of APIs usable within the Service Perimeter. Must be empty unless `enableRestriction` is True.\n\n  * `spec`: Proposed (or dry run) ServicePerimeter configuration. This configuration allows to specify and test ServicePerimeter configuration without enforcing actual access restrictions. Only allowed to be set when the `useExplicitDryRunSpec` flag is set.\n\n    * `resources`: A list of GCP resources that are inside of the service perimeter. Currently only projects are allowed. Format: projects/{project_number}\n\n    * `access_levels`: A list of AccessLevel resource names that allow resources within the ServicePerimeter to be accessed from the internet. AccessLevels listed must be in the same policy as this ServicePerimeter. Referencing a nonexistent AccessLevel is a syntax error. If no AccessLevel names are listed, resources within the perimeter can only be accessed via GCP calls with request origins within the perimeter. For Service Perimeter Bridge, must be empty.  Format: accessPolicies/{policy_id}/accessLevels/{access_level_name}\n\n    * `restricted_services`: GCP services that are subject to the Service Perimeter restrictions. Must contain a list of services. For example, if `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions.\n\n    * `vpc_accessible_services`: Specifies how APIs are allowed to communicate within the Service Perimeter.\n\n      * `enable_restriction`: Whether to restrict API calls within the Service Perimeter to the list of APIs specified in 'allowedServices'.\n\n      * `allowed_services`: The list of APIs usable within the Service Perimeter. Must be empty unless `enableRestriction` is True.\n\n  * `use_explicit_dry_run_spec`: Use explicit dry run spec flag. Ordinarily, a dry-run spec implicitly exists for all Service Perimeters, and that spec is identical to the status for those Service Perimeters. When this flag is set, it inhibits the generation of the implicit spec, thereby allowing the user to explicitly provide a configuration (\"spec\") to use in a dry-run version of the Service Perimeter. This allows the user to test changes to the enforced config (\"status\") without actually enforcing them. This testing is done through analyzing the differences between currently enforced and suggested restrictions. useExplicitDryRunSpec must bet set to True if any of the fields in the spec are set to non-default values.\n\n  * `parent`: The AccessPolicy this ServicePerimeter lives in. Format: accessPolicies/{policy_id}\n\n  * `name`: Resource name for the ServicePerimeter. The short_name component must begin with a letter and only include alphanumeric and '_'. Format: accessPolicies/{policy_id}/servicePerimeters/{short_name}\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_access_context_manager_service_perimeters.md",
    "content": "+++\ntitle = \"google_access_context_manager_service_perimeters resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_access_context_manager_service_perimeters\"\nidentifier = \"inspec/resources/gcp/google_access_context_manager_service_perimeters resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_access_context_manager_service_perimeters` InSpec audit resource to to test a Google Cloud ServicePerimeter resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_access_context_manager_access_policies(org_id: '190694428152').names.each do |policy_name|\n    describe google_access_context_manager_service_perimeters(policy_name: policy_name) do\n      its('names') { should include 'restrict_all' }\n      its('titles') { should include 'restrict_all' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_access_context_manager_service_perimeters` resource:\n\nSee [google_access_context_manager_service_perimeter](google_access_context_manager_service_perimeter) for more detailed information.\n\n  * `titles`: an array of `google_access_context_manager_service_perimeter` title\n  * `descriptions`: an array of `google_access_context_manager_service_perimeter` description\n  * `create_times`: an array of `google_access_context_manager_service_perimeter` create_time\n  * `update_times`: an array of `google_access_context_manager_service_perimeter` update_time\n  * `perimeter_types`: an array of `google_access_context_manager_service_perimeter` perimeter_type\n  * `statuses`: an array of `google_access_context_manager_service_perimeter` status\n  * `specs`: an array of `google_access_context_manager_service_perimeter` spec\n  * `use_explicit_dry_run_specs`: an array of `google_access_context_manager_service_perimeter` use_explicit_dry_run_spec\n  * `parents`: an array of `google_access_context_manager_service_perimeter` parent\n  * `names`: an array of `google_access_context_manager_service_perimeter` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_endpoint_attachment.md",
    "content": "+++\ntitle = \"google_apigee_endpoint_attachment resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_apigee_endpoint_attachment\"\nidentifier = \"inspec/resources/gcp/google_apigee_endpoint_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_endpoint_attachment` InSpec audit resource to test the properties of a Google Cloud EndpointAttachment resource.\n\n## Examples\n\n```ruby\ndescribe google_apigee_endpoint_attachment(name: ' value_name') do\n\tit { should exist }\n\tits('host') { should cmp 'value_host' }\n\tits('connection_state') { should cmp 'value_connectionstate' }\n\tits('service_attachment') { should cmp 'value_serviceattachment' }\n\tits('location') { should cmp 'value_location' }\n\tits('name') { should cmp 'value_name' }\n\tits('state') { should cmp 'value_state' }\n\nend\n\ndescribe google_apigee_endpoint_attachment(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_apigee_endpoint_attachment` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_endpoint_attachment` resource:\n\n\n  * `host`: Output only. Host that can be used in either the HTTP target endpoint directly or as the host in target server.\n\n  * `connection_state`: Output only. State of the endpoint attachment connection to the service attachment.\n  Possible values:\n    * CONNECTION_STATE_UNSPECIFIED\n    * UNAVAILABLE\n    * PENDING\n    * ACCEPTED\n    * REJECTED\n    * CLOSED\n    * FROZEN\n    * NEEDS_ATTENTION\n\n  * `service_attachment`: Format: projects/*/regions/*/serviceAttachments/*\n\n  * `location`: Required. Location of the endpoint attachment.\n\n  * `name`: Name of the endpoint attachment. Use the following structure in your request: `organizations/{org}/endpointAttachments/{endpoint_attachment}`\n\n  * `state`: Output only. State of the endpoint attachment. Values other than `ACTIVE` mean the resource is not ready to use.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * DELETING\n    * UPDATING\n\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_endpoint_attachments.md",
    "content": "+++\ntitle = \"google_apigee_endpoint_attachments resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_apigee_endpoint_attachments\"\nidentifier = \"inspec/resources/gcp/google_apigee_endpoint_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_endpoint_attachments` InSpec audit resource to test the properties of a Google Cloud EndpointAttachment resource.\n\n## Examples\n\n```ruby\n  describe google_apigee_endpoint_attachments() do\n    it { should exist }\n    its('hosts') { should include 'value_host' }\n    its('connection_states') { should include 'value_connectionstate' }\n    its('service_attachments') { should include 'value_serviceattachment' }\n    its('locations') { should include 'value_location' }\n    its('names') { should include 'value_name' }\n    its('states') { should include 'value_state' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_apigee_endpoint_attachments` resource:\n\nSee [google_apigee_endpoint_attachment](google_apigee_endpoint_attachment) for more detailed information.\n\n* `hosts`: an array of `google_apigee_endpoint_attachment` host\n* `connection_states`: an array of `google_apigee_endpoint_attachment` connection_state\n* `service_attachments`: an array of `google_apigee_endpoint_attachment` service_attachment\n* `locations`: an array of `google_apigee_endpoint_attachment` location\n* `names`: an array of `google_apigee_endpoint_attachment` name\n* `states`: an array of `google_apigee_endpoint_attachment` state\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_endpoint_attachments` resource:\n\nSee [google_apigee_endpoint_attachment](google_apigee_endpoint_attachment) for more detailed information.\n\n* `hosts`: an array of `google_apigee_endpoint_attachment` host\n* `connection_states`: an array of `google_apigee_endpoint_attachment` connection_state\n* `service_attachments`: an array of `google_apigee_endpoint_attachment` service_attachment\n* `locations`: an array of `google_apigee_endpoint_attachment` location\n* `names`: an array of `google_apigee_endpoint_attachment` name\n* `states`: an array of `google_apigee_endpoint_attachment` state\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization.md",
    "content": "+++\ntitle = \"google_apigee_organization resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization` InSpec audit resource to to test a Google Cloud Organization resource.\n\n## Examples\n\n```ruby\ndescribe google_apigee_organization(name: ' value_name') do\n\tit { should exist }\n\tits('api_consumer_data_encryption_key_name') { should cmp 'value_apiconsumerdataencryptionkeyname' }\n\tits('runtime_database_encryption_key_name') { should cmp 'value_runtimedatabaseencryptionkeyname' }\n\tits('runtime_type') { should cmp 'value_runtimetype' }\n\tits('type') { should cmp 'value_type' }\n\tits('authorized_network') { should cmp 'value_authorizednetwork' }\n\tits('project_id') { should cmp 'value_projectid' }\n\tits('description') { should cmp 'value_description' }\n\tits('ca_certificate') { should cmp 'value_cacertificate' }\n\tits('subscription_type') { should cmp 'value_subscriptiontype' }\n\tits('customer_name') { should cmp 'value_customername' }\n\tits('created_at') { should cmp 'value_createdat' }\n\tits('last_modified_at') { should cmp 'value_lastmodifiedat' }\n\tits('subscription_plan') { should cmp 'value_subscriptionplan' }\n\tits('state') { should cmp 'value_state' }\n\tits('name') { should cmp 'value_name' }\n\tits('control_plane_encryption_key_name') { should cmp 'value_controlplaneencryptionkeyname' }\n\tits('analytics_region') { should cmp 'value_analyticsregion' }\n\tits('api_consumer_data_location') { should cmp 'value_apiconsumerdatalocation' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('apigee_project_id') { should cmp 'value_apigeeprojectid' }\n\tits('expires_at') { should cmp 'value_expiresat' }\n\tits('billing_type') { should cmp 'value_billingtype' }\n\nend\n\ndescribe google_apigee_organization(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization` resource:\n\n\n  * `api_consumer_data_encryption_key_name`: Cloud KMS key name used for encrypting API consumer data. Required for US/EU regions when [BillingType](#BillingType) is `SUBSCRIPTION`. When [BillingType](#BillingType) is `EVALUATION` or the region is not US/EU, a Google-Managed encryption key will be used. Format: `projects/*/locations/*/keyRings/*/cryptoKeys/*`\n\n  * `runtime_database_encryption_key_name`: Cloud KMS key name used for encrypting the data that is stored and replicated across runtime instances. Update is not allowed after the organization is created. Required when [RuntimeType](#RuntimeType) is `CLOUD`. If not specified when [RuntimeType](#RuntimeType) is `TRIAL`, a Google-Managed encryption key will be used. For example: \"projects/foo/locations/us/keyRings/bar/cryptoKeys/baz\". **Note:** Not supported for Apigee hybrid.\n\n  * `environments`: Output only. List of environments in the Apigee organization.\n\n  * `runtime_type`: Required. Runtime type of the Apigee organization based on the Apigee subscription purchased.\n  Possible values:\n    * RUNTIME_TYPE_UNSPECIFIED\n    * CLOUD\n    * HYBRID\n\n  * `type`: Not used by Apigee.\n  Possible values:\n    * TYPE_UNSPECIFIED\n    * TYPE_TRIAL\n    * TYPE_PAID\n    * TYPE_INTERNAL\n\n  * `portal_disabled`: Configuration for the Portals settings.\n\n  * `authorized_network`: Compute Engine network used for Service Networking to be peered with Apigee runtime instances. See [Getting started with the Service Networking API](https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started). Valid only when [RuntimeType](#RuntimeType) is set to `CLOUD`. The value must be set before the creation of a runtime instance and can be updated only when there are no runtime instances. For example: `default`. Apigee also supports shared VPC (that is, the host network project is not the same as the one that is peering with Apigee). See [Shared VPC overview](https://cloud.google.com/vpc/docs/shared-vpc). To use a shared VPC network, use the following format: `projects/{host-project-id}/{region}/networks/{network-name}`. For example: `projects/my-sharedvpc-host/global/networks/mynetwork` **Note:** Not supported for Apigee hybrid.\n\n  * `project_id`: Output only. Project ID associated with the Apigee organization.\n\n  * `description`: Description of the Apigee organization.\n\n  * `ca_certificate`: Output only. Base64-encoded public certificate for the root CA of the Apigee organization. Valid only when [RuntimeType](#RuntimeType) is `CLOUD`.\n\n  * `subscription_type`: Output only. DEPRECATED: This will eventually be replaced by BillingType. Subscription type of the Apigee organization. Valid values include trial (free, limited, and for evaluation purposes only) or paid (full subscription has been purchased). See [Apigee pricing](https://cloud.google.com/apigee/pricing/).\n  Possible values:\n    * SUBSCRIPTION_TYPE_UNSPECIFIED\n    * PAID\n    * TRIAL\n\n  * `addons_config`: Add-on configurations for the Apigee organization.\n\n    * `integration_config`: Configuration for the Integration add-on.\n\n      * `enabled`: Flag that specifies whether the Integration add-on is enabled.\n\n    * `api_security_config`: Configurations of the API Security add-on.\n\n      * `enabled`: Flag that specifies whether the API security add-on is enabled.\n\n      * `expires_at`: Output only. Time at which the API Security add-on expires in in milliseconds since epoch. If unspecified, the add-on will never expire.\n\n    * `monetization_config`: Configuration for the Monetization add-on.\n\n      * `enabled`: Flag that specifies whether the Monetization add-on is enabled.\n\n    * `connectors_platform_config`: Configuration for the Connectors Platform add-on.\n\n      * `expires_at`: Output only. Time at which the Connectors Platform add-on expires in milliseconds since epoch. If unspecified, the add-on will never expire.\n\n      * `enabled`: Flag that specifies whether the Connectors Platform add-on is enabled.\n\n    * `analytics_config`: Configuration for the Analytics add-on.\n\n      * `expire_time_millis`: Output only. Time at which the Analytics add-on expires in milliseconds since epoch. If unspecified, the add-on will never expire.\n\n      * `state`: Output only. The state of the Analytics add-on.\n      Possible values:\n        * ADDON_STATE_UNSPECIFIED\n        * ENABLING\n        * ENABLED\n        * DISABLING\n        * DISABLED\n\n      * `enabled`: Whether the Analytics add-on is enabled.\n\n      * `update_time`: Output only. The latest update time.\n\n    * `advanced_api_ops_config`: Configuration for the Advanced API Ops add-on.\n\n      * `enabled`: Flag that specifies whether the Advanced API Ops add-on is enabled.\n\n  * `customer_name`: Not used by Apigee.\n\n  * `created_at`: Output only. Time that the Apigee organization was created in milliseconds since epoch.\n\n  * `last_modified_at`: Output only. Time that the Apigee organization was last modified in milliseconds since epoch.\n\n  * `subscription_plan`: Output only. Subscription plan that the customer has purchased. Output only.\n  Possible values:\n    * SUBSCRIPTION_PLAN_UNSPECIFIED\n    * SUBSCRIPTION_2021\n    * SUBSCRIPTION_2024\n\n  * `properties`: Message for compatibility with legacy Edge specification for Java Properties object in JSON.\n\n    * `property`: List of all properties in the object\n\n      * `value`: The property value\n\n      * `name`: The property key\n\n  * `state`: Output only. State of the organization. Values other than ACTIVE means the resource is not ready to use.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * DELETING\n    * UPDATING\n\n  * `name`: Output only. Name of the Apigee organization.\n\n  * `disable_vpc_peering`: Optional. Flag that specifies whether the VPC Peering through Private Google Access should be disabled between the consumer network and Apigee. Valid only when RuntimeType is set to CLOUD. Required if an authorizedNetwork on the consumer project is not provided, in which case the flag should be set to true. The value must be set before the creation of any Apigee runtime instance and can be updated only when there are no runtime instances. **Note:** Apigee will be deprecating the vpc peering model that requires you to provide 'authorizedNetwork', by making the non-peering model as the default way of provisioning Apigee organization in future. So, this will be a temporary flag to enable the transition. Not supported for Apigee hybrid.\n\n  * `control_plane_encryption_key_name`: Cloud KMS key name used for encrypting control plane data that is stored in a multi region. Required when [BillingType](#BillingType) is `SUBSCRIPTION`. When [BillingType](#BillingType) is `EVALUATION`, a Google-Managed encryption key will be used. Format: `projects/*/locations/*/keyRings/*/cryptoKeys/*`\n\n  * `analytics_region`: Required. DEPRECATED: This field will eventually be deprecated and replaced with a differently-named field. Primary Google Cloud region for analytics data storage. For valid values, see [Create an Apigee organization](https://cloud.google.com/apigee/docs/api-platform/get-started/create-org).\n\n  * `api_consumer_data_location`: This field is needed only for customers with control plane in US or EU. Apigee stores some control plane data only in single region. This field determines which single region Apigee should use. For example: \"us-west1\" when control plane is in US or \"europe-west2\" when control plane is in EU.\n\n  * `display_name`: Display name for the Apigee organization. Unused, but reserved for future use.\n\n  * `apigee_project_id`: Output only. Apigee Project ID associated with the organization. Use this project to allowlist Apigee in the Service Attachment when using private service connect with Apigee.\n\n  * `expires_at`: Output only. Time that the Apigee organization is scheduled for deletion.\n\n  * `attributes`: Not used by Apigee.\n\n  * `billing_type`: Billing type of the Apigee organization. See [Apigee pricing](https://cloud.google.com/apigee/pricing).\n  Possible values:\n    * BILLING_TYPE_UNSPECIFIED\n    * SUBSCRIPTION\n    * EVALUATION\n    * PAYG\n\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_api.md",
    "content": "+++\ntitle = \"google_apigee_organization_api resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_api\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_api resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_api` InSpec audit resource to to test a Google Cloud OrganizationApi resource.\n\n## Examples\n\n```ruby\ndescribe google_apigee_organization_api(parent: ' value_parent', name: ' value_name') do\n\tit { should exist }\n\tits('latest_revision_id') { should cmp 'value_latestrevisionid' }\n\tits('api_proxy_type') { should cmp 'value_apiproxytype' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_apigee_organization_api(parent: ' value_parent', name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_api` resource:\n\n\n  * `revision`: Output only. List of revisions defined for the API proxy.\n\n  * `latest_revision_id`: Output only. The id of the most recently created revision for this api proxy.\n\n  * `meta_data`: Metadata common to many entities in this API.\n\n    * `last_modified_at`: Time at which the API proxy was most recently modified, in milliseconds since epoch.\n\n    * `created_at`: Time at which the API proxy was created, in milliseconds since epoch.\n\n    * `sub_type`: The type of entity described\n\n  * `api_proxy_type`: Output only. The type of the API proxy.\n  Possible values:\n    * API_PROXY_TYPE_UNSPECIFIED\n    * PROGRAMMABLE\n    * CONFIGURABLE\n\n  * `read_only`: Output only. Whether this proxy is read-only. A read-only proxy cannot have new revisions created through calls to CreateApiProxyRevision. A proxy is read-only if it was generated by an archive.\n\n  * `labels`: User labels applied to this API Proxy.\n\n    * `additional_properties`:\n\n  * `name`: Output only. Name of the API proxy.\n\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_apis.md",
    "content": "+++\ntitle = \"google_apigee_organization_apis resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_apis\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_apis resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_apis` InSpec audit resource to to test a Google Cloud OrganizationApi resource.\n\n## Examples\n\n```ruby\n    describe google_apigee_organization_apis(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_apis` resource:\n\nSee [google_apigee_organization_api](google_apigee_organization_api) for more detailed information.\n\n  * `revisions`: an array of `google_apigee_organization_api` revision\n  * `latest_revision_ids`: an array of `google_apigee_organization_api` latest_revision_id\n  * `meta_data`: an array of `google_apigee_organization_api` meta_data\n  * `api_proxy_types`: an array of `google_apigee_organization_api` api_proxy_type\n  * `read_onlies`: an array of `google_apigee_organization_api` read_only\n  * `labels`: an array of `google_apigee_organization_api` labels\n  * `names`: an array of `google_apigee_organization_api` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_envgroup.md",
    "content": "+++\ntitle = \"google_apigee_organization_envgroup resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_envgroup\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_envgroup resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_envgroup` InSpec audit resource to to test a Google Cloud OrganizationEnvgroup resource.\n\n## Examples\n\n```\ndescribe google_apigee_organization_envgroup(name: ' value_name') do\n  it { should exist }\n  its('name') { should cmp 'value_name' }\n  its('hostnames') { should include 'value_hostname' }\n  its('last_modified_at') { should cmp 'value_lastmodifiedat' }\n  its('state') { should cmp 'value_state' }\n  its('created_at') { should cmp 'value_createdat' }\nend\n\ndescribe google_apigee_organization_envgroup(name: \"does_not_exit\") do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_envgroup` resource:\n\n  * `name`: ID of the environment group.\n\n  * `last_modified_at`: The time at which the environment group was last updated as milliseconds since epoch.\n\n  * `hostnames`: Host names for this environment group.\n\n  * `state`: State of the environment group. Values other than ACTIVE means the resource is not ready to use.\n\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * DELETING\n    * UPDATING\n\n  * `created_at`: The time at which the environment group was created as milliseconds since epoch.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_envgroup_attachment.md",
    "content": "+++\ntitle = \"google_apigee_organization_envgroup_attachment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_envgroup_attachment\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_envgroup_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_envgroup_attachment` InSpec audit resource to to test a Google Cloud OrganizationEnvgroupAttachment resource.\n\n## Examples\n\n```\ndescribe google_apigee_organization_envgroup_attachment(name: ' value_name') do\n\tit { should exist }\n\tits('created_at') { should cmp 'value_createdat' }\n\tits('environment') { should cmp 'value_environment' }\n\tits('environment_group_id') { should cmp 'value_environmentgroupid' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_apigee_organization_envgroup_attachment(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_envgroup_attachment` resource:\n\n\n  * `created_at`: The time at which the environment group attachment was created as milliseconds since epoch.\n\n  * `environment`: ID of the attached environment.\n\n  * `environment_group_id`: ID of the environment group.\n\n  * `name`: ID of the environment group attachment.\n\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_envgroup_attachments.md",
    "content": "+++\ntitle = \"google_apigee_organization_envgroup_attachments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_envgroup_attachments\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_envgroup_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_envgroup_attachments` InSpec audit resource to to test a Google Cloud OrganizationEnvgroupAttachment resource.\n\n## Examples\n\n```\n    describe google_apigee_organization_envgroup_attachments(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_envgroup_attachments` resource:\n\nSee [google_apigee_organization_envgroup_attachment](google_apigee_organization_envgroup_attachment) for more detailed information.\n\n  * `created_ats`: an array of `google_apigee_organization_envgroup_attachment` created_at\n  * `environments`: an array of `google_apigee_organization_envgroup_attachment` environment\n  * `environment_group_ids`: an array of `google_apigee_organization_envgroup_attachment` environment_group_id\n  * `names`: an array of `google_apigee_organization_envgroup_attachment` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_envgroups.md",
    "content": "+++\ntitle = \"google_apigee_organization_envgroups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_envgroups\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_envgroups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_envgroups` InSpec audit resource to to test a Google Cloud OrganizationEnvgroup resource.\n\n## Examples\n\n```\n    describe google_apigee_organization_envgroups(parent: 'value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_envgroups` resource:\n\nSee [google_apigee_organization_envgroup](google_apigee_organization_envgroup) for more detailed information.\n\n  * `names`: an array of `google_apigee_organization_envgroup` name\n  * `last_modified_ats`: an array of `google_apigee_organization_envgroup` last_modified_at\n  * `hostnames`: an array of `google_apigee_organization_envgroup` hostnames\n  * `states`: an array of `google_apigee_organization_envgroup` state\n  * `created_ats`: an array of `google_apigee_organization_envgroup` created_at\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_instance_attachment.md",
    "content": "+++\ntitle = \"google_apigee_organization_instance_attachment resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_instance_attachment\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_instance_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_instance_attachment` InSpec audit resource to test the properties of a Google Cloud OrganizationInstanceAttachment resource.\n\n## Examples\n\n```ruby\ndescribe google_apigee_organization_instance_attachment(parent:'value_parent', name:'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('environment') { should cmp 'value_environment' }\n\tits('created_at') { should cmp 'value_createdat' }\nend\n\ndescribe google_apigee_organization_instance_attachment(parent:'value_parent',name: \"does-not-exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_apigee_organization_instance_attachment` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_instance_attachment` resource:\n\n\n  * `name`: Output only. ID of the attachment.\n\n  * `environment`: ID of the attached environment.\n\n  * `created_at`: Output only. Time the attachment was created in milliseconds since epoch.\n\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organization_instance_attachments.md",
    "content": "+++\ntitle = \"google_apigee_organization_instance_attachments resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_apigee_organization_instance_attachments\"\nidentifier = \"inspec/resources/gcp/google_apigee_organization_instance_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organization_instance_attachments` InSpec audit resource to test the properties of a Google Cloud OrganizationInstanceAttachment resource.\n\n## Examples\n\n```ruby\n  describe google_apigee_organization_instance_attachments(parent: 'value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n\t  its('environments') { should include 'value_environment' }\n\t  its('created_ats') { should include 'value_createdat' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_apigee_organization_instance_attachments` resource:\n\nSee [google_apigee_organization_instance_attachment](google_apigee_organization_instance_attachment) for more detailed information.\n\n* `names`: an array of `google_apigee_organization_instance_attachment` name\n* `environments`: an array of `google_apigee_organization_instance_attachment` environment\n* `created_ats`: an array of `google_apigee_organization_instance_attachment` created_at\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organization_instance_attachments` resource:\n\nSee [google_apigee_organization_instance_attachment](google_apigee_organization_instance_attachment) for more detailed information.\n\n* `names`: an array of `google_apigee_organization_instance_attachment` name\n* `environments`: an array of `google_apigee_organization_instance_attachment` environment\n* `created_ats`: an array of `google_apigee_organization_instance_attachment` created_at\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_apigee_organizations.md",
    "content": "+++\ntitle = \"google_apigee_organizations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_apigee_organizations\"\nidentifier = \"inspec/resources/gcp/google_apigee_organizations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_apigee_organizations` InSpec audit resource to to test a Google Cloud Organization resource.\n\n## Examples\n\n```ruby\n    describe google_apigee_organizations(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_apigee_organizations` resource:\n\nSee [google_apigee_organization](google_apigee_organization) for more detailed information.\n\n  * `api_consumer_data_encryption_key_names`: an array of `google_apigee_organization` api_consumer_data_encryption_key_name\n  * `runtime_database_encryption_key_names`: an array of `google_apigee_organization` runtime_database_encryption_key_name\n  * `environments`: an array of `google_apigee_organization` environments\n  * `runtime_types`: an array of `google_apigee_organization` runtime_type\n  * `types`: an array of `google_apigee_organization` type\n  * `portal_disableds`: an array of `google_apigee_organization` portal_disabled\n  * `authorized_networks`: an array of `google_apigee_organization` authorized_network\n  * `project_ids`: an array of `google_apigee_organization` project_id\n  * `descriptions`: an array of `google_apigee_organization` description\n  * `ca_certificates`: an array of `google_apigee_organization` ca_certificate\n  * `subscription_types`: an array of `google_apigee_organization` subscription_type\n  * `addons_configs`: an array of `google_apigee_organization` addons_config\n  * `customer_names`: an array of `google_apigee_organization` customer_name\n  * `created_ats`: an array of `google_apigee_organization` created_at\n  * `last_modified_ats`: an array of `google_apigee_organization` last_modified_at\n  * `subscription_plans`: an array of `google_apigee_organization` subscription_plan\n  * `properties`: an array of `google_apigee_organization` properties\n  * `states`: an array of `google_apigee_organization` state\n  * `names`: an array of `google_apigee_organization` name\n  * `disable_vpc_peerings`: an array of `google_apigee_organization` disable_vpc_peering\n  * `control_plane_encryption_key_names`: an array of `google_apigee_organization` control_plane_encryption_key_name\n  * `analytics_regions`: an array of `google_apigee_organization` analytics_region\n  * `api_consumer_data_locations`: an array of `google_apigee_organization` api_consumer_data_location\n  * `display_names`: an array of `google_apigee_organization` display_name\n  * `apigee_project_ids`: an array of `google_apigee_organization` apigee_project_id\n  * `expires_ats`: an array of `google_apigee_organization` expires_at\n  * `attributes`: an array of `google_apigee_organization` attributes\n  * `billing_types`: an array of `google_apigee_organization` billing_type\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Apigee API](https://console.cloud.google.com/apis/library/apigee.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_appengine_standard_app_version.md",
    "content": "+++\ntitle = \"google_appengine_standard_app_version resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_appengine_standard_app_version\"\nidentifier = \"inspec/resources/gcp/google_appengine_standard_app_version resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_appengine_standard_app_version` InSpec audit resource to to test a Google Cloud StandardAppVersion resource.\n\n## Examples\n\n```ruby\ndescribe google_appengine_standard_app_version(project: 'chef-gcp-inspec', location: 'europe-west2', version_id: 'v2', service: 'default') do\n  it { should exist }\n  its('version_id') { should eq 'v2' }\n  its('runtime') { should eq 'nodejs10' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_appengine_standard_app_version` resource:\n\n\n  * `name`: Full path to the Version resource in the API. Example, \"v1\".\n\n  * `version_id`: Relative name of the version within the service. For example, `v1`. Version names can contain only lowercase letters, numbers, or hyphens. Reserved names,\"default\", \"latest\", and any name with the prefix \"ah-\".\n\n  * `runtime`: Desired runtime. Example python27.\n\n  * `threadsafe`: Whether multiple requests can be dispatched to this version at once.\n\n  * `vpc_access_connector`: Enables VPC connectivity for standard apps.\n\n    * `name`: Full Serverless VPC Access Connector name e.g. /projects/my-project/locations/us-central1/connectors/c1.\n\n  * `inbound_services`: A list of the types of messages that this application is able to receive.\n\n  * `instance_class`: Instance class that is used to run this version. Valid values are AutomaticScaling: F1, F2, F4, F4_1G BasicScaling or ManualScaling: B1, B2, B4, B4_1G, B8 Defaults to F1 for AutomaticScaling and B2 for ManualScaling and BasicScaling. If no scaling is specified, AutomaticScaling is chosen.\n\n  * `automatic_scaling`: Automatic scaling is based on request rate, response latencies, and other application metrics.\n\n    * `max_concurrent_requests`: Number of concurrent requests an automatic scaling instance can accept before the scheduler spawns a new instance.  Defaults to a runtime-specific value.\n\n    * `max_idle_instances`: Maximum number of idle instances that should be maintained for this version.\n\n    * `max_pending_latency`: Maximum amount of time that a request should wait in the pending queue before starting a new instance to handle it. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n    * `min_idle_instances`: Minimum number of idle instances that should be maintained for this version. Only applicable for the default version of a service.\n\n    * `min_pending_latency`: Minimum amount of time a request should wait in the pending queue before starting a new instance to handle it. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n    * `standard_scheduler_settings`: Scheduler settings for standard environment.\n\n      * `target_cpu_utilization`: Target CPU utilization ratio to maintain when scaling. Should be a value in the range [0.50, 0.95], zero, or a negative value.\n\n      * `target_throughput_utilization`: Target throughput utilization ratio to maintain when scaling. Should be a value in the range [0.50, 0.95], zero, or a negative value.\n\n      * `min_instances`: Minimum number of instances to run for this version. Set to zero to disable minInstances configuration.\n\n      * `max_instances`: Maximum number of instances to run for this version. Set to zero to disable maxInstances configuration.\n\n  * `basic_scaling`: Basic scaling creates instances when your application receives requests. Each instance will be shut down when the application becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.\n\n    * `idle_timeout`: Duration of time after the last request that an instance must wait before the instance is shut down. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\". Defaults to 900s.\n\n    * `max_instances`: Maximum number of instances to create for this version. Must be in the range [1.0, 200.0].\n\n  * `manual_scaling`: A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.\n\n    * `instances`: Number of instances to assign to the service at the start.  **Note:** When managing the number of instances at runtime through the App Engine Admin API or the (now deprecated) Python 2 Modules API set_num_instances() you must use `lifecycle.ignore_changes = [\"manual_scaling\"[0].instances]` to prevent drift detection.\n\n\n## GCP permissions\n\nEnsure the [App Engine Admin API](https://console.cloud.google.com/apis/library/appengine.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_appengine_standard_app_versions.md",
    "content": "+++\ntitle = \"google_appengine_standard_app_versions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_appengine_standard_app_versions\"\nidentifier = \"inspec/resources/gcp/google_appengine_standard_app_versions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_appengine_standard_app_versions` InSpec audit resource to to test a Google Cloud StandardAppVersion resource.\n\n## Examples\n\n```ruby\ndescribe google_appengine_standard_app_versions(project: 'chef-gcp-inspec', location: 'europe-west2',service: 'default') do\n  its('runtimes') { should include 'nodejs10' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_appengine_standard_app_versions` resource:\n\nSee [google_appengine_standard_app_version](google_appengine_standard_app_version) for more detailed information.\n\n  * `names`: an array of `google_appengine_standard_app_version` name\n  * `version_ids`: an array of `google_appengine_standard_app_version` version_id\n  * `runtimes`: an array of `google_appengine_standard_app_version` runtime\n  * `threadsaves`: an array of `google_appengine_standard_app_version` threadsafe\n  * `vpc_access_connectors`: an array of `google_appengine_standard_app_version` vpc_access_connector\n  * `inbound_services`: an array of `google_appengine_standard_app_version` inbound_services\n  * `instance_classes`: an array of `google_appengine_standard_app_version` instance_class\n  * `automatic_scalings`: an array of `google_appengine_standard_app_version` automatic_scaling\n  * `basic_scalings`: an array of `google_appengine_standard_app_version` basic_scaling\n  * `manual_scalings`: an array of `google_appengine_standard_app_version` manual_scaling\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [App Engine Admin API](https://console.cloud.google.com/apis/library/appengine.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_artifactregistry_project_location_repositories.md",
    "content": "+++\ntitle = \"google_artifactregistry_project_location_repositories resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_artifactregistry_project_location_repositories\"\nidentifier = \"inspec/resources/gcp/google_artifactregistry_project_location_repositories resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_artifactregistry_project_location_repositories` InSpec audit resource to to test a Google Cloud ProjectLocationRepository resource.\n\n## Examples\n\n```ruby\n    describe google_artifactregistry_project_location_repositories(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_artifactregistry_project_location_repositories` resource:\n\nSee [google_artifactregistry_project_location_repository](google_artifactregistry_project_location_repository) for more detailed information.\n\n  * `maven_configs`: an array of `google_artifactregistry_project_location_repository` maven_config\n  * `docker_configs`: an array of `google_artifactregistry_project_location_repository` docker_config\n  * `virtual_repository_configs`: an array of `google_artifactregistry_project_location_repository` virtual_repository_config\n  * `remote_repository_configs`: an array of `google_artifactregistry_project_location_repository` remote_repository_config\n  * `names`: an array of `google_artifactregistry_project_location_repository` name\n  * `formats`: an array of `google_artifactregistry_project_location_repository` format\n  * `descriptions`: an array of `google_artifactregistry_project_location_repository` description\n  * `labels`: an array of `google_artifactregistry_project_location_repository` labels\n  * `create_times`: an array of `google_artifactregistry_project_location_repository` create_time\n  * `update_times`: an array of `google_artifactregistry_project_location_repository` update_time\n  * `kms_key_names`: an array of `google_artifactregistry_project_location_repository` kms_key_name\n  * `modes`: an array of `google_artifactregistry_project_location_repository` mode\n  * `cleanup_policies`: an array of `google_artifactregistry_project_location_repository` cleanup_policies\n  * `size_bytes`: an array of `google_artifactregistry_project_location_repository` size_bytes\n  * `satisfies_pzs`: an array of `google_artifactregistry_project_location_repository` satisfies_pzs\n  * `cleanup_policy_dry_runs`: an array of `google_artifactregistry_project_location_repository` cleanup_policy_dry_run\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Artifact Registry API](https://console.cloud.google.com/apis/library/artifactregistry.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_artifactregistry_project_location_repository.md",
    "content": "+++\ntitle = \"google_artifactregistry_project_location_repository resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_artifactregistry_project_location_repository\"\nidentifier = \"inspec/resources/gcp/google_artifactregistry_project_location_repository resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_artifactregistry_project_location_repository` InSpec audit resource to to test a Google Cloud ProjectLocationRepository resource.\n\n## Examples\n\n```ruby\ndescribe google_artifactregistry_project_location_repository(name: ' value_name') do\n\tit { should exist }\n\nend\n\ndescribe google_artifactregistry_project_location_repository(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_artifactregistry_project_location_repository` resource:\n\n\n  * `maven_config`: MavenRepositoryConfig is maven related repository details. Provides additional configuration details for repositories of the maven format type.\n\n    * `allow_snapshot_overwrites`: The repository with this flag will allow publishing the same snapshot versions.\n\n    * `version_policy`: Version policy defines the versions that the registry will accept.\n    Possible values:\n      * VERSION_POLICY_UNSPECIFIED\n      * RELEASE\n      * SNAPSHOT\n\n  * `docker_config`: DockerRepositoryConfig is docker related repository details. Provides additional configuration details for repositories of the docker format type.\n\n    * `immutable_tags`: The repository which enabled this flag prevents all tags from being modified, moved or deleted. This does not prevent tags from being created.\n\n  * `virtual_repository_config`: Virtual repository configuration.\n\n    * `upstream_policies`: Policies that configure the upstream artifacts distributed by the Virtual Repository. Upstream policies cannot be set on a standard repository.\n\n      * `id`: The user-provided ID of the upstream policy.\n\n      * `repository`: A reference to the repository resource, for example: `projects/p1/locations/us-central1/repositories/repo1`.\n\n      * `priority`: Entries with a greater priority value take precedence in the pull order.\n\n  * `remote_repository_config`: Remote repository configuration.\n\n    * `docker_repository`: Configuration for a Docker remote repository.\n\n      * `public_repository`: One of the publicly available Docker repositories supported by Artifact Registry.\n      Possible values:\n        * PUBLIC_REPOSITORY_UNSPECIFIED\n        * DOCKER_HUB\n\n    * `maven_repository`: Configuration for a Maven remote repository.\n\n      * `public_repository`: One of the publicly available Maven repositories supported by Artifact Registry.\n      Possible values:\n        * PUBLIC_REPOSITORY_UNSPECIFIED\n        * MAVEN_CENTRAL\n\n    * `npm_repository`: Configuration for a Npm remote repository.\n\n      * `public_repository`: One of the publicly available Npm repositories supported by Artifact Registry.\n      Possible values:\n        * PUBLIC_REPOSITORY_UNSPECIFIED\n        * NPMJS\n\n    * `python_repository`: Configuration for a Python remote repository.\n\n      * `public_repository`: One of the publicly available Python repositories supported by Artifact Registry.\n      Possible values:\n        * PUBLIC_REPOSITORY_UNSPECIFIED\n        * PYPI\n\n    * `apt_repository`: Configuration for an Apt remote repository.\n\n      * `public_repository`: Publicly available Apt repositories constructed from a common repository base and a custom repository path.\n\n        * `repository_base`: A common public repository base for Apt.\n        Possible values:\n          * REPOSITORY_BASE_UNSPECIFIED\n          * DEBIAN\n          * UBUNTU\n          * DEBIAN_SNAPSHOT\n\n        * `repository_path`: A custom field to define a path to a specific repository from the base.\n\n    * `yum_repository`: Configuration for a Yum remote repository.\n\n      * `public_repository`: Publicly available Yum repositories constructed from a common repository base and a custom repository path.\n\n        * `repository_base`: A common public repository base for Yum.\n        Possible values:\n          * REPOSITORY_BASE_UNSPECIFIED\n          * CENTOS\n          * CENTOS_DEBUG\n          * CENTOS_VAULT\n          * CENTOS_STREAM\n          * ROCKY\n          * EPEL\n\n        * `repository_path`: A custom field to define a path to a specific repository from the base.\n\n    * `description`: The description of the remote source.\n\n    * `upstream_credentials`: The credentials to access the remote repository.\n\n      * `username_password_credentials`: Username and password credentials.\n\n        * `username`: The username to access the remote repository.\n\n        * `password_secret_version`: The Secret Manager key version that holds the password to access the remote repository. Must be in the format of `projects/{project}/secrets/{secret}/versions/{version}`.\n\n  * `name`: The name of the repository, for example: `projects/p1/locations/us-central1/repositories/repo1`.\n\n  * `format`: Optional. The format of packages that are stored in the repository.\n  Possible values:\n    * FORMAT_UNSPECIFIED\n    * DOCKER\n    * MAVEN\n    * NPM\n    * APT\n    * YUM\n    * GOOGET\n    * PYTHON\n    * KFP\n    * GO\n\n  * `description`: The user-provided description of the repository.\n\n  * `labels`: Labels with user-defined metadata. This field may contain up to 64 entries. Label keys and values may be no longer than 63 characters. Label keys must begin with a lowercase letter and may only contain lowercase letters, numeric characters, underscores, and dashes.\n\n    * `additional_properties`: \n\n  * `create_time`: Output only. The time when the repository was created.\n\n  * `update_time`: Output only. The time when the repository was last updated.\n\n  * `kms_key_name`: The Cloud KMS resource name of the customer managed encryption key that's used to encrypt the contents of the Repository. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. This value may not be changed after the Repository has been created.\n\n  * `mode`: Optional. The mode of the repository.\n  Possible values:\n    * MODE_UNSPECIFIED\n    * STANDARD_REPOSITORY\n    * VIRTUAL_REPOSITORY\n    * REMOTE_REPOSITORY\n\n  * `cleanup_policies`: Optional. Cleanup policies for this repository. Cleanup policies indicate when certain package versions can be automatically deleted. Map keys are policy IDs supplied by users during policy creation. They must unique within a repository and be under 128 characters in length.\n\n    * `additional_properties`: Artifact policy configuration for repository cleanup policies.\n\n  * `size_bytes`: Output only. The size, in bytes, of all artifact storage in this repository. Repositories that are generally available or in public preview use this to calculate storage costs.\n\n  * `satisfies_pzs`: Output only. If set, the repository satisfies physical zone separation.\n\n  * `cleanup_policy_dry_run`: Optional. If true, the cleanup pipeline is prevented from deleting versions in this repository.\n\n\n## GCP permissions\n\nEnsure the [Artifact Registry API](https://console.cloud.google.com/apis/library/artifactregistry.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigquery_dataset.md",
    "content": "+++\ntitle = \"google_bigquery_dataset resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_bigquery_dataset\"\nidentifier = \"inspec/resources/gcp/google_bigquery_dataset resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigquery_dataset` InSpec audit resource to to test a Google Cloud Dataset resource.\n\n## Examples\n\n```ruby\ndescribe google_bigquery_dataset(project: 'chef-gcp-inspec', name: 'inspec_gcp_dataset') do\n  it { should exist }\n\n  its('friendly_name') { should eq 'A BigQuery dataset test' }\n  its('location') { should eq 'EU' }\n  its('description') { should eq 'Test BigQuery dataset description' }\n  its('name') { should eq 'inspec_gcp_dataset' }\n  its('default_table_expiration_ms') { should cmp '3600000' }\nend\n\ndescribe.one do\n  google_bigquery_dataset(project: 'chef-gcp-inspec', name: 'inspec_gcp_dataset').access.each do |dataset_access|\n    describe dataset_access do\n      its('role') { should eq 'WRITER' }\n      its('special_group') { should eq 'projectWriters' }\n    end\n  end\nend\n\ndescribe google_bigquery_dataset(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_bigquery_dataset` resource:\n\n\n  * `access`: An array of objects that define dataset access for one or more entities.\n\n    * `domain`: A domain to grant access to. Any users signed in with the domain specified will be granted the specified access\n\n    * `group_by_email`: An email address of a Google Group to grant access to.\n\n    * `role`: Describes the rights granted to the user specified by the other member of the access object. Basic, predefined, and custom roles are supported. Predefined roles that have equivalent basic roles are swapped by the API to their basic counterparts. See [official docs](https://cloud.google.com/bigquery/docs/access-control).\n\n    * `special_group`: A special group to grant access to. Possible values include:   * `projectOwners`: Owners of the enclosing project.   * `projectReaders`: Readers of the enclosing project.   * `projectWriters`: Writers of the enclosing project.   * `allAuthenticatedUsers`: All authenticated BigQuery users.\n\n    * `user_by_email`: An email address of a user to grant access to. For example: fred@example.com\n\n    * `iam_member`: Some other type of member that appears in the IAM Policy but isn't a user, group, domain, or special group. For example: `allUsers`\n\n    * `view`: A view from a different dataset to grant access to. Queries executed against that view will have read access to tables in this dataset. The role field is not required when this field is set. If that view is updated by any user, access to the view needs to be granted again via an update operation.\n\n      * `dataset_id`: The ID of the dataset containing this table.\n\n      * `project_id`: The ID of the project containing this table.\n\n      * `table_id`: The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.\n\n  * `creation_time`: The time when this dataset was created, in milliseconds since the epoch.\n\n  * `dataset_reference`: A reference that identifies the dataset.\n\n    * `dataset_id`: A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.\n\n    * `project_id`: The ID of the project containing this dataset.\n\n  * `default_table_expiration_ms`: The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour).   Once this property is set, all newly-created tables in the dataset will have an `expirationTime` property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the `expirationTime` for a given table is reached, that table will be deleted automatically. If a table's `expirationTime` is modified or removed before the table expires, or if you provide an explicit `expirationTime` when creating a table, that value takes precedence over the default expiration time indicated by this property.\n\n  * `default_partition_expiration_ms`: The default partition expiration for all partitioned tables in the dataset, in milliseconds.   Once this property is set, all newly-created partitioned tables in the dataset will have an `expirationMs` property in the `timePartitioning` settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of `defaultTableExpirationMs` for partitioned tables: only one of `defaultTableExpirationMs` and `defaultPartitionExpirationMs` will be used for any new partitioned table. If you provide an explicit `timePartitioning.expirationMs` when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.\n\n  * `description`: A user-friendly description of the dataset\n\n  * `etag`: A hash of the resource.\n\n  * `friendly_name`: A descriptive name for the dataset\n\n  * `id`: The fully-qualified unique name of the dataset in the format projectId:datasetId. The dataset name without the project name is given in the datasetId field\n\n  * `labels`: The labels associated with this dataset. You can use these to organize and group your datasets\n\n  * `last_modified_time`: The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.\n\n  * `location`: The geographic location where the dataset should reside. See [official docs](https://cloud.google.com/bigquery/docs/dataset-locations).   There are two types of locations, regional or multi-regional. A regional location is a specific geographic place, such as Tokyo, and a multi-regional location is a large geographic area, such as the United States, that contains at least two geographic places.   The default value is multi-regional location `US`. Changing this forces a new resource to be created.\n\n  * `default_encryption_configuration`: The default encryption key for all tables in the dataset. Once this property is set, all newly-created partitioned tables in the dataset will have encryption key set to this value, unless table creation request (or query) overrides the key.\n\n    * `kms_key_name`: Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.\n\n\n## GCP permissions\n\nEnsure the [BigQuery API](https://console.cloud.google.com/apis/library/bigquery-json.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigquery_datasets.md",
    "content": "+++\ntitle = \"google_bigquery_datasets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_bigquery_datasets\"\nidentifier = \"inspec/resources/gcp/google_bigquery_datasets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigquery_datasets` InSpec audit resource to to test a Google Cloud Dataset resource.\n\n## Examples\n\n```ruby\ndescribe google_bigquery_datasets(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('friendly_names') { should include 'A BigQuery dataset test' }\n  its('locations') { should include 'EU' }\nend\n\ngoogle_bigquery_datasets(project: 'chef-gcp-inspec').ids.each do |name|\n  google_bigquery_dataset(project: 'chef-gcp-inspec', name: name.split(':').last).access.each do |access|\n    describe access do\n      # No bigquery dataset should allow access to allUsers\n      its('iam_member') { should_not cmp 'allUsers' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_bigquery_datasets` resource:\n\nSee [google_bigquery_dataset](google_bigquery_dataset) for more detailed information.\n\n  * `dataset_references`: an array of `google_bigquery_dataset` dataset_reference\n  * `default_partition_expiration_ms`: an array of `google_bigquery_dataset` default_partition_expiration_ms\n  * `etags`: an array of `google_bigquery_dataset` etag\n  * `friendly_names`: an array of `google_bigquery_dataset` friendly_name\n  * `ids`: an array of `google_bigquery_dataset` id\n  * `labels`: an array of `google_bigquery_dataset` labels\n  * `locations`: an array of `google_bigquery_dataset` location\n  * `default_encryption_configurations`: an array of `google_bigquery_dataset` default_encryption_configuration\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [BigQuery API](https://console.cloud.google.com/apis/library/bigquery-json.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigquery_table.md",
    "content": "+++\ntitle = \"google_bigquery_table resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_bigquery_table\"\nidentifier = \"inspec/resources/gcp/google_bigquery_table resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigquery_table` InSpec audit resource to to test a Google Cloud Table resource.\n\n## Examples\n\n```ruby\ndescribe google_bigquery_table(project: 'chef-gcp-inspec', dataset: 'inspec_gcp_dataset', name: 'inspec_gcp_bigquery_table') do\n  it { should exist }\n\n  its('expiration_time') { should cmp '1738882264000' }\n  its('time_partitioning.type') { should eq 'DAY' }\n  its('description') { should eq 'A BigQuery table' }\nend\n\ndescribe google_bigquery_table(project: 'chef-gcp-inspec', dataset: 'inspec_gcp_dataset', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_bigquery_table` resource:\n\n\n  * `table_reference`: Reference describing the ID of this table\n\n    * `dataset_id`: The ID of the dataset containing this table\n\n    * `project_id`: The ID of the project containing this table\n\n    * `table_id`: The ID of the the table\n\n  * `clustering`: One or more fields on which data should be clustered. Only top-level, non-repeated, simple-type fields are supported. When you cluster a table using multiple columns, the order of columns you specify is important. The order of the specified columns determines the sort order of the data.\n\n  * `creation_time`: The time when this dataset was created, in milliseconds since the epoch.\n\n  * `description`: A user-friendly description of the dataset\n\n  * `friendly_name`: A descriptive name for this table\n\n  * `id`: An opaque ID uniquely identifying the table.\n\n  * `labels`: The labels associated with this dataset. You can use these to organize and group your datasets\n\n  * `last_modified_time`: The time when this table was last modified, in milliseconds since the epoch.\n\n  * `location`: The geographic location where the table resides. This value is inherited from the dataset.\n\n  * `name`: Name of the table\n\n  * `num_bytes`: The size of this table in bytes, excluding any data in the streaming buffer.\n\n  * `num_long_term_bytes`: The number of bytes in the table that are considered \"long-term storage\".\n\n  * `num_rows`: The number of rows of data in this table, excluding any data in the streaming buffer.\n\n  * `require_partition_filter`: If set to true, queries over this table require a partition filter that can be used for partition elimination to be specified.\n\n  * `type`: Describes the table type\n  Possible values:\n    * TABLE\n    * VIEW\n    * EXTERNAL\n\n  * `view`: The view definition.\n\n    * `use_legacy_sql`: Specifies whether to use BigQuery's legacy SQL for this view\n\n    * `user_defined_function_resources`: Describes user-defined function resources used in the query.\n\n      * `inline_code`: An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.\n\n      * `resource_uri`: A code resource to load from a Google Cloud Storage URI (gs://bucket/path).\n\n  * `time_partitioning`: If specified, configures time-based partitioning for this table.\n\n    * `expiration_ms`: Number of milliseconds for which to keep the storage for a partition.\n\n    * `field`: If not set, the table is partitioned by pseudo column, referenced via either '_PARTITIONTIME' as TIMESTAMP type, or '_PARTITIONDATE' as DATE type. If field is specified, the table is instead partitioned by this field. The field must be a top-level TIMESTAMP or DATE field. Its mode must be NULLABLE or REQUIRED.\n\n    * `type`: The only type supported is DAY, which will generate one partition per day.\n    Possible values:\n      * DAY\n\n  * `streaming_buffer`: Contains information regarding this table's streaming buffer, if one is present. This field will be absent if the table is not being streamed to or if there is no data in the streaming buffer.\n\n    * `estimated_bytes`: A lower-bound estimate of the number of bytes currently in the streaming buffer.\n\n    * `estimated_rows`: A lower-bound estimate of the number of rows currently in the streaming buffer.\n\n    * `oldest_entry_time`: Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.\n\n  * `schema`: Describes the schema of this table\n\n    * `fields`: Describes the fields in a table.\n\n      * `description`: The field description. The maximum length is 1,024 characters.\n\n      * `fields`: Describes the nested schema fields if the type property is set to RECORD.\n\n      * `mode`: The field mode\n      Possible values:\n        * NULLABLE\n        * REQUIRED\n        * REPEATED\n\n      * `name`: The field name\n\n      * `type`: The field data type\n      Possible values:\n        * STRING\n        * BYTES\n        * INTEGER\n        * FLOAT\n        * TIMESTAMP\n        * DATE\n        * TIME\n        * DATETIME\n        * RECORD\n\n  * `encryption_configuration`: Custom encryption configuration\n\n    * `kms_key_name`: Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.\n\n  * `expiration_time`: The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely.\n\n  * `external_data_configuration`: Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.\n\n    * `autodetect`: Try to detect schema and format options automatically. Any option specified explicitly will be honored.\n\n    * `compression`: The compression type of the data source\n    Possible values:\n      * GZIP\n      * NONE\n\n    * `ignore_unknown_values`: Indicates if BigQuery should allow extra values that are not represented in the table schema\n\n    * `max_bad_records`: The maximum number of bad records that BigQuery can ignore when reading data\n\n    * `source_format`: The data format\n    Possible values:\n      * CSV\n      * GOOGLE_SHEETS\n      * NEWLINE_DELIMITED_JSON\n      * AVRO\n      * DATASTORE_BACKUP\n      * BIGTABLE\n      * ORC\n\n    * `source_uris`: The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified. Also, the '*' wildcard character is not allowed.\n\n    * `schema`: The schema for the data. Schema is required for CSV and JSON formats\n\n      * `fields`: Describes the fields in a table.\n\n        * `description`: The field description\n\n        * `fields`: Describes the nested schema fields if the type property is set to RECORD\n\n        * `mode`: Field mode.\n        Possible values:\n          * NULLABLE\n          * REQUIRED\n          * REPEATED\n\n        * `name`: Field name\n\n        * `type`: Field data type\n        Possible values:\n          * STRING\n          * BYTES\n          * INTEGER\n          * FLOAT\n          * TIMESTAMP\n          * DATE\n          * TIME\n          * DATETIME\n          * RECORD\n\n    * `google_sheets_options`: Additional options if sourceFormat is set to GOOGLE_SHEETS.\n\n      * `skip_leading_rows`: The number of rows at the top of a Google Sheet that BigQuery will skip when reading the data.\n\n    * `csv_options`: Additional properties to set if sourceFormat is set to CSV.\n\n      * `allow_jagged_rows`: Indicates if BigQuery should accept rows that are missing trailing optional columns\n\n      * `allow_quoted_newlines`: Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file\n\n      * `encoding`: The character encoding of the data\n      Possible values:\n        * UTF-8\n        * ISO-8859-1\n\n      * `field_delimiter`: The separator for fields in a CSV file\n\n      * `quote`: The value that is used to quote data sections in a CSV file\n\n      * `skip_leading_rows`: The number of rows at the top of a CSV file that BigQuery will skip when reading the data.\n\n    * `bigtable_options`: Additional options if sourceFormat is set to BIGTABLE.\n\n      * `ignore_unspecified_column_families`: If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema\n\n      * `read_rowkey_as_string`: If field is true, then the rowkey column families will be read and converted to string.\n\n      * `column_families`: List of column families to expose in the table schema along with their types.\n\n        * `columns`: Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs.\n\n          * `encoding`: The encoding of the values when the type is not STRING\n          Possible values:\n            * TEXT\n            * BINARY\n\n          * `field_name`: If the qualifier is not a valid BigQuery field identifier, a valid identifier must be provided as the column field name and is used as field name in queries.\n\n          * `only_read_latest`: If this is set, only the latest version of value in this column are exposed\n\n          * `qualifier_string`: Qualifier of the column\n\n          * `type`: The type to convert the value in cells of this column\n          Possible values:\n            * BYTES\n            * STRING\n            * INTEGER\n            * FLOAT\n            * BOOLEAN\n\n        * `encoding`: The encoding of the values when the type is not STRING\n        Possible values:\n          * TEXT\n          * BINARY\n\n        * `family_id`: Identifier of the column family.\n\n        * `only_read_latest`: If this is set only the latest version of value are exposed for all columns in this column family\n\n        * `type`: The type to convert the value in cells of this column family\n        Possible values:\n          * BYTES\n          * STRING\n          * INTEGER\n          * FLOAT\n          * BOOLEAN\n\n  * `dataset`: Name of the dataset\n\n\n## GCP permissions\n\nEnsure the [BigQuery API](https://console.cloud.google.com/apis/library/bigquery-json.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigquery_tables.md",
    "content": "+++\ntitle = \"google_bigquery_tables resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_bigquery_tables\"\nidentifier = \"inspec/resources/gcp/google_bigquery_tables resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigquery_tables` InSpec audit resource to to test a Google Cloud Table resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_bigquery_tables(project: 'chef-gcp-inspec', dataset: 'inspec_gcp_dataset').table_references.each do |table_reference|\n    describe google_bigquery_table(project: 'chef-gcp-inspec', dataset: 'inspec_gcp_dataset', name: table_reference.table_id) do\n      its('expiration_time') { should cmp '1738882264000' }\n      its('description') { should eq 'A BigQuery table' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_bigquery_tables` resource:\n\nSee [google_bigquery_table](google_bigquery_table) for more detailed information.\n\n  * `table_references`: an array of `google_bigquery_table` table_reference\n  * `clusterings`: an array of `google_bigquery_table` clustering\n  * `creation_times`: an array of `google_bigquery_table` creation_time\n  * `friendly_names`: an array of `google_bigquery_table` friendly_name\n  * `ids`: an array of `google_bigquery_table` id\n  * `labels`: an array of `google_bigquery_table` labels\n  * `last_modified_times`: an array of `google_bigquery_table` last_modified_time\n  * `locations`: an array of `google_bigquery_table` location\n  * `num_bytes`: an array of `google_bigquery_table` num_bytes\n  * `num_long_term_bytes`: an array of `google_bigquery_table` num_long_term_bytes\n  * `num_rows`: an array of `google_bigquery_table` num_rows\n  * `require_partition_filters`: an array of `google_bigquery_table` require_partition_filter\n  * `types`: an array of `google_bigquery_table` type\n  * `views`: an array of `google_bigquery_table` view\n  * `time_partitionings`: an array of `google_bigquery_table` time_partitioning\n  * `streaming_buffers`: an array of `google_bigquery_table` streaming_buffer\n  * `schemas`: an array of `google_bigquery_table` schema\n  * `encryption_configurations`: an array of `google_bigquery_table` encryption_configuration\n  * `expiration_times`: an array of `google_bigquery_table` expiration_time\n  * `external_data_configurations`: an array of `google_bigquery_table` external_data_configuration\n  * `datasets`: an array of `google_bigquery_table` dataset\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [BigQuery API](https://console.cloud.google.com/apis/library/bigquery-json.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_cluster.md",
    "content": "+++\ntitle = \"google_bigtableadmin_cluster resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_cluster\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_cluster resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_cluster` InSpec audit resource to test the properties of a Google Cloud Cluster resource.\n\n## Examples\n\n```ruby\ndescribe google_bigtableadmin_cluster(name: 'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('location') { should cmp 'value_location' }\n\tits('state') { should cmp 'value_state' }\n\tits('default_storage_type') { should cmp 'value_defaultstoragetype' }\nend\n\ndescribe google_bigtableadmin_cluster(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_cluster` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_cluster` resource:\n\n\n  * `name`: The unique name of the cluster. Values are of the form `projects/{project}/instances/{instance}/clusters/a-z*`.\n\n  * `location`: Immutable. The location where this cluster's nodes and storage reside. For best performance, clients should be located as close as possible to this cluster. Currently only zones are supported, so values should be of the form `projects/{project}/locations/{zone}`.\n\n  * `state`: Output only. The current state of the cluster.\n  Possible values:\n    * STATE_NOT_KNOWN\n    * READY\n    * CREATING\n    * RESIZING\n    * DISABLED\n\n  * `serve_nodes`: The number of nodes in the cluster. If no value is set, Cloud Bigtable automatically allocates nodes based on your data footprint and optimized for 50% storage utilization.\n\n  * `cluster_config`: Configuration for a cluster.\n\n    * `cluster_autoscaling_config`: Autoscaling config for a cluster.\n\n      * `autoscaling_limits`: Limits for the number of nodes a Cluster can autoscale up/down to.\n\n        * `min_serve_nodes`: Required. Minimum number of nodes to scale down to.\n\n        * `max_serve_nodes`: Required. Maximum number of nodes to scale up to.\n\n      * `autoscaling_targets`: The Autoscaling targets for a Cluster. These determine the recommended nodes.\n\n        * `cpu_utilization_percent`: The cpu utilization that the Autoscaler should be trying to achieve. This number is on a scale from 0 (no utilization) to 100 (total utilization), and is limited between 10 and 80, otherwise it will return INVALID_ARGUMENT error.\n\n        * `storage_utilization_gib_per_node`: The storage utilization that the Autoscaler should be trying to achieve. This number is limited between 2560 (2.5TiB) and 5120 (5TiB) for a SSD cluster and between 8192 (8TiB) and 16384 (16TiB) for an HDD cluster, otherwise it will return INVALID_ARGUMENT error. If this value is set to 0, it will be treated as if it were set to the default value: 2560 for SSD, 8192 for HDD.\n\n  * `default_storage_type`: Immutable. The type of storage used by this cluster to serve its parent instance's tables, unless explicitly overridden.\n  Possible values:\n    * STORAGE_TYPE_UNSPECIFIED\n    * SSD\n    * HDD\n\n  * `encryption_config`: Cloud Key Management Service (Cloud KMS) settings for a CMEK-protected cluster.\n\n    * `kms_key_name`: Describes the Cloud KMS encryption key that will be used to protect the destination Bigtable cluster. The requirements for this key are: 1) The Cloud Bigtable service account associated with the project that contains this cluster must be granted the `cloudkms.cryptoKeyEncrypterDecrypter` role on the CMEK key. 2) Only regional keys can be used and the region of the CMEK key must match the region of the cluster. Values are of the form `projects/{project}/locations/{location}/keyRings/{keyring}/cryptoKeys/{key}`\n\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_cluster_backup.md",
    "content": "+++\ntitle = \"google_bigtableadmin_cluster_backup resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_cluster_backup\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_cluster_backup resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_cluster_backup` InSpec audit resource to test the properties of a Google Cloud ClusterBackup resource.\n\n## Examples\n\n```ruby\ndescribe google_bigtableadmin_cluster_backup(name: ' value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('source_table') { should cmp 'value_sourcetable' }\n\tits('source_backup') { should cmp 'value_sourcebackup' }\n\tits('expire_time') { should cmp 'value_expiretime' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('size_bytes') { should cmp 'value_sizebytes' }\n\tits('state') { should cmp 'value_state' }\nend\n\ndescribe google_bigtableadmin_cluster_backup(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_cluster_backup` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_cluster_backup` resource:\n\n\n  * `name`: A globally unique identifier for the backup which cannot be changed. Values are of the form `projects/{project}/instances/{instance}/clusters/{cluster}/ backups/_a-zA-Z0-9*` The final segment of the name must be between 1 and 50 characters in length. The backup is stored in the cluster identified by the prefix of the backup name of the form `projects/{project}/instances/{instance}/clusters/{cluster}`.\n\n  * `source_table`: Required. Immutable. Name of the table from which this backup was created. This needs to be in the same instance as the backup. Values are of the form `projects/{project}/instances/{instance}/tables/{source_table}`.\n\n  * `source_backup`: Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//clusters//backups/\n\n  * `expire_time`: Required. The expiration time of the backup, with microseconds granularity that must be at least 6 hours and at most 90 days from the time the request is received. Once the `expire_time` has passed, Cloud Bigtable will delete the backup and free the resources used by the backup.\n\n  * `start_time`: Output only. `start_time` is the time that the backup was started (i.e. approximately the time the CreateBackup request is received). The row data in this backup will be no older than this timestamp.\n\n  * `end_time`: Output only. `end_time` is the time that the backup was finished. The row data in the backup will be no newer than this timestamp.\n\n  * `size_bytes`: Output only. Size of the backup in bytes.\n\n  * `state`: Output only. The current state of the backup.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * READY\n\n  * `encryption_info`: Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.\n\n    * `encryption_type`: Output only. The type of encryption used to protect this resource.\n    Possible values:\n      * ENCRYPTION_TYPE_UNSPECIFIED\n      * GOOGLE_DEFAULT_ENCRYPTION\n      * CUSTOMER_MANAGED_ENCRYPTION\n\n    * `encryption_status`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n      * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n      * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n      * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `kms_key_version`: Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.\n\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_cluster_backups.md",
    "content": "+++\ntitle = \"google_bigtableadmin_cluster_backups resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_cluster_backups\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_cluster_backups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_cluster_backups` InSpec audit resource to test the properties of a Google Cloud ClusterBackup resource.\n\n## Examples\n\n```ruby\n  describe google_bigtableadmin_cluster_backups(parent: 'value_parent') do\n    it { should exist }\n    its('name') { should include 'value_name' }\n    its('source_table') { should include 'value_sourcetable' }\n    its('source_backup') { should include 'value_sourcebackup' }\n    its('expire_time') { should include 'value_expiretime' }\n    its('start_time') { should include 'value_starttime' }\n    its('end_time') { should include 'value_endtime' }\n    its('size_bytes') { should include 'value_sizebytes' }\n    its('state') { should include 'value_state' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_cluster_backups` resource:\n\nSee [google_bigtableadmin_cluster_backup](google_bigtableadmin_cluster_backup) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_cluster_backup` name\n* `source_tables`: an array of `google_bigtableadmin_cluster_backup` source_table\n* `source_backups`: an array of `google_bigtableadmin_cluster_backup` source_backup\n* `expire_times`: an array of `google_bigtableadmin_cluster_backup` expire_time\n* `start_times`: an array of `google_bigtableadmin_cluster_backup` start_time\n* `end_times`: an array of `google_bigtableadmin_cluster_backup` end_time\n* `size_bytes`: an array of `google_bigtableadmin_cluster_backup` size_bytes\n* `states`: an array of `google_bigtableadmin_cluster_backup` state\n* `encryption_infos`: an array of `google_bigtableadmin_cluster_backup` encryption_info\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_cluster_backups` resource:\n\nSee [google_bigtableadmin_cluster_backup](google_bigtableadmin_cluster_backup) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_cluster_backup` name\n* `source_tables`: an array of `google_bigtableadmin_cluster_backup` source_table\n* `source_backups`: an array of `google_bigtableadmin_cluster_backup` source_backup\n* `expire_times`: an array of `google_bigtableadmin_cluster_backup` expire_time\n* `start_times`: an array of `google_bigtableadmin_cluster_backup` start_time\n* `end_times`: an array of `google_bigtableadmin_cluster_backup` end_time\n* `size_bytes`: an array of `google_bigtableadmin_cluster_backup` size_bytes\n* `states`: an array of `google_bigtableadmin_cluster_backup` state\n* `encryption_infos`: an array of `google_bigtableadmin_cluster_backup` encryption_info\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_clusters.md",
    "content": "+++\ntitle = \"google_bigtableadmin_clusters resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_clusters\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_clusters resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_clusters` InSpec audit resource to test the properties of a Google Cloud Cluster resource.\n\n## Examples\n\n```ruby\n  describe google_bigtableadmin_clusters(parent: ' value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('locations') { should include 'value_location' }\n    its('states') { should include 'value_state' }\n    its('default_storage_types') { should include 'value_defaultstoragetype' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_clusters` resource:\n\nSee [google_bigtableadmin_cluster](google_bigtableadmin_cluster) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_cluster` name\n* `locations`: an array of `google_bigtableadmin_cluster` location\n* `states`: an array of `google_bigtableadmin_cluster` state\n* `serve_nodes`: an array of `google_bigtableadmin_cluster` serve_nodes\n* `cluster_configs`: an array of `google_bigtableadmin_cluster` cluster_config\n* `default_storage_types`: an array of `google_bigtableadmin_cluster` default_storage_type\n* `encryption_configs`: an array of `google_bigtableadmin_cluster` encryption_config\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_clusters` resource:\n\nSee [google_bigtableadmin_cluster](google_bigtableadmin_cluster) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_cluster` name\n* `locations`: an array of `google_bigtableadmin_cluster` location\n* `states`: an array of `google_bigtableadmin_cluster` state\n* `serve_nodes`: an array of `google_bigtableadmin_cluster` serve_nodes\n* `cluster_configs`: an array of `google_bigtableadmin_cluster` cluster_config\n* `default_storage_types`: an array of `google_bigtableadmin_cluster` default_storage_type\n* `encryption_configs`: an array of `google_bigtableadmin_cluster` encryption_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_instance_app_profile.md",
    "content": "+++\ntitle = \"google_bigtableadmin_instance_app_profile resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_instance_app_profile\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_instance_app_profile resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_instance_app_profile` InSpec audit resource to test the properties of a Google Cloud InstanceAppProfile resource.\n\n## Examples\n\n```ruby\ndescribe google_bigtableadmin_instance_app_profile(name: 'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('description') { should cmp 'value_description' }\n\tits('priority') { should cmp 'value_priority' }\n\nend\n\ndescribe google_bigtableadmin_instance_app_profile(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_instance_app_profile` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_instance_app_profile` resource:\n\n\n  * `name`: The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.\n\n  * `etag`: Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.\n\n  * `description`: Long form description of the use case for this AppProfile.\n\n  * `multi_cluster_routing_use_any`: Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability.\n\n    * `cluster_ids`: The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.\n\n  * `single_cluster_routing`: Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability.\n\n    * `cluster_id`: The cluster to which read/write requests should be routed.\n\n    * `allow_transactional_writes`: Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.\n\n  * `priority`: This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.\n  Possible values:\n    * PRIORITY_UNSPECIFIED\n    * PRIORITY_LOW\n    * PRIORITY_MEDIUM\n    * PRIORITY_HIGH\n\n  * `standard_isolation`: Standard options for isolating this app profile's traffic from other use cases.\n\n    * `priority`: The priority of requests sent using this app profile.\n    Possible values:\n      * PRIORITY_UNSPECIFIED\n      * PRIORITY_LOW\n      * PRIORITY_MEDIUM\n      * PRIORITY_HIGH\n\n  * `data_boost_isolation_read_only`: Data Boost is a serverless compute capability that lets you run high-throughput read jobs and queries on your Bigtable data, without impacting the performance of the clusters that handle your application traffic. Data Boost supports read-only use cases with single-cluster routing.\n\n    * `compute_billing_owner`: The Compute Billing Owner for this Data Boost App Profile.\n    Possible values:\n      * COMPUTE_BILLING_OWNER_UNSPECIFIED\n      * HOST_PAYS\n\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_bigtableadmin_instance_app_profiles.md",
    "content": "+++\ntitle = \"google_bigtableadmin_instance_app_profiles resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_bigtableadmin_instance_app_profiles\"\nidentifier = \"inspec/resources/gcp/google_bigtableadmin_instance_app_profiles resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_bigtableadmin_instance_app_profiles` InSpec audit resource to test the properties of a Google Cloud InstanceAppProfile resource.\n\n## Examples\n\n```ruby\n  describe google_bigtableadmin_instance_app_profiles(parent: ' value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_bigtableadmin_instance_app_profiles` resource:\n\nSee [google_bigtableadmin_instance_app_profile](google_bigtableadmin_instance_app_profile) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_instance_app_profile` name\n* `etags`: an array of `google_bigtableadmin_instance_app_profile` etag\n* `descriptions`: an array of `google_bigtableadmin_instance_app_profile` description\n* `multi_cluster_routing_use_anies`: an array of `google_bigtableadmin_instance_app_profile` multi_cluster_routing_use_any\n* `single_cluster_routings`: an array of `google_bigtableadmin_instance_app_profile` single_cluster_routing\n* `priorities`: an array of `google_bigtableadmin_instance_app_profile` priority\n* `standard_isolations`: an array of `google_bigtableadmin_instance_app_profile` standard_isolation\n* `data_boost_isolation_read_onlies`: an array of `google_bigtableadmin_instance_app_profile` data_boost_isolation_read_only\n\n## Properties\n\nProperties that can be accessed from the `google_bigtableadmin_instance_app_profiles` resource:\n\nSee [google_bigtableadmin_instance_app_profile](google_bigtableadmin_instance_app_profile) for more detailed information.\n\n* `names`: an array of `google_bigtableadmin_instance_app_profile` name\n* `etags`: an array of `google_bigtableadmin_instance_app_profile` etag\n* `descriptions`: an array of `google_bigtableadmin_instance_app_profile` description\n* `multi_cluster_routing_use_anies`: an array of `google_bigtableadmin_instance_app_profile` multi_cluster_routing_use_any\n* `single_cluster_routings`: an array of `google_bigtableadmin_instance_app_profile` single_cluster_routing\n* `priorities`: an array of `google_bigtableadmin_instance_app_profile` priority\n* `standard_isolations`: an array of `google_bigtableadmin_instance_app_profile` standard_isolation\n* `data_boost_isolation_read_onlies`: an array of `google_bigtableadmin_instance_app_profile` data_boost_isolation_read_only\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://bigtableadmin.googleapis.com/](https://console.cloud.google.com/apis/library/bigtableadmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_billing_project_billing_info.md",
    "content": "+++\ntitle = \"google_billing_project_billing_info resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_billing_project_billing_info\"\nidentifier = \"inspec/resources/gcp/google_billing_project_billing_info resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_billing_project_billing_info` InSpec audit resource to to test a Google Cloud ProjectBillingInfo resource.\n\n## Examples\n\n```ruby\ndescribe google_billing_project_billing_info(project_id: 'chef-gcp-inspec') do\n  it { should exist }\n\n  its('billing_account_name') { should eq 'billingAccounts/012345-567890-ABCDEF' }\n  its('billing_enabled') { should eq true }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_billing_project_billing_info` resource:\n\n\n  * `project_id`: The project id to retrieve billing info for.\n\n  * `billing_account_name`: The resource name of the billing account associated with the project, if any. For example, `billingAccounts/012345-567890-ABCDEF`.\n\n  * `billing_enabled`: True if the project is associated with an open billing account, to which usage on the project is charged. False if the project is associated with a closed billing account, or no billing account at all, and therefore cannot use paid services.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_cloud_scheduler_job.md",
    "content": "+++\ntitle = \"google_cloud_scheduler_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloud_scheduler_job\"\nidentifier = \"inspec/resources/gcp/google_cloud_scheduler_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloud_scheduler_job` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\ndescribe google_cloud_scheduler_job(project: 'chef-gcp-inspec', region: us-central1, name: 'job-name') do\n  it { should exist }\n\n  its('description') { should cmp 'A description' }\n  its('schedule') { should cmp '*/8 * * * *' }\n  its('time_zone') { should cmp 'America/New_York' }\n  its('http_target.http_method') { should cmp 'POST' }\n  its('http_target.uri') { should cmp 'https://example.com/ping' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloud_scheduler_job` resource:\n\n\n  * `name`: The name of the job.\n\n  * `description`: A human-readable description for the job.  This string must not contain more than 500 characters.\n\n  * `schedule`: Describes the schedule on which the job will be executed.\n\n  * `time_zone`: Specifies the time zone to be used in interpreting schedule. The value of this field must be a time zone name from the tz database.\n\n  * `state`: State of the job. \n  Possible values:\n    * ENABLED\n    * PAUSED\n\n  * `attempt_deadline`: The deadline for job attempts. If the request handler does not respond by this deadline then the request is cancelled and the attempt is marked as a DEADLINE_EXCEEDED failure. The failed attempt can be viewed in execution logs. Cloud Scheduler will retry the job according to the RetryConfig. The allowed duration for this deadline is: * For HTTP targets, between 15 seconds and 30 minutes. * For App Engine HTTP targets, between 15 seconds and 24 hours. * **Note**: For PubSub targets, this field is ignored - setting it will introduce an unresolvable diff. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\"\n\n  * `retry_config`: By default, if a job does not complete successfully,  meaning that an acknowledgement is not received from the handler,  then it will be retried with exponential backoff according to the settings\n\n    * `retry_count`: The number of attempts that the system will make to run a  job using the exponential backoff procedure described by maxDoublings. Values greater than 5 and negative values are not allowed.\n\n    * `max_retry_duration`: The time limit for retrying a failed job, measured from time when an execution was first attempted.  If specified with retryCount, the job will be retried until both limits are reached. A duration in seconds with up to nine fractional digits, terminated by 's'.\n\n    * `min_backoff_duration`: The minimum amount of time to wait before retrying a job after it fails. A duration in seconds with up to nine fractional digits, terminated by 's'.\n\n    * `max_backoff_duration`: The maximum amount of time to wait before retrying a job after it fails. A duration in seconds with up to nine fractional digits, terminated by 's'.\n\n    * `max_doublings`: The time between retries will double maxDoublings times. A job's retry interval starts at minBackoffDuration,  then doubles maxDoublings times, then increases linearly,  and finally retries retries at intervals of maxBackoffDuration up to retryCount times.\n\n  * `pubsub_target`: Pub/Sub target If the job providers a Pub/Sub target the cron will publish a message to the provided topic\n\n    * `topic_name`: The full resource name for the Cloud Pub/Sub topic to which messages will be published when a job is delivered. ~>**NOTE:** The topic name must be in the same format as required by PubSub's PublishRequest.name, e.g. `projects/my-project/topics/my-topic`.\n\n    * `data`: The message payload for PubsubMessage. Pubsub message must contain either non-empty data, or at least one attribute.   A base64-encoded string.\n\n    * `attributes`: Attributes for PubsubMessage. Pubsub message must contain either non-empty data, or at least one attribute.\n\n  * `app_engine_http_target`: App Engine HTTP target. If the job providers a App Engine HTTP target the cron will  send a request to the service instance\n\n    * `http_method`: Which HTTP method to use for the request.\n\n    * `app_engine_routing`: App Engine Routing setting for the job.\n\n      * `service`: App service. By default, the job is sent to the service which is the default service when the job is attempted.\n\n      * `version`: App version. By default, the job is sent to the version which is the default version when the job is attempted.\n\n      * `instance`: App instance. By default, the job is sent to an instance which is available when the job is attempted.\n\n    * `relative_uri`: The relative URI. The relative URL must begin with \"/\" and must be a valid HTTP relative URL.  It can contain a path, query string arguments, and \\# fragments.  If the relative URL is empty, then the root path \"/\" will be used.  No spaces are allowed, and the maximum length allowed is 2083 characters\n\n    * `body`: HTTP request body.  A request body is allowed only if the HTTP method is POST or PUT.  It will result in invalid argument error to set a body on a job with an incompatible HttpMethod.  A base64-encoded string.\n\n    * `headers`: HTTP request headers. This map contains the header field names and values.  Headers can be set when the job is created.\n\n  * `http_target`: HTTP target. If the job providers a http_target the cron will  send a request to the targeted url\n\n    * `uri`: The full URI path that the request will be sent to.\n\n    * `http_method`: Which HTTP method to use for the request.\n\n    * `body`: HTTP request body.  A request body is allowed only if the HTTP method is POST, PUT, or PATCH.  It is an error to set body on a job with an incompatible HttpMethod.  A base64-encoded string.\n\n    * `headers`: This map contains the header field names and values.  Repeated headers are not supported, but a header value can contain commas.\n\n    * `oauth_token`: Contains information needed for generating an OAuth token. This type of authorization should be used when sending requests to a GCP endpoint.\n\n      * `service_account_email`: Service account email to be used for generating OAuth token. The service account must be within the same project as the job.\n\n      * `scope`: OAuth scope to be used for generating OAuth access token. If not specified, \"https://www.googleapis.com/auth/cloud-platform\" will be used.\n\n    * `oidc_token`: Contains information needed for generating an OpenID Connect token. This type of authorization should be used when sending requests to third party endpoints or Cloud Run.\n\n      * `service_account_email`: Service account email to be used for generating OAuth token. The service account must be within the same project as the job.\n\n      * `audience`: Audience to be used when generating OIDC token. If not specified, the URI specified in target will be used.\n\n  * `region`: Region where the scheduler job resides\n\n\n## GCP permissions\n\nEnsure the [Cloud Scheduler](https://console.cloud.google.com/apis/library/cloudscheduler.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_cloud_scheduler_jobs.md",
    "content": "+++\ntitle = \"google_cloud_scheduler_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloud_scheduler_jobs\"\nidentifier = \"inspec/resources/gcp/google_cloud_scheduler_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloud_scheduler_jobs` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\ngoogle_cloud_scheduler_jobs(project: 'chef-gcp-inspec', region: ).names.each do |name|\n  describe google_cloud_scheduler_job(project: 'chef-gcp-inspec', region: us-central1, name: name) do\n\t  it { should exist }\n\n\t  its('description') { should cmp 'A description' }\n\t  its('schedule') { should cmp '*/8 * * * *' }\n\t  its('time_zone') { should cmp 'America/New_York' }\n\t  its('http_target.http_method') { should cmp 'POST' }\n\t  its('http_target.uri') { should cmp 'https://example.com/ping' }\n\tend\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloud_scheduler_jobs` resource:\n\nSee [google_cloud_scheduler_job](google_cloud_scheduler_job) for more detailed information.\n\n  * `names`: an array of `google_cloud_scheduler_job` name\n  * `descriptions`: an array of `google_cloud_scheduler_job` description\n  * `schedules`: an array of `google_cloud_scheduler_job` schedule\n  * `time_zones`: an array of `google_cloud_scheduler_job` time_zone\n  * `states`: an array of `google_cloud_scheduler_job` state\n  * `attempt_deadlines`: an array of `google_cloud_scheduler_job` attempt_deadline\n  * `retry_configs`: an array of `google_cloud_scheduler_job` retry_config\n  * `pubsub_targets`: an array of `google_cloud_scheduler_job` pubsub_target\n  * `app_engine_http_targets`: an array of `google_cloud_scheduler_job` app_engine_http_target\n  * `http_targets`: an array of `google_cloud_scheduler_job` http_target\n  * `regions`: an array of `google_cloud_scheduler_job` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Scheduler](https://console.cloud.google.com/apis/library/cloudscheduler.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_cloudbuild_trigger.md",
    "content": "+++\ntitle = \"google_cloudbuild_trigger resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloudbuild_trigger\"\nidentifier = \"inspec/resources/gcp/google_cloudbuild_trigger resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloudbuild_trigger` InSpec audit resource to to test a Google Cloud Trigger resource.\n\n## Examples\n\n```ruby\ndescribe google_cloudbuild_triggers(project: 'chef-gcp-inspec') do\n  its('count') { should eq 1 }\nend\n\ngoogle_cloudbuild_triggers(project: 'chef-gcp-inspec').ids.each do |id|\n  describe google_cloudbuild_trigger(project: 'chef-gcp-inspec', id: id) do\n    its('filename') { should eq 'cloudbuild.yaml' }\n    its('trigger_template.branch_name') { should eq 'trigger-branch' }\n    its('trigger_template.repo_name') { should eq 'trigger-repo' }\n    its('trigger_template.project_id') { should eq 'trigger-project' }\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloudbuild_trigger` resource:\n\n\n  * `id`: The unique identifier for the trigger.\n\n  * `name`: Name of the trigger. Must be unique within the project.\n\n  * `description`: Human-readable description of the trigger.\n\n  * `tags`: Tags for annotation of a BuildTrigger\n\n  * `disabled`: Whether the trigger is disabled or not. If true, the trigger will never result in a build.\n\n  * `create_time`: Time when the trigger was created.\n\n  * `substitutions`: Substitutions data for Build resource.\n\n  * `filename`: Path, from the source root, to a file whose contents is used for the template. Either a filename or build template must be provided.\n\n  * `ignored_files`: ignoredFiles and includedFiles are file glob matches using https://golang.org/pkg/path/filepath/#Match extended with support for `**`.  If ignoredFiles and changed files are both empty, then they are not used to determine whether or not to trigger a build.  If ignoredFiles is not empty, then we ignore any files that match any of the ignored_file globs. If the change has no files that are outside of the ignoredFiles globs, then we do not trigger a build.\n\n  * `included_files`: ignoredFiles and includedFiles are file glob matches using https://golang.org/pkg/path/filepath/#Match extended with support for `**`.  If any of the files altered in the commit pass the ignoredFiles filter and includedFiles is empty, then as far as this filter is concerned, we should trigger the build.  If any of the files altered in the commit pass the ignoredFiles filter and includedFiles is not empty, then we make sure that at least one of those files matches a includedFiles glob. If not, then we do not trigger a build.\n\n  * `trigger_template`: Template describing the types of source changes to trigger a build.  Branch and tag names in trigger templates are interpreted as regular expressions. Any branch or tag change that matches that regular expression will trigger a build.\n\n    * `project_id`: ID of the project that owns the Cloud Source Repository. If omitted, the project ID requesting the build is assumed.\n\n    * `repo_name`: Name of the Cloud Source Repository. If omitted, the name \"default\" is assumed.\n\n    * `dir`: Directory, relative to the source root, in which to run the build.  This must be a relative path. If a step's dir is specified and is an absolute path, this value is ignored for that step's execution.\n\n    * `invert_regex`: Only trigger a build if the revision regex does NOT match the revision regex.\n\n    * `branch_name`: Name of the branch to build. Exactly one a of branch name, tag, or commit SHA must be provided. This field is a regular expression.\n\n    * `tag_name`: Name of the tag to build. Exactly one of a branch name, tag, or commit SHA must be provided. This field is a regular expression.\n\n    * `commit_sha`: Explicit commit SHA to build. Exactly one of a branch name, tag, or commit SHA must be provided.\n\n  * `github`: Describes the configuration of a trigger that creates a build whenever a GitHub event is received.\n\n    * `owner`: Owner of the repository. For example: The owner for https://github.com/googlecloudplatform/cloud-builders is \"googlecloudplatform\".\n\n    * `name`: Name of the repository. For example: The name for https://github.com/googlecloudplatform/cloud-builders is \"cloud-builders\".\n\n    * `pull_request`: filter to match changes in pull requests.  Specify only one of pullRequest or push.\n\n      * `branch`: Regex of branches to match.\n\n      * `comment_control`: Whether to block builds on a \"/gcbrun\" comment from a repository owner or collaborator.\n      Possible values:\n        * COMMENTS_DISABLED\n        * COMMENTS_ENABLED\n        * COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY\n\n      * `invert_regex`: If true, branches that do NOT match the git_ref will trigger a build.\n\n    * `push`: filter to match changes in refs, like branches or tags.  Specify only one of pullRequest or push.\n\n      * `invert_regex`: When true, only trigger a build if the revision regex does NOT match the git_ref regex.\n\n      * `branch`: Regex of branches to match.  Specify only one of branch or tag.\n\n      * `tag`: Regex of tags to match.  Specify only one of branch or tag.\n\n  * `build`: Contents of the build template. Either a filename or build template must be provided.\n\n    * `source`: The location of the source files to build.\n\n      * `storage_source`: Location of the source in an archive file in Google Cloud Storage.\n\n        * `bucket`: Google Cloud Storage bucket containing the source.\n\n        * `object`: Google Cloud Storage object containing the source. This object must be a gzipped archive file (.tar.gz) containing source to build.\n\n        * `generation`: Google Cloud Storage generation for the object.  If the generation is omitted, the latest generation will be used\n\n      * `repo_source`: Location of the source in a Google Cloud Source Repository.\n\n        * `project_id`: ID of the project that owns the Cloud Source Repository.  If omitted, the project ID requesting the build is assumed.\n\n        * `repo_name`: Name of the Cloud Source Repository.\n\n        * `dir`: Directory, relative to the source root, in which to run the build. This must be a relative path. If a step's dir is specified and is an absolute path,  this value is ignored for that step's execution.\n\n        * `invert_regex`: Only trigger a build if the revision regex does NOT match the revision regex.\n\n        * `substitutions`: Substitutions to use in a triggered build. Should only be used with triggers.run\n\n        * `branch_name`: Regex matching branches to build. Exactly one a of branch name, tag, or commit SHA must be provided. The syntax of the regular expressions accepted is the syntax accepted by RE2 and  described at https://github.com/google/re2/wiki/Syntax\n\n        * `tag_name`: Regex matching tags to build. Exactly one a of branch name, tag, or commit SHA must be provided. The syntax of the regular expressions accepted is the syntax accepted by RE2 and  described at https://github.com/google/re2/wiki/Syntax\n\n        * `commit_sha`: Explicit commit SHA to build. Exactly one a of branch name, tag, or commit SHA must be provided.\n\n    * `tags`: Tags for annotation of a Build. These are not docker tags.\n\n    * `images`: A list of images to be pushed upon the successful completion of all build steps. The images are pushed using the builder service account's credentials. The digests of the pushed images will be stored in the Build resource's results field. If any of the images fail to be pushed, the build status is marked FAILURE.\n\n    * `substitutions`: Substitutions data for Build resource.\n\n    * `queue_ttl`: TTL in queue for this build. If provided and the build is enqueued longer than this value,  the build will expire and the build status will be EXPIRED. The TTL starts ticking from createTime. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n    * `logs_bucket`: Google Cloud Storage bucket where logs should be written.  Logs file names will be of the format ${logsBucket}/log-${build_id}.txt.\n\n    * `timeout`: Amount of time that this build should be allowed to run, to second granularity. If this amount of time elapses, work on the build will cease and the build status will be TIMEOUT. This timeout must be equal to or greater than the sum of the timeouts for build steps within the build. The expected format is the number of seconds followed by s. Default time is ten minutes (600s).\n\n    * `secrets`: Secrets to decrypt using Cloud Key Management Service.\n\n      * `kms_key_name`: Cloud KMS key name to use to decrypt these envs.\n\n      * `secret_env`: Map of environment variable name to its encrypted value. Secret environment variables must be unique across all of a build's secrets,  and must be used by at least one build step. Values can be at most 64 KB in size.  There can be at most 100 secret values across all of a build's secrets.\n\n    * `steps`: The operations to be performed on the workspace.\n\n      * `name`: The name of the container image that will run this particular build step.  If the image is available in the host's Docker daemon's cache, it will be run directly. If not, the host will attempt to pull the image first, using the builder service account's credentials if necessary.  The Docker daemon's cache will already have the latest versions of all of the officially supported build steps (see https://github.com/GoogleCloudPlatform/cloud-builders  for images and examples). The Docker daemon will also have cached many of the layers for some popular images, like \"ubuntu\", \"debian\", but they will be refreshed at the time you attempt to use them.  If you built an image in a previous build step, it will be stored in the host's Docker daemon's cache and is available to use as the name for a later build step.\n\n      * `args`: A list of arguments that will be presented to the step when it is started.  If the image used to run the step's container has an entrypoint, the args are used as arguments to that entrypoint. If the image does not define an entrypoint, the first element in args is used as the entrypoint, and the remainder will be used as arguments.\n\n      * `env`: A list of environment variable definitions to be used when running a step.  The elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\" being given the value \"VALUE\".\n\n      * `id`: Unique identifier for this build step, used in `wait_for` to reference this build step as a dependency.\n\n      * `entrypoint`: Entrypoint to be used instead of the build step image's default entrypoint. If unset, the image's default entrypoint is used\n\n      * `dir`: Working directory to use when running this step's container.  If this value is a relative path, it is relative to the build's working directory. If this value is absolute, it may be outside the build's working directory, in which case the contents of the path may not be persisted across build step executions, unless a `volume` for that path is specified.  If the build specifies a `RepoSource` with `dir` and a step with a `dir`, which specifies an absolute path, the `RepoSource` `dir` is ignored for the step's execution.\n\n      * `secret_env`: A list of environment variables which are encrypted using a Cloud Key Management Service crypto key. These values must be specified in the build's `Secret`.\n\n      * `timeout`: Time limit for executing this build step. If not defined, the step has no time limit and will be allowed to continue to run until either it completes or the build itself times out.\n\n      * `timing`: Output only. Stores timing information for executing this build step.\n\n      * `volumes`: List of volumes to mount into the build step.  Each volume is created as an empty volume prior to execution of the build step. Upon completion of the build, volumes and their contents are discarded.  Using a named volume in only one step is not valid as it is indicative of a build request with an incorrect configuration.\n\n        * `name`: Name of the volume to mount.  Volume names must be unique per build step and must be valid names for Docker volumes. Each named volume must be used by at least two build steps.\n\n        * `path`: Path at which to mount the volume.  Paths must be absolute and cannot conflict with other volume paths on the same build step or with certain reserved volume paths.\n\n      * `wait_for`: The ID(s) of the step(s) that this build step depends on.  This build step will not start until all the build steps in `wait_for` have completed successfully. If `wait_for` is empty, this build step will start when all previous build steps in the `Build.Steps` list have completed successfully.\n\n    * `artifacts`: Artifacts produced by the build that should be uploaded upon successful completion of all build steps.\n\n      * `images`: A list of images to be pushed upon the successful completion of all build steps.  The images will be pushed using the builder service account's credentials.  The digests of the pushed images will be stored in the Build resource's results field.  If any of the images fail to be pushed, the build is marked FAILURE.\n\n      * `objects`: A list of objects to be uploaded to Cloud Storage upon successful completion of all build steps.  Files in the workspace matching specified paths globs will be uploaded to the Cloud Storage location using the builder service account's credentials.  The location and generation of the uploaded objects will be stored in the Build resource's results field.  If any objects fail to be pushed, the build is marked FAILURE.\n\n        * `location`: Cloud Storage bucket and optional object path, in the form \"gs://bucket/path/to/somewhere/\".  Files in the workspace matching any path pattern will be uploaded to Cloud Storage with this location as a prefix.\n\n        * `paths`: Path globs used to match files in the build's workspace.\n\n        * `timing`: Output only. Stores timing information for pushing all artifact objects.\n\n          * `start_time`: Start of time span.  A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n          * `end_time`: End of time span.  A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n    * `options`: Special options for this build.\n\n      * `source_provenance_hash`: Requested hash for SourceProvenance.\n\n      * `requested_verify_option`: Requested verifiability options.\n      Possible values:\n        * NOT_VERIFIED\n        * VERIFIED\n\n      * `machine_type`: Compute Engine machine type on which to run the build.\n      Possible values:\n        * UNSPECIFIED\n        * N1_HIGHCPU_8\n        * N1_HIGHCPU_32\n\n      * `disk_size_gb`: Requested disk size for the VM that runs the build. Note that this is NOT \"disk free\"; some of the space will be used by the operating system and build utilities. Also note that this is the minimum disk size that will be allocated for the build -- the build may run with a larger disk than requested. At present, the maximum disk size is 1000GB; builds that request more than the maximum are rejected with an error.\n\n      * `substitution_option`: Option to specify behavior when there is an error in the substitution checks.  NOTE this is always set to ALLOW_LOOSE for triggered builds and cannot be overridden in the build configuration file.\n      Possible values:\n        * MUST_MATCH\n        * ALLOW_LOOSE\n\n      * `dynamic_substitutions`: Option to specify whether or not to apply bash style string operations to the substitutions.  NOTE this is always enabled for triggered builds and cannot be overridden in the build configuration file.\n\n      * `log_streaming_option`: Option to define build log streaming behavior to Google Cloud Storage.\n      Possible values:\n        * STREAM_DEFAULT\n        * STREAM_ON\n        * STREAM_OFF\n\n      * `worker_pool`: Option to specify a WorkerPool for the build. Format projects/{project}/workerPools/{workerPool}  This field is experimental.\n\n      * `logging`: Option to specify the logging mode, which determines if and where build logs are stored.\n      Possible values:\n        * LOGGING_UNSPECIFIED\n        * LEGACY\n        * GCS_ONLY\n        * STACKDRIVER_ONLY\n        * NONE\n\n      * `env`: A list of global environment variable definitions that will exist for all build steps in this build. If a variable is defined in both globally and in a build step, the variable will use the build step value.  The elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\" being given the value \"VALUE\".\n\n      * `secret_env`: A list of global environment variables, which are encrypted using a Cloud Key Management Service crypto key. These values must be specified in the build's Secret. These variables will be available to all build steps in this build.\n\n      * `volumes`: Global list of volumes to mount for ALL build steps  Each volume is created as an empty volume prior to starting the build process. Upon completion of the build, volumes and their contents are discarded. Global volume names and paths cannot conflict with the volumes defined a build step.  Using a global volume in a build with only one step is not valid as it is indicative of a build request with an incorrect configuration.\n\n        * `name`: Name of the volume to mount.  Volume names must be unique per build step and must be valid names for Docker volumes. Each named volume must be used by at least two build steps.\n\n        * `path`: Path at which to mount the volume.  Paths must be absolute and cannot conflict with other volume paths on the same build step or with certain reserved volume paths.\n\n\n## GCP permissions\n\nEnsure the [Cloud Build API](https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_cloudbuild_triggers.md",
    "content": "+++\ntitle = \"google_cloudbuild_triggers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloudbuild_triggers\"\nidentifier = \"inspec/resources/gcp/google_cloudbuild_triggers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloudbuild_triggers` InSpec audit resource to to test a Google Cloud Trigger resource.\n\n## Examples\n\n```ruby\ndescribe google_cloudbuild_triggers(project: 'chef-gcp-inspec') do\n  its('count') { should eq 1 }\nend\n\ngoogle_cloudbuild_triggers(project: 'chef-gcp-inspec').ids.each do |id|\n  describe google_cloudbuild_trigger(project: 'chef-gcp-inspec', id: id) do\n    its('filename') { should eq 'cloudbuild.yaml' }\n    its('trigger_template.branch_name') { should eq 'trigger-branch' }\n    its('trigger_template.repo_name') { should eq 'trigger-repo' }\n    its('trigger_template.project_id') { should eq 'trigger-project' }\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloudbuild_triggers` resource:\n\nSee [google_cloudbuild_trigger](google_cloudbuild_trigger) for more detailed information.\n\n  * `ids`: an array of `google_cloudbuild_trigger` id\n  * `names`: an array of `google_cloudbuild_trigger` name\n  * `descriptions`: an array of `google_cloudbuild_trigger` description\n  * `tags`: an array of `google_cloudbuild_trigger` tags\n  * `disableds`: an array of `google_cloudbuild_trigger` disabled\n  * `create_times`: an array of `google_cloudbuild_trigger` create_time\n  * `substitutions`: an array of `google_cloudbuild_trigger` substitutions\n  * `filenames`: an array of `google_cloudbuild_trigger` filename\n  * `ignored_files`: an array of `google_cloudbuild_trigger` ignored_files\n  * `included_files`: an array of `google_cloudbuild_trigger` included_files\n  * `trigger_templates`: an array of `google_cloudbuild_trigger` trigger_template\n  * `githubs`: an array of `google_cloudbuild_trigger` github\n  * `builds`: an array of `google_cloudbuild_trigger` build\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Build API](https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_cloudfunctions_cloud_function.md",
    "content": "+++\ntitle = \"google_cloudfunctions_cloud_function resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloudfunctions_cloud_function\"\nidentifier = \"inspec/resources/gcp/google_cloudfunctions_cloud_function resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloudfunctions_cloud_function` InSpec audit resource to to test a Google Cloud CloudFunction resource.\n\n## Examples\n\n```ruby\ndescribe google_cloudfunctions_cloud_function(project: 'chef-gcp-inspec', location: 'europe-west1', name: 'inspec-gcp-function') do\n  it { should exist }\n  its('description') { should eq 'A description of the function' }\n  its('available_memory_mb') { should eq '128' }\n  its('https_trigger.url') { should match /\\/inspec-gcp-function$/ }\n  its('entry_point') { should eq 'hello' }\n  its('environment_variables') { should include('MY_ENV_VAR' => 'val1') }\nend\n\ndescribe google_cloudfunctions_cloud_function(project: 'chef-gcp-inspec', location: 'europe-west1', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloudfunctions_cloud_function` resource:\n\n\n  * `name`: A user-defined name of the function. Function names must be unique globally and match pattern `projects/*/locations/*/functions/*`.\n\n  * `description`: User-provided description of a function.\n\n  * `status`: Status of the function deployment.\n  Possible values:\n    * CLOUD_FUNCTION_STATUS_UNSPECIFIED\n    * ACTOVE\n    * OFFLINE\n    * DEPLOY_IN_PROGRESS\n    * DELETE_IN_PROGRESS\n    * UNKNOWN\n\n  * `entry_point`: The name of the function (as defined in source code) that will be executed. Defaults to the resource name suffix, if not specified. For backward compatibility, if function with given name is not found, then the system will try to use function named \"function\". For Node.js this is name of a function exported by the module specified in source_location.\n\n  * `runtime`: The runtime in which the function is going to run. If empty, defaults to Node.js 6.\n\n  * `timeout`: The function execution timeout. Execution is considered failed and can be terminated if the function is not completed at the end of the timeout period. Defaults to 60 seconds.\n\n  * `available_memory_mb`: The amount of memory in MB available for a function.\n\n  * `service_account_email`: The email of the service account for this function.\n\n  * `update_time`: The last update timestamp of a Cloud Function\n\n  * `version_id`: The version identifier of the Cloud Function. Each deployment attempt results in a new version of a function being created.\n\n  * `labels`: A set of key/value label pairs associated with this Cloud Function.\n\n  * `environment_variables`: Environment variables that shall be available during function execution.\n\n  * `source_archive_url`: The Google Cloud Storage URL, starting with gs://, pointing to the zip archive which contains the function.\n\n  * `source_upload_url`: The Google Cloud Storage signed URL used for source uploading.\n\n  * `source_repository`: The source repository where a function is hosted.\n\n    * `url`: The URL pointing to the hosted repository where the function is defined\n\n    * `deployed_url`: The URL pointing to the hosted repository where the function were defined at the time of deployment.\n\n  * `https_trigger`: An HTTPS endpoint type of source that can be triggered via URL.\n\n    * `url`: The deployed url for the function.\n\n  * `event_trigger`: An HTTPS endpoint type of source that can be triggered via URL.\n\n    * `event_type`: The type of event to observe. For example: `providers/cloud.storage/eventTypes/object.change` and `providers/cloud.pubsub/eventTypes/topic.publish`.\n\n    * `resource`: The resource(s) from which to observe events, for example, `projects/_/buckets/myBucket.`\n\n    * `service`: The hostname of the service that should be observed.\n\n  * `location`: The location of this cloud function.\n\n\n## GCP permissions\n\nEnsure the [Cloud Functions API](https://console.cloud.google.com/apis/library/cloudfunctions.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_cloudfunctions_cloud_functions.md",
    "content": "+++\ntitle = \"google_cloudfunctions_cloud_functions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_cloudfunctions_cloud_functions\"\nidentifier = \"inspec/resources/gcp/google_cloudfunctions_cloud_functions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_cloudfunctions_cloud_functions` InSpec audit resource to to test a Google Cloud CloudFunction resource.\n\n## Examples\n\n```ruby\ndescribe google_cloudfunctions_cloud_functions(project: 'chef-gcp-inspec', location: 'europe-west1') do\n  its('descriptions') { should include 'A description of the function' }\n  its('entry_points') { should include 'hello' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_cloudfunctions_cloud_functions` resource:\n\nSee [google_cloudfunctions_cloud_function](google_cloudfunctions_cloud_function) for more detailed information.\n\n  * `names`: an array of `google_cloudfunctions_cloud_function` name\n  * `descriptions`: an array of `google_cloudfunctions_cloud_function` description\n  * `statuses`: an array of `google_cloudfunctions_cloud_function` status\n  * `entry_points`: an array of `google_cloudfunctions_cloud_function` entry_point\n  * `runtimes`: an array of `google_cloudfunctions_cloud_function` runtime\n  * `timeouts`: an array of `google_cloudfunctions_cloud_function` timeout\n  * `available_memory_mbs`: an array of `google_cloudfunctions_cloud_function` available_memory_mb\n  * `service_account_emails`: an array of `google_cloudfunctions_cloud_function` service_account_email\n  * `update_times`: an array of `google_cloudfunctions_cloud_function` update_time\n  * `version_ids`: an array of `google_cloudfunctions_cloud_function` version_id\n  * `labels`: an array of `google_cloudfunctions_cloud_function` labels\n  * `environment_variables`: an array of `google_cloudfunctions_cloud_function` environment_variables\n  * `source_archive_urls`: an array of `google_cloudfunctions_cloud_function` source_archive_url\n  * `source_upload_urls`: an array of `google_cloudfunctions_cloud_function` source_upload_url\n  * `source_repositories`: an array of `google_cloudfunctions_cloud_function` source_repository\n  * `https_triggers`: an array of `google_cloudfunctions_cloud_function` https_trigger\n  * `event_triggers`: an array of `google_cloudfunctions_cloud_function` event_trigger\n  * `locations`: an array of `google_cloudfunctions_cloud_function` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Functions API](https://console.cloud.google.com/apis/library/cloudfunctions.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_composer_project_location_environment.md",
    "content": "+++\ntitle = \"google_composer_project_location_environment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_composer_project_location_environment\"\nidentifier = \"inspec/resources/gcp/google_composer_project_location_environment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_composer_project_location_environment` InSpec audit resource to to test a Google Cloud ProjectLocationEnvironment resource.\n\n## Examples\n\n```ruby\ndescribe google_composer_project_location_environment(name: ' value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('uuid') { should cmp 'value_uuid' }\n\tits('state') { should cmp 'value_state' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n  its('satisfies_pzs') { should cmp 'value_satisfies_pzs' }\n  its('config.gke_cluster') { should cmp 'value_gke_cluster' }\n  its('labels.additional_properties') { should cmp label_hash }\n  its('storage_config.bucket') { should cmp 'value_bucket_id' }\nend\n\ndescribe google_composer_project_location_environment(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_composer_project_location_environment` resource:\n\n\n  * `name`: The resource name of the environment, in the form: \"projects/{projectId}/locations/{locationId}/environments/{environmentId}\" EnvironmentId must start with a lowercase letter followed by up to 63 lowercase letters, numbers, or hyphens, and cannot end with a hyphen.\n\n  * `config`: Configuration information for an environment.\n\n    * `gke_cluster`: Output only. The Kubernetes Engine cluster used to run this environment.\n\n    * `dag_gcs_prefix`: Output only. The Cloud Storage prefix of the DAGs for this environment. Although Cloud Storage objects reside in a flat namespace, a hierarchical file tree can be simulated using \"/\"-delimited object name prefixes. DAG objects for this environment reside in a simulated directory with the given prefix.\n\n    * `node_count`: The number of nodes in the Kubernetes Engine cluster that will be used to run this environment. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n    * `software_config`: Specifies the selection and configuration of software inside the environment.\n\n      * `image_version`: The version of the software running in the environment. This encapsulates both the version of Cloud Composer functionality and the version of Apache Airflow. It must match the regular expression `composer-([0-9]+(\\.[0-9]+\\.[0-9]+(-preview\\.[0-9]+)?)?|latest)-airflow-([0-9]+(\\.[0-9]+(\\.[0-9]+)?)?)`. When used as input, the server also checks if the provided version is supported and denies the request for an unsupported version. The Cloud Composer portion of the image version is a full [semantic version](https://semver.org), or an alias in the form of major version number or `latest`. When an alias is provided, the server replaces it with the current Cloud Composer version that satisfies the alias. The Apache Airflow portion of the image version is a full semantic version that points to one of the supported Apache Airflow versions, or an alias in the form of only major or major.minor versions specified. When an alias is provided, the server replaces it with the latest Apache Airflow version that satisfies the alias and is supported in the given Cloud Composer version. In all cases, the resolved image version is stored in the same field. See also [version list](/composer/docs/concepts/versioning/composer-versions) and [versioning overview](/composer/docs/concepts/versioning/composer-versioning-overview).\n\n      * `airflow_config_overrides`: Optional. Apache Airflow configuration properties to override. Property keys contain the section and property names, separated by a hyphen, for example \"core-dags_are_paused_at_creation\". Section names must not contain hyphens (\"-\"), opening square brackets (\"[\"), or closing square brackets (\"]\"). The property name must not be empty and must not contain an equals sign (\"=\") or semicolon (\";\"). Section and property names must not contain a period (\".\"). Apache Airflow configuration property names must be written in [snake_case](https://en.wikipedia.org/wiki/Snake_case). Property values can contain any character, and can be written in any lower/upper case format. Certain Apache Airflow configuration property values are [blocked](/composer/docs/concepts/airflow-configurations), and cannot be overridden.\n\n        * `additional_properties`:\n\n      * `pypi_packages`: Optional. Custom Python Package Index (PyPI) packages to be installed in the environment. Keys refer to the lowercase package name such as \"numpy\" and values are the lowercase extras and version specifier such as \"==1.12.0\", \"[devel,gcp_api]\", or \"[devel]>=1.8.2, <1.9.2\". To specify a package without pinning it to a version specifier, use the empty string as the value.\n\n        * `additional_properties`:\n\n      * `env_variables`: Optional. Additional environment variables to provide to the Apache Airflow scheduler, worker, and webserver processes. Environment variable names must match the regular expression `a-zA-Z_*`. They cannot specify Apache Airflow software configuration overrides (they cannot match the regular expression `AIRFLOW__[A-Z0-9_]+__[A-Z0-9_]+`), and they cannot match any of the following reserved names: * `AIRFLOW_HOME` * `C_FORCE_ROOT` * `CONTAINER_NAME` * `DAGS_FOLDER` * `GCP_PROJECT` * `GCS_BUCKET` * `GKE_CLUSTER_NAME` * `SQL_DATABASE` * `SQL_INSTANCE` * `SQL_PASSWORD` * `SQL_PROJECT` * `SQL_REGION` * `SQL_USER`\n\n        * `additional_properties`:\n\n      * `python_version`: Optional. The major version of Python used to run the Apache Airflow scheduler, worker, and webserver processes. Can be set to '2' or '3'. If not specified, the default is '3'. Cannot be updated. This field is only supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*. Environments in newer versions always use Python major version 3.\n\n      * `scheduler_count`: Optional. The number of schedulers for Airflow. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-2.*.*.\n\n    * `node_config`: The configuration information for the Kubernetes Engine nodes running the Apache Airflow software.\n\n      * `location`: Optional. The Compute Engine [zone](/compute/docs/regions-zones) in which to deploy the VMs used to run the Apache Airflow software, specified as a [relative resource name](/apis/design/resource_names#relative_resource_name). For example: \"projects/{projectId}/zones/{zoneId}\". This `location` must belong to the enclosing environment's project and location. If both this field and `nodeConfig.machineType` are specified, `nodeConfig.machineType` must belong to this `location`; if both are unspecified, the service will pick a zone in the Compute Engine region corresponding to the Cloud Composer location, and propagate that choice to both fields. If only one field (`location` or `nodeConfig.machineType`) is specified, the location information from the specified field will be propagated to the unspecified field. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `machine_type`: Optional. The Compute Engine [machine type](/compute/docs/machine-types) used for cluster instances, specified as a [relative resource name](/apis/design/resource_names#relative_resource_name). For example: \"projects/{projectId}/zones/{zoneId}/machineTypes/{machineTypeId}\". The `machineType` must belong to the enclosing environment's project and location. If both this field and `nodeConfig.location` are specified, this `machineType` must belong to the `nodeConfig.location`; if both are unspecified, the service will pick a zone in the Compute Engine region corresponding to the Cloud Composer location, and propagate that choice to both fields. If exactly one of this field and `nodeConfig.location` is specified, the location information from the specified field will be propagated to the unspecified field. The `machineTypeId` must not be a [shared-core machine type](/compute/docs/machine-types#sharedcore). If this field is unspecified, the `machineTypeId` defaults to \"n1-standard-1\". This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `network`: Optional. The Compute Engine network to be used for machine communications, specified as a [relative resource name](/apis/design/resource_names#relative_resource_name). For example: \"projects/{projectId}/global/networks/{networkId}\". If unspecified, the \"default\" network ID in the environment's project is used. If a [Custom Subnet Network](/vpc/docs/vpc#vpc_networks_and_subnets) is provided, `nodeConfig.subnetwork` must also be provided. For [Shared VPC](/vpc/docs/shared-vpc) subnetwork requirements, see `nodeConfig.subnetwork`.\n\n      * `subnetwork`: Optional. The Compute Engine subnetwork to be used for machine communications, specified as a [relative resource name](/apis/design/resource_names#relative_resource_name). For example: \"projects/{projectId}/regions/{regionId}/subnetworks/{subnetworkId}\" If a subnetwork is provided, `nodeConfig.network` must also be provided, and the subnetwork must belong to the enclosing environment's project and location.\n\n      * `disk_size_gb`: Optional. The disk size in GB used for node VMs. Minimum size is 30GB. If unspecified, defaults to 100GB. Cannot be updated. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `oauth_scopes`: Optional. The set of Google API scopes to be made available on all node VMs. If `oauth_scopes` is empty, defaults to [\"https://www.googleapis.com/auth/cloud-platform\"]. Cannot be updated. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `service_account`: Optional. The Google Cloud Platform Service Account to be used by the node VMs. If a service account is not specified, the \"default\" Compute Engine service account is used. Cannot be updated.\n\n      * `tags`: Optional. The list of instance tags applied to all node VMs. Tags are used to identify valid sources or targets for network firewalls. Each tag within the list must comply with [RFC1035](https://www.ietf.org/rfc/rfc1035.txt). Cannot be updated.\n\n      * `ip_allocation_policy`: Configuration for controlling how IPs are allocated in the GKE cluster running the Apache Airflow software.\n\n        * `use_ip_aliases`: Optional. Whether or not to enable Alias IPs in the GKE cluster. If `true`, a VPC-native cluster is created. This field is only supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*. Environments in newer versions always use VPC-native GKE clusters.\n\n        * `cluster_secondary_range_name`: Optional. The name of the GKE cluster's secondary range used to allocate IP addresses to pods. For Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*, this field is applicable only when `use_ip_aliases` is true.\n\n        * `cluster_ipv4_cidr_block`: Optional. The IP address range used to allocate IP addresses to pods in the GKE cluster. For Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*, this field is applicable only when `use_ip_aliases` is true. Set to blank to have GKE choose a range with the default size. Set to /netmask (e.g. `/14`) to have GKE choose a range with a specific netmask. Set to a [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range to use.\n\n        * `services_secondary_range_name`: Optional. The name of the services' secondary range used to allocate IP addresses to the GKE cluster. For Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*, this field is applicable only when `use_ip_aliases` is true.\n\n        * `services_ipv4_cidr_block`: Optional. The IP address range of the services IP addresses in this GKE cluster. For Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*, this field is applicable only when `use_ip_aliases` is true. Set to blank to have GKE choose a range with the default size. Set to /netmask (e.g. `/14`) to have GKE choose a range with a specific netmask. Set to a [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range to use.\n\n      * `enable_ip_masq_agent`: Optional. Deploys 'ip-masq-agent' daemon set in the GKE cluster and defines nonMasqueradeCIDRs equals to pod IP range so IP masquerading is used for all destination addresses, except between pods traffic. See: https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent\n\n    * `private_environment_config`: The configuration information for configuring a Private IP Cloud Composer environment.\n\n      * `enable_private_environment`: Optional. If `true`, a Private IP Cloud Composer environment is created. If this field is set to true, `IPAllocationPolicy.use_ip_aliases` must be set to true for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `private_cluster_config`: Configuration options for the private GKE cluster in a Cloud Composer environment.\n\n        * `enable_private_endpoint`: Optional. If `true`, access to the public endpoint of the GKE cluster is denied.\n\n        * `master_ipv4_cidr_block`: Optional. The CIDR block from which IPv4 range for GKE master will be reserved. If left blank, the default value of '172.16.0.0/23' is used.\n\n        * `master_ipv4_reserved_range`: Output only. The IP range in CIDR notation to use for the hosted master network. This range is used for assigning internal IP addresses to the GKE cluster master or set of masters and to the internal load balancer virtual IP. This range must not overlap with any other ranges in use within the cluster's network.\n\n      * `web_server_ipv4_cidr_block`: Optional. The CIDR block from which IP range for web server will be reserved. Needs to be disjoint from `private_cluster_config.master_ipv4_cidr_block` and `cloud_sql_ipv4_cidr_block`. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `cloud_sql_ipv4_cidr_block`: Optional. The CIDR block from which IP range in tenant project will be reserved for Cloud SQL. Needs to be disjoint from `web_server_ipv4_cidr_block`.\n\n      * `web_server_ipv4_reserved_range`: Output only. The IP range reserved for the tenant project's App Engine VMs. This field is supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `cloud_composer_network_ipv4_cidr_block`: Optional. The CIDR block from which IP range for Cloud Composer Network in tenant project will be reserved. Needs to be disjoint from private_cluster_config.master_ipv4_cidr_block and cloud_sql_ipv4_cidr_block. This field is supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.\n\n      * `cloud_composer_network_ipv4_reserved_range`: Output only. The IP range reserved for the tenant project's Cloud Composer network. This field is supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.\n\n      * `enable_privately_used_public_ips`: Optional. When enabled, IPs from public (non-RFC1918) ranges can be used for `IPAllocationPolicy.cluster_ipv4_cidr_block` and `IPAllocationPolicy.service_ipv4_cidr_block`.\n\n      * `cloud_composer_connection_subnetwork`: Optional. When specified, the environment will use Private Service Connect instead of VPC peerings to connect to Cloud SQL in the Tenant Project, and the PSC endpoint in the Customer Project will use an IP address from this subnetwork.\n\n      * `networking_config`: Configuration options for networking connections in the Composer 2 environment.\n\n        * `connection_type`: Optional. Indicates the user requested specifc connection type between Tenant and Customer projects. You cannot set networking connection type in public IP environment.\n        Possible values:\n          * CONNECTION_TYPE_UNSPECIFIED\n          * VPC_PEERING\n          * PRIVATE_SERVICE_CONNECT\n\n    * `web_server_network_access_control`: Network-level access control policy for the Airflow web server.\n\n      * `allowed_ip_ranges`: A collection of allowed IP ranges with descriptions.\n\n        * `value`: IP address or range, defined using CIDR notation, of requests that this rule applies to. Examples: `192.168.1.1` or `192.168.0.0/16` or `2001:db8::/32` or `2001:0db8:0000:0042:0000:8a2e:0370:7334`. IP range prefixes should be properly truncated. For example, `1.2.3.4/24` should be truncated to `1.2.3.0/24`. Similarly, for IPv6, `2001:db8::1/32` should be truncated to `2001:db8::/32`.\n\n        * `description`: Optional. User-provided description. It must contain at most 300 characters.\n\n    * `database_config`: The configuration of Cloud SQL instance that is used by the Apache Airflow software.\n\n      * `machine_type`: Optional. Cloud SQL machine type used by Airflow database. It has to be one of: db-n1-standard-2, db-n1-standard-4, db-n1-standard-8 or db-n1-standard-16. If not specified, db-n1-standard-2 will be used. Supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `zone`: Optional. The Compute Engine zone where the Airflow database is created. If zone is provided, it must be in the region selected for the environment. If zone is not provided, a zone is automatically selected. The zone can only be set during environment creation. Supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.*.\n\n    * `web_server_config`: The configuration settings for the Airflow web server App Engine instance. Supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*\n\n      * `machine_type`: Optional. Machine type on which Airflow web server is running. It has to be one of: composer-n1-webserver-2, composer-n1-webserver-4 or composer-n1-webserver-8. If not specified, composer-n1-webserver-2 will be used. Value custom is returned only in response, if Airflow web server parameters were manually changed to a non-standard values.\n\n    * `encryption_config`: The encryption options for the Cloud Composer environment and its dependencies.Supported for Cloud Composer environments in versions composer-1.*.*-airflow-*.*.*.\n\n      * `kms_key_name`: Optional. Customer-managed Encryption Key available through Google's Key Management Service. Cannot be updated. If not specified, Google-managed key will be used.\n\n    * `maintenance_window`: The configuration settings for Cloud Composer maintenance window. The following example: ``` { \"startTime\":\"2019-08-01T01:00:00Z\" \"endTime\":\"2019-08-01T07:00:00Z\" \"recurrence\":\"FREQ=WEEKLY;BYDAY=TU,WE\" } ``` would define a maintenance window between 01 and 07 hours UTC during each Tuesday and Wednesday.\n\n      * `start_time`: Required. Start time of the first recurrence of the maintenance window.\n\n      * `end_time`: Required. Maintenance window end time. It is used only to calculate the duration of the maintenance window. The value for end-time must be in the future, relative to `start_time`.\n\n      * `recurrence`: Required. Maintenance window recurrence. Format is a subset of [RFC-5545](https://tools.ietf.org/html/rfc5545) `RRULE`. The only allowed values for `FREQ` field are `FREQ=DAILY` and `FREQ=WEEKLY;BYDAY=...` Example values: `FREQ=WEEKLY;BYDAY=TU,WE`, `FREQ=DAILY`.\n\n    * `workloads_config`: The Kubernetes workloads configuration for GKE cluster associated with the Cloud Composer environment. Supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.\n\n      * `scheduler`: Configuration for resources used by Airflow schedulers.\n\n        * `cpu`: Optional. CPU request and limit for a single Airflow scheduler replica.\n\n        * `memory_gb`: Optional. Memory (GB) request and limit for a single Airflow scheduler replica.\n\n        * `storage_gb`: Optional. Storage (GB) request and limit for a single Airflow scheduler replica.\n\n        * `count`: Optional. The number of schedulers.\n\n      * `web_server`: Configuration for resources used by Airflow web server.\n\n        * `cpu`: Optional. CPU request and limit for Airflow web server.\n\n        * `memory_gb`: Optional. Memory (GB) request and limit for Airflow web server.\n\n        * `storage_gb`: Optional. Storage (GB) request and limit for Airflow web server.\n\n      * `worker`: Configuration for resources used by Airflow workers.\n\n        * `cpu`: Optional. CPU request and limit for a single Airflow worker replica.\n\n        * `memory_gb`: Optional. Memory (GB) request and limit for a single Airflow worker replica.\n\n        * `storage_gb`: Optional. Storage (GB) request and limit for a single Airflow worker replica.\n\n        * `min_count`: Optional. Minimum number of workers for autoscaling.\n\n        * `max_count`: Optional. Maximum number of workers for autoscaling.\n\n      * `triggerer`: Configuration for resources used by Airflow triggerers.\n\n        * `count`: Optional. The number of triggerers.\n\n        * `cpu`: Optional. CPU request and limit for a single Airflow triggerer replica.\n\n        * `memory_gb`: Optional. Memory (GB) request and limit for a single Airflow triggerer replica.\n\n    * `environment_size`: Optional. The size of the Cloud Composer environment. This field is supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.\n    Possible values:\n      * ENVIRONMENT_SIZE_UNSPECIFIED\n      * ENVIRONMENT_SIZE_SMALL\n      * ENVIRONMENT_SIZE_MEDIUM\n      * ENVIRONMENT_SIZE_LARGE\n\n    * `airflow_uri`: Output only. The URI of the Apache Airflow Web UI hosted within this environment (see [Airflow web interface](/composer/docs/how-to/accessing/airflow-web-interface)).\n\n    * `airflow_byoid_uri`: Output only. The 'bring your own identity' variant of the URI of the Apache Airflow Web UI hosted within this environment, to be accessed with external identities using workforce identity federation (see [Access environments with workforce identity federation](/composer/docs/composer-2/access-environments-with-workforce-identity-federation)).\n\n    * `master_authorized_networks_config`: Configuration options for the master authorized networks feature. Enabled master authorized networks will disallow all external traffic to access Kubernetes master through HTTPS except traffic from the given CIDR blocks, Google Compute Engine Public IPs and Google Prod IPs.\n\n      * `enabled`: Whether or not master authorized networks feature is enabled.\n\n      * `cidr_blocks`: Up to 50 external networks that could access Kubernetes master through HTTPS.\n\n        * `display_name`: User-defined name that identifies the CIDR block.\n\n        * `cidr_block`: CIDR block that must be specified in CIDR notation.\n\n    * `recovery_config`: The Recovery settings of an environment.\n\n      * `scheduled_snapshots_config`: The configuration for scheduled snapshot creation mechanism.\n\n        * `enabled`: Optional. Whether scheduled snapshots creation is enabled.\n\n        * `snapshot_location`: Optional. The Cloud Storage location for storing automatically created snapshots.\n\n        * `snapshot_creation_schedule`: Optional. The cron expression representing the time when snapshots creation mechanism runs. This field is subject to additional validation around frequency of execution.\n\n        * `time_zone`: Optional. Time zone that sets the context to interpret snapshot_creation_schedule.\n\n    * `resilience_mode`: Optional. Resilience mode of the Cloud Composer Environment. This field is supported for Cloud Composer environments in versions composer-2.2.0-airflow-*.*.* and newer.\n    Possible values:\n      * RESILIENCE_MODE_UNSPECIFIED\n      * HIGH_RESILIENCE\n\n  * `uuid`: Output only. The UUID (Universally Unique IDentifier) associated with this environment. This value is generated when the environment is created.\n\n  * `state`: The current state of the environment.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * RUNNING\n    * UPDATING\n    * DELETING\n    * ERROR\n\n  * `create_time`: Output only. The time at which this environment was created.\n\n  * `update_time`: Output only. The time at which this environment was last modified.\n\n  * `labels`: Optional. User-defined labels for this environment. The labels map can contain no more than 64 entries. Entries of the labels map are UTF8 strings that comply with the following restrictions: * Keys must conform to regexp: \\p{Ll}\\p{Lo}{0,62} * Values must conform to regexp: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} * Both keys and values are additionally constrained to be <= 128 bytes in size.\n\n    * `additional_properties`:\n\n  * `satisfies_pzs`: Output only. Reserved for future use.\n\n  * `storage_config`: The configuration for data storage in the environment.\n\n    * `bucket`: Optional. The name of the Cloud Storage bucket used by the environment. No `gs://` prefix.\n\n\n## GCP permissions\n\nEnsure the [https://composer.googleapis.com/](https://console.cloud.google.com/apis/library/composer.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_composer_project_location_environments.md",
    "content": "+++\ntitle = \"google_composer_project_location_environments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_composer_project_location_environments\"\nidentifier = \"inspec/resources/gcp/google_composer_project_location_environments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_composer_project_location_environments` InSpec audit resource to to test a Google Cloud ProjectLocationEnvironment resource.\n\n## Examples\n\n```ruby\n    describe google_composer_project_location_environments(parent: ' value_parent') do\n    it { should exist }\n    its('name') { should include('value_name') }\n    its('uuid') { should include('value_uuid') }\n    its('state') { should include('value_state') }\n    its('create_time') { should include('value_createtime') }\n    its('update_time') { should include('value_updatetime') }\n    its('satisfies_pzs') { should include('value_satisfies_pzs') }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_composer_project_location_environments` resource:\n\nSee [google_composer_project_location_environment](google_composer_project_location_environment) for more detailed information.\n\n  * `names`: an array of `google_composer_project_location_environment` name\n  * `configs`: an array of `google_composer_project_location_environment` config\n  * `uuids`: an array of `google_composer_project_location_environment` uuid\n  * `states`: an array of `google_composer_project_location_environment` state\n  * `create_times`: an array of `google_composer_project_location_environment` create_time\n  * `update_times`: an array of `google_composer_project_location_environment` update_time\n  * `labels`: an array of `google_composer_project_location_environment` labels\n  * `satisfies_pzs`: an array of `google_composer_project_location_environment` satisfies_pzs\n  * `storage_configs`: an array of `google_composer_project_location_environment` storage_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://composer.googleapis.com/](https://console.cloud.google.com/apis/library/composer.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_composer_project_location_image_versions.md",
    "content": "+++\ntitle = \"google_composer_project_location_image_versions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_composer_project_location_image_versions\"\nidentifier = \"inspec/resources/gcp/google_composer_project_location_image_versions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_composer_project_location_image_versions` InSpec audit resource to to test a Google Cloud ProjectLocationImageVersion resource.\n\n## Examples\n\n```ruby\n    describe google_composer_project_location_image_versions(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_composer_project_location_image_versions` resource:\n\nSee [google_composer_project_location_image_version](google_composer_project_location_image_version) for more detailed information.\n\n  * `image_versions`: an array of `google_composer_project_location_image_version` image_versions\n  * `next_page_tokens`: an array of `google_composer_project_location_image_version` next_page_token\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://composer.googleapis.com/](https://console.cloud.google.com/apis/library/composer.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_accelerator_type.md",
    "content": "+++\ntitle = \"google_compute_accelerator_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_accelerator_type\"\nidentifier = \"inspec/resources/gcp/google_compute_accelerator_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_accelerator_type` InSpec audit resource to to test a Google Cloud AcceleratorType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_accelerator_type(project: 'chef-gcp-inspec', zone: 'us-east1-b', name: 'accelerator_id') do\n  it { should exist }\n  it { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_accelerator_type` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `deprecated`: The deprecation status associated with this accelerator type.\n\n    * `state`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * DEPRECATED\n      * OBSOLETE\n      * DELETED\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `zone`: The name of the zone where the accelerator type resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_accelerator_types.md",
    "content": "+++\ntitle = \"google_compute_accelerator_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_accelerator_types\"\nidentifier = \"inspec/resources/gcp/google_compute_accelerator_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_accelerator_types` InSpec audit resource to to test a Google Cloud AcceleratorType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_accelerator_types(project: 'chef-gcp-inspec', zone: 'us-east1-b') do\nit { should exist }\nit { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_accelerator_types` resource:\n\nSee [google_compute_accelerator_type](google_compute_accelerator_type) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_accelerator_type` creation_timestamp\n  * `deprecateds`: an array of `google_compute_accelerator_type` deprecated\n  * `descriptions`: an array of `google_compute_accelerator_type` description\n  * `ids`: an array of `google_compute_accelerator_type` id\n  * `names`: an array of `google_compute_accelerator_type` name\n  * `zones`: an array of `google_compute_accelerator_type` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_address.md",
    "content": "+++\ntitle = \"google_compute_address resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_address\"\nidentifier = \"inspec/resources/gcp/google_compute_address resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_address` is used to test a Google Address resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_address(project: 'chef-gcp-inspec', location: 'europe-west2', name: 'inspec-gcp-global-address') do\n  it { should exist }\n  its('address') { should eq '10.2.0.3' }\n  its('address_type') { should eq 'INTERNAL' }\n  its('user_count') { should eq 0 }\nend\n\ndescribe google_compute_address(project: 'chef-gcp-inspec', location: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute address IP exists\n\n    describe google_compute_address(project: 'chef-inspec-gcp', location: 'europe-west2', name: 'compute-address') do\n      its('address_ip_exists')  { should be true }\n    end\n\n### Test that a GCP compute address is in a particular status\n\n    describe google_compute_address(project: 'chef-inspec-gcp', location: 'europe-west2', name: 'compute-address') do\n      its('status') { should eq \"IN_USE\" }\n    end\n\n### Test that a GCP compute address IP has the expected number of users\n\n    describe google_compute_address(project: 'chef-inspec-gcp', location: 'europe-west2', name: 'compute-address') do\n      its('user_count') { should eq 1 }\n    end\n\n### Test that the first user of a GCP compute address has the expected resource name\n\n    describe google_compute_address(project: 'chef-inspec-gcp', location: 'europe-west2', name: 'compute-address') do\n      its('user_resource_name') { should eq \"gcp_ext_vm_name\" }\n    end\n\n\n## Properties\n\nProperties that can be accessed from the `google_compute_address` resource:\n\n\n  * `address`: The static external IP address represented by this resource. Only IPv4 is supported. An address may only be specified for INTERNAL address types. The IP address must be inside the specified subnetwork, if any.\n\n  * `address_type`: The type of address to reserve.\n  Possible values:\n    * INTERNAL\n    * EXTERNAL\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `purpose`: The purpose of this resource, which can be one of the following values:  * GCE_ENDPOINT for addresses that are used by VM instances, alias IP ranges, internal load balancers, and similar resources.  * SHARED_LOADBALANCER_VIP for an address that can be used by multiple internal load balancers.  * VPC_PEERING for addresses that are reserved for VPC peer networks.  This should only be set when using an Internal address.\n  Possible values:\n    * GCE_ENDPOINT\n    * VPC_PEERING\n    * SHARED_LOADBALANCER_VIP\n\n  * `network_tier`: The networking tier used for configuring this address. If this field is not specified, it is assumed to be PREMIUM.\n  Possible values:\n    * PREMIUM\n    * STANDARD\n\n  * `subnetwork`: The URL of the subnetwork in which to reserve the address. If an IP address is specified, it must be within the subnetwork's IP range. This field can only be used with INTERNAL type with GCE_ENDPOINT/DNS_RESOLVER purposes.\n\n  * `users`: The URLs of the resources that are using this address.\n\n  * `labels`: (Beta only) Labels to apply to this address.  A list of key->value pairs.\n\n  * `label_fingerprint`: (Beta only) The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `status`: The status of the address, which can be one of RESERVING, RESERVED, or IN_USE. An address that is RESERVING is currently in the process of being reserved. A RESERVED address is currently reserved and available to use. An IN_USE address is currently being used by another resource and is not available.\n  Possible values:\n    * RESERVING\n    * RESERVED\n    * IN_USE\n\n  * `region`: URL of the region where the regional address resides. This field is not applicable to global addresses.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_addresses.md",
    "content": "+++\ntitle = \"google_compute_addresses resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_addresses\"\nidentifier = \"inspec/resources/gcp/google_compute_addresses resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_addresses` is used to test a Google Address resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_addresses(project: 'chef-gcp-inspec', location: 'europe-west2') do\n  its('addresses') { should include '10.2.0.3' }\n  its('names') { should include 'inspec-gcp-global-address' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_addresses` resource:\n\nSee [google_compute_address](google_compute_address) for more detailed information.\n\n  * `addresses`: an array of `google_compute_address` address\n  * `address_types`: an array of `google_compute_address` address_type\n  * `creation_timestamps`: an array of `google_compute_address` creation_timestamp\n  * `descriptions`: an array of `google_compute_address` description\n  * `ids`: an array of `google_compute_address` id\n  * `names`: an array of `google_compute_address` name\n  * `purposes`: an array of `google_compute_address` purpose\n  * `network_tiers`: an array of `google_compute_address` network_tier\n  * `subnetworks`: an array of `google_compute_address` subnetwork\n  * `users`: an array of `google_compute_address` users\n  * `labels`: (Beta only) an array of `google_compute_address` labels\n  * `label_fingerprints`: (Beta only) an array of `google_compute_address` label_fingerprint\n  * `statuses`: an array of `google_compute_address` status\n  * `regions`: an array of `google_compute_address` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_autoscaler.md",
    "content": "+++\ntitle = \"google_compute_autoscaler resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_autoscaler\"\nidentifier = \"inspec/resources/gcp/google_compute_autoscaler resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_autoscaler` is used to test a Google Autoscaler resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_autoscaler(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-gcp-autoscaler') do\n  it { should exist }\n\n  its('target') { should match /\\/inspec-gcp-igm$/ }\n  its('autoscaling_policy.max_num_replicas') { should eq '5' }\n  its('autoscaling_policy.min_num_replicas') { should eq '1' }\n  its('autoscaling_policy.cool_down_period_sec') { should eq '60' }\n  its('autoscaling_policy.cpu_utilization.utilization_target') { should eq '0.5' }\nend\n\ndescribe google_compute_autoscaler(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_autoscaler` resource:\n\n\n  * `id`: Unique identifier for the resource.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource.\n\n  * `autoscaling_policy`: The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.  If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.\n\n    * `min_num_replicas`: The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.\n\n    * `max_num_replicas`: The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.\n\n    * `cool_down_period_sec`: The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.  Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.\n\n    * `mode`: Defines operating mode for this policy.\n    Possible values:\n      * OFF\n      * ONLY_UP\n      * ON\n\n    * `scale_down_control`: (Beta only) Defines scale down controls to reduce the risk of response latency and outages due to abrupt scale-in events\n\n      * `max_scaled_down_replicas`: A nested object resource\n\n        * `fixed`: Specifies a fixed number of VM instances. This must be a positive integer.\n\n        * `percent`: Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.\n\n      * `time_window_sec`: How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.\n\n    * `scale_in_control`: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events\n\n      * `max_scaled_in_replicas`: A nested object resource\n\n        * `fixed`: Specifies a fixed number of VM instances. This must be a positive integer.\n\n        * `percent`: Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.\n\n      * `time_window_sec`: How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.\n\n    * `cpu_utilization`: Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.\n\n      * `utilization_target`: The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.6.  If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.  If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.\n\n      * `predictive_method`: (Beta only) Indicates whether predictive autoscaling based on CPU metric is enabled. Valid values are:  - NONE (default). No predictive method is used. The autoscaler scales the group to meet current demand based on real-time metrics.  - OPTIMIZE_AVAILABILITY. Predictive autoscaling improves availability by monitoring daily and weekly load patterns and scaling out ahead of anticipated demand.\n\n    * `custom_metric_utilizations`: Configuration parameters of autoscaling based on a custom metric.\n\n      * `metric`: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values.  The metric must have a value type of INT64 or DOUBLE.\n\n      * `single_instance_assignment`: (Beta only) If scaling is based on a per-group metric value that represents the total amount of work to be done or resource usage, set this value to an amount assigned for a single instance of the scaled group. The autoscaler will keep the number of instances proportional to the value of this metric, the metric itself should not change value due to group resizing.  For example, a good metric to use with the target is `pubsub.googleapis.com/subscription/num_undelivered_messages` or a custom metric exporting the total number of requests coming to your instances.  A bad example would be a metric exporting an average or median latency, since this value can't include a chunk assignable to a single instance, it could be better used with utilization_target instead.\n\n      * `utilization_target`: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests to increase or decrease proportionally to the metric.  For example, a good metric to use as a utilizationTarget is www.googleapis.com/compute/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.\n\n      * `utilization_target_type`: Defines how target utilization value is expressed for a Stackdriver Monitoring metric.\n      Possible values:\n        * GAUGE\n        * DELTA_PER_SECOND\n        * DELTA_PER_MINUTE\n\n      * `filter`: (Beta only) A filter string to be used as the filter string for a Stackdriver Monitoring TimeSeries.list API call. This filter is used to select a specific TimeSeries for the purpose of autoscaling and to determine whether the metric is exporting per-instance or per-group data.  You can only use the AND operator for joining selectors. You can only use direct equality comparison operator (=) without any functions for each selector. You can specify the metric in both the filter string and in the metric field. However, if specified in both places, the metric must be identical.  The monitored resource type determines what kind of values are expected for the metric. If it is a gce_instance, the autoscaler expects the metric to include a separate TimeSeries for each instance in a group. In such a case, you cannot filter on resource labels.  If the resource type is any other value, the autoscaler expects this metric to contain values that apply to the entire autoscaled instance group and resource label filtering can be performed to point autoscaler at the correct TimeSeries to scale upon. This is called a per-group metric for the purpose of autoscaling.  If not specified, the type defaults to gce_instance.  You should provide a filter that is selective enough to pick just one TimeSeries for the autoscaled group or for each of the instances (if you are using gce_instance resource type). If multiple TimeSeries are returned upon the query execution, the autoscaler will sum their respective values to obtain its scaling value.\n\n    * `load_balancing_utilization`: Configuration parameters of autoscaling based on a load balancer.\n\n      * `utilization_target`: Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.\n\n    * `scaling_schedules`: (Beta only) Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler and they can overlap.\n\n  * `target`: URL of the managed instance group that this autoscaler will scale.\n\n  * `zone`: URL of the zone where the instance group resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_autoscalers.md",
    "content": "+++\ntitle = \"google_compute_autoscalers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_autoscalers\"\nidentifier = \"inspec/resources/gcp/google_compute_autoscalers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_autoscalers` is used to test a Google Autoscaler resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\nautoscalers = google_compute_autoscalers(project: 'chef-gcp-inspec', zone: 'zone')\ndescribe.one do\n  autoscalers.autoscaling_policies.each do |autoscaling_policy|\n    describe autoscaling_policy do\n        its('max_num_replicas') { should eq '5' }\n        its('min_num_replicas') { should eq '1' }\n        its('cool_down_period_sec') { should eq '60' }\n        its('cpu_utilization.utilization_target') { should eq '0.5' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_autoscalers` resource:\n\nSee [google_compute_autoscaler](google_compute_autoscaler) for more detailed information.\n\n  * `ids`: an array of `google_compute_autoscaler` id\n  * `creation_timestamps`: an array of `google_compute_autoscaler` creation_timestamp\n  * `names`: an array of `google_compute_autoscaler` name\n  * `descriptions`: an array of `google_compute_autoscaler` description\n  * `autoscaling_policies`: an array of `google_compute_autoscaler` autoscaling_policy\n  * `targets`: an array of `google_compute_autoscaler` target\n  * `zones`: an array of `google_compute_autoscaler` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_backend_bucket.md",
    "content": "+++\ntitle = \"google_compute_backend_bucket resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_backend_bucket\"\nidentifier = \"inspec/resources/gcp/google_compute_backend_bucket resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_backend_bucket` is used to test a Google BackendBucket resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_backend_bucket(project: 'chef-gcp-inspec', name: 'inspec-gcp-backend-bucket') do\n  it { should exist }\n  its('description') { should eq 'Backend bucket example' }\n  its('enable_cdn') { should be 'true' }\n  its('bucket_name') { should eq 'gcp-inspec-storage-bucket' }\nend\n\ndescribe google_compute_backend_bucket(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_backend_bucket` resource:\n\n\n  * `bucket_name`: Cloud Storage bucket name.\n\n  * `cdn_policy`: Cloud CDN configuration for this Backend Bucket.\n\n    * `signed_url_cache_max_age_sec`: Maximum number of seconds the response to a signed URL request will be considered fresh. After this time period, the response will be revalidated before being served. When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a \"Cache-Control: public, max-age=[TTL]\" header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.\n\n    * `default_ttl`: (Beta only) Specifies the default TTL for cached content served by this origin for responses  that do not have an existing valid TTL (max-age or s-max-age).\n\n    * `max_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `client_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `negative_caching`: (Beta only) Negative caching allows per-status code TTLs to be set, in order to apply fine-grained caching for common errors or redirects.\n\n    * `negative_caching_policy`: (Beta only) Sets a cache TTL for the specified HTTP status code. negativeCaching must be enabled to configure negativeCachingPolicy. Omitting the policy and leaving negativeCaching enabled will use Cloud CDN's default cache TTLs.\n\n      * `code`: (Beta only) The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 can be specified as values, and you cannot specify a status code more than once.\n\n      * `ttl`: (Beta only) The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL.\n\n    * `cache_mode`: (Beta only) Specifies the cache setting for all responses from this backend. The possible values are: USE_ORIGIN_HEADERS, FORCE_CACHE_ALL and CACHE_ALL_STATIC\n    Possible values:\n      * USE_ORIGIN_HEADERS\n      * FORCE_CACHE_ALL\n      * CACHE_ALL_STATIC\n\n    * `serve_while_stale`: (Beta only) Serve existing content from the cache (if available) when revalidating content with the origin, or when an error is encountered when refreshing the cache. \n\n  * `custom_response_headers`: (Beta only) Headers that the HTTP/S load balancer should add to proxied responses.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional textual description of the resource; provided by the client when the resource is created.\n\n  * `enable_cdn`: If true, enable Cloud CDN for this BackendBucket.\n\n  * `id`: Unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_backend_buckets.md",
    "content": "+++\ntitle = \"google_compute_backend_buckets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_backend_buckets\"\nidentifier = \"inspec/resources/gcp/google_compute_backend_buckets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_backend_buckets` is used to test a Google BackendBucket resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_backend_buckets(project: 'chef-gcp-inspec', name: 'inspec-gcp-backend-bucket') do\n  its('descriptions') { should include 'Backend bucket example' }\n  its('bucket_names') { should include 'gcp-inspec-storage-bucket' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_backend_buckets` resource:\n\nSee [google_compute_backend_bucket](google_compute_backend_bucket) for more detailed information.\n\n  * `bucket_names`: an array of `google_compute_backend_bucket` bucket_name\n  * `cdn_policies`: an array of `google_compute_backend_bucket` cdn_policy\n  * `custom_response_headers`: (Beta only) an array of `google_compute_backend_bucket` custom_response_headers\n  * `creation_timestamps`: an array of `google_compute_backend_bucket` creation_timestamp\n  * `descriptions`: an array of `google_compute_backend_bucket` description\n  * `enable_cdns`: an array of `google_compute_backend_bucket` enable_cdn\n  * `ids`: an array of `google_compute_backend_bucket` id\n  * `names`: an array of `google_compute_backend_bucket` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_backend_service.md",
    "content": "+++\ntitle = \"google_compute_backend_service resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_backend_service\"\nidentifier = \"inspec/resources/gcp/google_compute_backend_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_backend_service` is used to test a Google BackendService resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_backend_service(project: 'chef-gcp-inspec', name: 'inspec-gcp-backend-service') do\n  it { should exist }\n  its('description') { should eq 'A description' }\n  its('port_name') { should eq 'http' }\n  its('protocol') { should eq 'HTTP' }\n  its('timeout_sec') { should eq '10' }\n  its('enable_cdn') { should eq 'true' }\nend\n\ndescribe google_compute_backend_service(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_backend_service` resource:\n\n\n  * `affinity_cookie_ttl_sec`: Lifetime of cookies in seconds if session_affinity is GENERATED_COOKIE. If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value for TTL is one day.  When the load balancing scheme is INTERNAL, this field is not used.\n\n  * `backends`: The set of backends that serve this BackendService.\n\n    * `balancing_mode`: Specifies the balancing mode for this backend.  For global HTTP(S) or TCP/SSL load balancing, the default is UTILIZATION. Valid values are UTILIZATION, RATE (for HTTP(S)) and CONNECTION (for TCP/SSL).\n    Possible values:\n      * UTILIZATION\n      * RATE\n      * CONNECTION\n\n    * `capacity_scaler`: A multiplier applied to the group's maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION).  Default value is 1, which means the group will serve up to 100% of its configured capacity (depending on balancingMode). A setting of 0 means the group is completely drained, offering 0% of its available Capacity. Valid range is [0.0,1.0].\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `group`: The fully-qualified URL of an Instance Group or Network Endpoint Group resource. In case of instance group this defines the list of instances that serve traffic. Member virtual machine instances from each instance group must live in the same zone as the instance group itself. No two backends in a backend service are allowed to use same Instance Group resource.  For Network Endpoint Groups this defines list of endpoints. All endpoints of Network Endpoint Group must be hosted on instances located in the same zone as the Network Endpoint Group.  Backend services cannot mix Instance Group and Network Endpoint Group backends.  Note that you must specify an Instance Group or Network Endpoint Group resource using the fully-qualified URL, rather than a partial URL.\n\n    * `max_connections`: The max number of simultaneous connections for the group. Can be used with either CONNECTION or UTILIZATION balancing modes.  For CONNECTION mode, either maxConnections or one of maxConnectionsPerInstance or maxConnectionsPerEndpoint, as appropriate for group type, must be set.\n\n    * `max_connections_per_instance`: The max number of simultaneous connections that a single backend instance can handle. This is used to calculate the capacity of the group. Can be used in either CONNECTION or UTILIZATION balancing modes.  For CONNECTION mode, either maxConnections or maxConnectionsPerInstance must be set.\n\n    * `max_connections_per_endpoint`: The max number of simultaneous connections that a single backend network endpoint can handle. This is used to calculate the capacity of the group. Can be used in either CONNECTION or UTILIZATION balancing modes.  For CONNECTION mode, either maxConnections or maxConnectionsPerEndpoint must be set.\n\n    * `max_rate`: The max requests per second (RPS) of the group.  Can be used with either RATE or UTILIZATION balancing modes, but required if RATE mode. For RATE mode, either maxRate or one of maxRatePerInstance or maxRatePerEndpoint, as appropriate for group type, must be set.\n\n    * `max_rate_per_instance`: The max requests per second (RPS) that a single backend instance can handle. This is used to calculate the capacity of the group. Can be used in either balancing mode. For RATE mode, either maxRate or maxRatePerInstance must be set.\n\n    * `max_rate_per_endpoint`: The max requests per second (RPS) that a single backend network endpoint can handle. This is used to calculate the capacity of the group. Can be used in either balancing mode. For RATE mode, either maxRate or maxRatePerEndpoint must be set.\n\n    * `max_utilization`: Used when balancingMode is UTILIZATION. This ratio defines the CPU utilization target for the group. The default is 0.8. Valid range is [0.0, 1.0].\n\n  * `circuit_breakers`: Settings controlling the volume of connections to a backend service. This field is applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.\n\n    * `connect_timeout`: (Beta only) The timeout for new network connections to hosts.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n    * `max_requests_per_connection`: Maximum requests for a single backend connection. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.\n\n    * `max_connections`: The maximum number of connections to the backend cluster. Defaults to 1024.\n\n    * `max_pending_requests`: The maximum number of pending requests to the backend cluster. Defaults to 1024.\n\n    * `max_requests`: The maximum number of parallel requests to the backend cluster. Defaults to 1024.\n\n    * `max_retries`: The maximum number of parallel retries to the backend cluster. Defaults to 3.\n\n  * `consistent_hash`: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field only applies if the load_balancing_scheme is set to INTERNAL_SELF_MANAGED. This field is only applicable when locality_lb_policy is set to MAGLEV or RING_HASH.\n\n    * `http_cookie`: Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.\n\n      * `ttl`: Lifetime of the cookie.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n      * `name`: Name of the cookie.\n\n      * `path`: Path to set for the cookie.\n\n    * `http_header_name`: The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.\n\n    * `minimum_ring_size`: The minimum number of virtual nodes to use for the hash ring. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node. Defaults to 1024.\n\n  * `cdn_policy`: Cloud CDN configuration for this BackendService.\n\n    * `cache_key_policy`: The CacheKeyPolicy for this CdnPolicy.\n\n      * `include_host`: If true requests to different hosts will be cached separately.\n\n      * `include_protocol`: If true, http and https requests will be cached separately.\n\n      * `include_query_string`: If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included.  If false, the query string will be excluded from the cache key entirely.\n\n      * `query_string_blacklist`: Names of query string parameters to exclude in cache keys.  All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. '&' and '=' will be percent encoded and not treated as delimiters.\n\n      * `query_string_whitelist`: Names of query string parameters to include in cache keys.  All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. '&' and '=' will be percent encoded and not treated as delimiters.\n\n    * `signed_url_cache_max_age_sec`: Maximum number of seconds the response to a signed URL request will be considered fresh, defaults to 1hr (3600s). After this time period, the response will be revalidated before being served.  When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a \"Cache-Control: public, max-age=[TTL]\" header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.\n\n    * `default_ttl`: (Beta only) Specifies the default TTL for cached content served by this origin for responses  that do not have an existing valid TTL (max-age or s-max-age).\n\n    * `max_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `client_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `negative_caching`: (Beta only) Negative caching allows per-status code TTLs to be set, in order to apply fine-grained caching for common errors or redirects.\n\n    * `negative_caching_policy`: (Beta only) Sets a cache TTL for the specified HTTP status code. negativeCaching must be enabled to configure negativeCachingPolicy. Omitting the policy and leaving negativeCaching enabled will use Cloud CDN's default cache TTLs.\n\n      * `code`: (Beta only) The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 can be specified as values, and you cannot specify a status code more than once.\n\n      * `ttl`: (Beta only) The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL.\n\n    * `cache_mode`: (Beta only) Specifies the cache setting for all responses from this backend. The possible values are: USE_ORIGIN_HEADERS, FORCE_CACHE_ALL and CACHE_ALL_STATIC\n    Possible values:\n      * USE_ORIGIN_HEADERS\n      * FORCE_CACHE_ALL\n      * CACHE_ALL_STATIC\n\n    * `serve_while_stale`: (Beta only) Serve existing content from the cache (if available) when revalidating content with the origin, or when an error is encountered when refreshing the cache. \n\n  * `connection_draining`: Settings for connection draining\n\n    * `draining_timeout_sec`: Time for which instance will be drained (not accept new connections, but still work to finish started).\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `custom_request_headers`: Headers that the HTTP/S load balancer should add to proxied requests.\n\n  * `custom_response_headers`: (Beta only) Headers that the HTTP/S load balancer should add to proxied responses.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking.\n\n  * `description`: An optional description of this resource.\n\n  * `enable_cdn`: If true, enable Cloud CDN for this BackendService.\n\n  * `health_checks`: The set of URLs to the HttpHealthCheck or HttpsHealthCheck resource for health checking this BackendService. Currently at most one health check can be specified.  A health check must be specified unless the backend service uses an internet or serverless NEG as a backend.  For internal load balancing, a URL to a HealthCheck resource must be specified instead.\n\n  * `id`: The unique identifier for the resource.\n\n  * `iap`: Settings for enabling Cloud Identity Aware Proxy\n\n    * `enabled`: Enables IAP.\n\n    * `oauth2_client_id`: OAuth2 Client ID for IAP\n\n    * `oauth2_client_secret`: OAuth2 Client Secret for IAP\n\n    * `oauth2_client_secret_sha256`: OAuth2 Client Secret SHA-256 for IAP\n\n  * `load_balancing_scheme`: Indicates whether the backend service will be used with internal or external load balancing. A backend service created for one type of load balancing cannot be used with the other.\n  Possible values:\n    * EXTERNAL\n    * INTERNAL_SELF_MANAGED\n\n  * `locality_lb_policy`: The load balancing algorithm used within the scope of the locality. The possible values are -  * ROUND_ROBIN - This is a simple policy in which each healthy backend                 is selected in round robin order.  * LEAST_REQUEST - An O(1) algorithm which selects two random healthy                   hosts and picks the host which has fewer active requests.  * RING_HASH - The ring/modulo hash load balancer implements consistent               hashing to backends. The algorithm has the property that the               addition/removal of a host from a set of N hosts only affects               1/N of the requests.  * RANDOM - The load balancer selects a random healthy host.  * ORIGINAL_DESTINATION - Backend host is selected based on the client                          connection metadata, i.e., connections are opened                          to the same address as the destination address of                          the incoming connection before the connection                          was redirected to the load balancer.  * MAGLEV - used as a drop in replacement for the ring hash load balancer.            Maglev is not as stable as ring hash but has faster table lookup            build times and host selection times. For more information about            Maglev, refer to https://ai.google/research/pubs/pub44824  This field is applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.\n  Possible values:\n    * ROUND_ROBIN\n    * LEAST_REQUEST\n    * RING_HASH\n    * RANDOM\n    * ORIGINAL_DESTINATION\n    * MAGLEV\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `outlier_detection`: Settings controlling eviction of unhealthy hosts from the load balancing pool. This field is applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.\n\n    * `base_ejection_time`: The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `consecutive_errors`: Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.\n\n    * `consecutive_gateway_failure`: The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 5.\n\n    * `enforcing_consecutive_errors`: The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n\n    * `enforcing_consecutive_gateway_failure`: The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.\n\n    * `enforcing_success_rate`: The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n\n    * `interval`: Time interval between ejection sweep analysis. This can result in both new ejections as well as hosts being returned to service. Defaults to 10 seconds.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `max_ejection_percent`: Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 10%.\n\n    * `success_rate_minimum_hosts`: The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.\n\n    * `success_rate_request_volume`: The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.\n\n    * `success_rate_stdev_factor`: This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.\n\n  * `port_name`: Name of backend port. The same name should appear in the instance groups referenced by this service. Required when the load balancing scheme is EXTERNAL.\n\n  * `protocol`: The protocol this BackendService uses to communicate with backends. The default is HTTP. **NOTE**: HTTP2 is only valid for beta HTTP/2 load balancer types and may result in errors if used with the GA API.\n  Possible values:\n    * HTTP\n    * HTTPS\n    * HTTP2\n    * TCP\n    * SSL\n    * GRPC\n\n  * `security_policy`: The security policy associated with this backend service.\n\n  * `session_affinity`: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP.\n  Possible values:\n    * NONE\n    * CLIENT_IP\n    * CLIENT_IP_PORT_PROTO\n    * CLIENT_IP_PROTO\n    * GENERATED_COOKIE\n    * HEADER_FIELD\n    * HTTP_COOKIE\n\n  * `timeout_sec`: How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds. Valid range is [1, 86400].\n\n  * `log_config`: This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.\n\n    * `enable`: Whether to enable logging for the load balancer traffic served by this backend service.\n\n    * `sample_rate`: This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_backend_services.md",
    "content": "+++\ntitle = \"google_compute_backend_services resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_backend_services\"\nidentifier = \"inspec/resources/gcp/google_compute_backend_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_backend_services` is used to test a Google BackendService resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_backend_services(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('names') { should include 'inspec-gcp-backend-service' }\n  its('port_names') { should include 'http' }\n  its('protocols') { should include 'HTTP' }\n  its('timeout_secs') { should include '10' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_backend_services` resource:\n\nSee [google_compute_backend_service](google_compute_backend_service) for more detailed information.\n\n  * `affinity_cookie_ttl_secs`: an array of `google_compute_backend_service` affinity_cookie_ttl_sec\n  * `backends`: an array of `google_compute_backend_service` backends\n  * `circuit_breakers`: an array of `google_compute_backend_service` circuit_breakers\n  * `consistent_hashes`: an array of `google_compute_backend_service` consistent_hash\n  * `cdn_policies`: an array of `google_compute_backend_service` cdn_policy\n  * `connection_drainings`: an array of `google_compute_backend_service` connection_draining\n  * `creation_timestamps`: an array of `google_compute_backend_service` creation_timestamp\n  * `custom_request_headers`: an array of `google_compute_backend_service` custom_request_headers\n  * `custom_response_headers`: (Beta only) an array of `google_compute_backend_service` custom_response_headers\n  * `fingerprints`: an array of `google_compute_backend_service` fingerprint\n  * `descriptions`: an array of `google_compute_backend_service` description\n  * `enable_cdns`: an array of `google_compute_backend_service` enable_cdn\n  * `health_checks`: an array of `google_compute_backend_service` health_checks\n  * `ids`: an array of `google_compute_backend_service` id\n  * `iaps`: an array of `google_compute_backend_service` iap\n  * `load_balancing_schemes`: an array of `google_compute_backend_service` load_balancing_scheme\n  * `locality_lb_policies`: an array of `google_compute_backend_service` locality_lb_policy\n  * `names`: an array of `google_compute_backend_service` name\n  * `outlier_detections`: an array of `google_compute_backend_service` outlier_detection\n  * `port_names`: an array of `google_compute_backend_service` port_name\n  * `protocols`: an array of `google_compute_backend_service` protocol\n  * `security_policies`: an array of `google_compute_backend_service` security_policy\n  * `session_affinities`: an array of `google_compute_backend_service` session_affinity\n  * `timeout_secs`: an array of `google_compute_backend_service` timeout_sec\n  * `log_configs`: an array of `google_compute_backend_service` log_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_disk.md",
    "content": "+++\ntitle = \"google_compute_disk resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_disk\"\nidentifier = \"inspec/resources/gcp/google_compute_disk resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_disk` is used to test a Google Disk resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\nmost_recent_image = google_compute_image(project: 'debian-cloud', name: 'debian-10-buster-v20191014')\n\ndescribe google_compute_disk(project: 'chef-gcp-inspec', name: 'inspec-snapshot-disk', zone: 'zone') do\n  it { should exist }\n  # Test that the image is the most recent image for the family\n  its('source_image') { should match most_recent_image.self_link }\n  its('type') { should match 'pd-standard' }\nend\n\ndescribe.one do\n  google_compute_disk(project: 'chef-gcp-inspec', name: 'inspec-snapshot-disk', zone: 'zone').labels.each_pair do |key, value|\n    describe key do\n      it { should cmp \"environment\" }\n    end\n  end\nend\n\ndescribe google_compute_disk(project: 'chef-gcp-inspec', name: 'nonexistent', zone: 'zone') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_disk` resource:\n\n\n  * `label_fingerprint`: The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `last_attach_timestamp`: Last attach timestamp in RFC3339 text format.\n\n  * `last_detach_timestamp`: Last detach timestamp in RFC3339 text format.\n\n  * `labels`: Labels to apply to this disk.  A list of key->value pairs.\n\n  * `licenses`: Any applicable publicly visible licenses.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `size_gb`: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the sourceImage or sourceSnapshot parameter, or specify it alone to create an empty persistent disk.  If you specify this field along with sourceImage or sourceSnapshot, the value of sizeGb must not be less than the size of the sourceImage or the size of the snapshot.\n\n  * `users`: Links to the users of the disk (attached instances) in form: project/zones/zone/instances/instance\n\n  * `physical_block_size_bytes`: Physical block size of the persistent disk, in bytes. If not present in a request, a default value is used. Currently supported sizes are 4096 and 16384, other sizes may be added in the future. If an unsupported value is requested, the error message will list the supported values for the caller's project.\n\n  * `interface`: (Beta only) Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.\n  Possible values:\n    * SCSI\n    * NVME\n\n  * `type`: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk.\n\n  * `source_image`: The source image used to create this disk. If the source image is deleted, this field will not be set.  To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-9 to use the latest Debian 9 image:  projects/debian-cloud/global/images/family/debian-9  Alternatively, use a specific version of a public operating system image:  projects/debian-cloud/global/images/debian-9-stretch-vYYYYMMDD  To create a disk with a private image that you created, specify the image name in the following format:  global/images/my-private-image  You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:  global/images/family/my-private-family\n\n  * `resource_policies`: (Beta only) Resource policies applied to this disk for automatic snapshot creations.\n\n  * `multi_writer`: (Beta only) Indicates whether or not the disk can be read/write attached to more than one instance.\n\n  * `zone`: A reference to the zone where the disk resides.\n\n  * `source_image_encryption_key`: The customer-supplied encryption key of the source image. Required if the source image is protected by a customer-supplied encryption key.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS.\n\n    * `kms_key_service_account`: The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.\n\n  * `source_image_id`: The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.\n\n  * `disk_encryption_key`: Encrypts the disk using a customer-supplied encryption key.  After you encrypt a disk with a customer-supplied key, you must provide the same key if you use the disk later (e.g. to create a disk snapshot or an image, or to attach the disk to a virtual machine).  Customer-supplied encryption keys do not protect access to metadata of the disk.  If you do not provide an encryption key when creating the disk, then the disk will be encrypted using an automatically generated key and you do not need to provide a key to use the disk later.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. Your project's Compute Engine System service account (`service-{{PROJECT_NUMBER}}@compute-system.iam.gserviceaccount.com`) must have `roles/cloudkms.cryptoKeyEncrypterDecrypter` to use this feature.\n\n    * `kms_key_service_account`: The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.\n\n  * `source_snapshot`: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values:  * `https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot` * `projects/project/global/snapshots/snapshot` * `global/snapshots/snapshot`\n\n  * `source_snapshot_encryption_key`: The customer-supplied encryption key of the source snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_service_account`: The service account used for the encryption request for the given KMS key.  If absent, the Compute Engine Service Agent service account is used.\n\n  * `source_snapshot_id`: The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_disk_type.md",
    "content": "+++\ntitle = \"google_compute_disk_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_disk_type\"\nidentifier = \"inspec/resources/gcp/google_compute_disk_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_disk_type` InSpec audit resource to to test a Google Cloud DiskType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_disk_type(project: 'chef-gcp-inspec', zone: 'us-east1-b', name: 'disk_type_name') do\n  it { should exist }\n  it { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_disk_type` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `default_disk_size_gb`: Server-defined default disk size in GB.\n\n  * `deprecated`: The deprecation status associated with this disk type.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * DEPRECATED\n      * OBSOLETE\n      * DELETED\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `valid_disk_size`: An optional textual description of the valid disk size, such as \"10GB-10TB\".\n\n  * `zone`: A reference to the zone where the disk type resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_disk_types.md",
    "content": "+++\ntitle = \"google_compute_disk_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_disk_types\"\nidentifier = \"inspec/resources/gcp/google_compute_disk_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_disk_types` InSpec audit resource to to test a Google Cloud DiskType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_disk_types(project: 'chef-gcp-inspec', zone: 'us-east1-b') do\nit { should exist }\nit { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_disk_types` resource:\n\nSee [google_compute_disk_type](google_compute_disk_type) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_disk_type` creation_timestamp\n  * `default_disk_size_gbs`: an array of `google_compute_disk_type` default_disk_size_gb\n  * `deprecateds`: an array of `google_compute_disk_type` deprecated\n  * `descriptions`: an array of `google_compute_disk_type` description\n  * `ids`: an array of `google_compute_disk_type` id\n  * `names`: an array of `google_compute_disk_type` name\n  * `valid_disk_sizes`: an array of `google_compute_disk_type` valid_disk_size\n  * `zones`: an array of `google_compute_disk_type` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_disks.md",
    "content": "+++\ntitle = \"google_compute_disks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_disks\"\nidentifier = \"inspec/resources/gcp/google_compute_disks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_disks` is used to test a Google Disk resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\nmost_recent_image = google_compute_image(project: 'debian-cloud', name: 'debian-10-buster-v20191014')\ndescribe google_compute_disks(project: 'chef-gcp-inspec', zone: 'zone') do\n  it { should exist }\n  its('names') { should include 'inspec-snapshot-disk' }\n  its('source_images') { should include most_recent_image.self_link }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_disks` resource:\n\nSee [google_compute_disk](google_compute_disk) for more detailed information.\n\n  * `label_fingerprints`: an array of `google_compute_disk` label_fingerprint\n  * `creation_timestamps`: an array of `google_compute_disk` creation_timestamp\n  * `descriptions`: an array of `google_compute_disk` description\n  * `ids`: an array of `google_compute_disk` id\n  * `last_attach_timestamps`: an array of `google_compute_disk` last_attach_timestamp\n  * `last_detach_timestamps`: an array of `google_compute_disk` last_detach_timestamp\n  * `labels`: an array of `google_compute_disk` labels\n  * `licenses`: an array of `google_compute_disk` licenses\n  * `names`: an array of `google_compute_disk` name\n  * `size_gbs`: an array of `google_compute_disk` size_gb\n  * `users`: an array of `google_compute_disk` users\n  * `physical_block_size_bytes`: an array of `google_compute_disk` physical_block_size_bytes\n  * `interfaces`: (Beta only) an array of `google_compute_disk` interface\n  * `types`: an array of `google_compute_disk` type\n  * `source_images`: an array of `google_compute_disk` source_image\n  * `resource_policies`: (Beta only) an array of `google_compute_disk` resource_policies\n  * `multi_writers`: (Beta only) an array of `google_compute_disk` multi_writer\n  * `zones`: an array of `google_compute_disk` zone\n  * `source_image_encryption_keys`: an array of `google_compute_disk` source_image_encryption_key\n  * `source_image_ids`: an array of `google_compute_disk` source_image_id\n  * `disk_encryption_keys`: an array of `google_compute_disk` disk_encryption_key\n  * `source_snapshots`: an array of `google_compute_disk` source_snapshot\n  * `source_snapshot_encryption_keys`: an array of `google_compute_disk` source_snapshot_encryption_key\n  * `source_snapshot_ids`: an array of `google_compute_disk` source_snapshot_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_external_vpn_gateway.md",
    "content": "+++\ntitle = \"google_compute_external_vpn_gateway resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_external_vpn_gateway\"\nidentifier = \"inspec/resources/gcp/google_compute_external_vpn_gateway resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_external_vpn_gateway` InSpec audit resource to to test a Google Cloud externalVpnGateway resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_external_vpn_gateway(project: 'chef-gcp-inspec', name: 'external-gateway') do\n  it { should exist }\n  it { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_external_vpn_gateway` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `redundancy_type`: Indicates the user-supplied redundancy type of this external VPN gateway.\n  Possible values:\n    * SINGLE_IP_INTERNALLY_REDUNDANT\n    * TWO_IPS_REDUNDANCY\n    * FOUR_IPS_REDUNDANCY\n\n  * `interfaces`: A list of interfaces for this external VPN gateway. If your peer-side gateway is an on-premises gateway and non-AWS cloud providers gateway, at most two interfaces can be provided for an external VPN gateway. If your peer side is an AWS virtual private gateway, four interfaces should be provided for an external VPN gateway.\n\n    * `id`: The numeric ID of this interface. The allowed input values for this id for different redundancy types of external VPN gateway: SINGLE_IP_INTERNALLY_REDUNDANT - 0 TWO_IPS_REDUNDANCY - 0, 1 FOUR_IPS_REDUNDANCY - 0, 1, 2, 3'\n\n    * `ip_address`: IP address of the interface in the external VPN gateway. Only IPv4 is supported. This IP address can be either from your on-premise gateway or another Cloud provider's VPN gateway, it cannot be an IP address from Google Compute Engine.\n\n  * `labels`: map (key: string, value: string) Labels for this resource. These can only be added or modified by the setLabels method. Each label key/value pair must comply with RFC1035. Label values may be empty. An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n  * `label_fingerprint`: A fingerprint for the labels being applied to this ExternalVpnGateway, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve an ExternalVpnGateway.\n\n  * `next_page_token`: This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_external_vpn_gateways.md",
    "content": "+++\ntitle = \"google_compute_external_vpn_gateways resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_external_vpn_gateways\"\nidentifier = \"inspec/resources/gcp/google_compute_external_vpn_gateways resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_external_vpn_gateways` InSpec audit resource to to test a Google Cloud externalVpnGateway resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_external_vpn_gateways(project: 'chef-gcp-inspec') do\nit { should exist }\nit { should be_up }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_external_vpn_gateways` resource:\n\nSee [google_compute_external_vpn_gateway](google_compute_external_vpn_gateway) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_external_vpn_gateway` creation_timestamp\n  * `redundancy_types`: an array of `google_compute_external_vpn_gateway` redundancy_type\n  * `interfaces`: an array of `google_compute_external_vpn_gateway` interfaces\n  * `labels`: an array of `google_compute_external_vpn_gateway` labels\n  * `label_fingerprints`: an array of `google_compute_external_vpn_gateway` label_fingerprint\n  * `next_page_tokens`: an array of `google_compute_external_vpn_gateway` next_page_token\n  * `descriptions`: an array of `google_compute_external_vpn_gateway` description\n  * `ids`: an array of `google_compute_external_vpn_gateway` id\n  * `names`: an array of `google_compute_external_vpn_gateway` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_firewall.md",
    "content": "+++\ntitle = \"google_compute_firewall resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_firewall\"\nidentifier = \"inspec/resources/gcp/google_compute_firewall resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_firewall` is used to test a Google Firewall resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_firewall(project: 'chef-gcp-inspec', name: 'inspec-gcp-firewall') do\n  its('direction') { should cmp 'INGRESS' }\n  its('log_config_enabled?') { should be true }\n  its('source_tags') { should include 'some-tag' }\nend\n```\n\n### Test that a GCP compute firewall allows SSH access on port 22\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('allowed_ssh?')  { should be true }\n    end\n\n### Test that a GCP compute firewall does not allow HTTP access on port 80\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('allowed_http?')  { should be false }\n    end\n\n### Test that a GCP compute firewall allows HTTPS access on port 443\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('allowed_https?')  { should be true }\n    end\n\n### Test the direction of a GCP compute firewall e.g. \"INGRESS\" or \"EGRESS\"\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('direction') { should eq \"INGRESS\" }\n    end\n\n### Test the source IP range list for the GCP compute firewall is not open to the world\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('source_ranges') { should_not eq [\"0.0.0.0/0\"] }\n      # or using helpers\n      its('direction') { should eq \"INGRESS\" }\n      it { should_not allow_ip_ranges [\"0.0.0.0/0\"] }\n    end\n\n### Test whether or not a port/protocol is defined for a given firewall rule\n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      # similar to the http  / ssh helpers above\n      it { should_not allow_port_protocol(\"22\", \"tcp\") }\n      it { should allow_port_protocol(\"80\", \"tcp\") }\n    end\n\n### Test whether firewall rule allows ingress/egress for specified tags \n\n    describe google_compute_firewall(project: 'chef-inspec-gcp', name: 'firewall-rule') do\n      its('direction') { should eq \"INGRESS\" }\n      it { should allow_source_tags [\"allow-gcp-tag\"] }\n      it { should allow_target_tags [\"allow-gcp-other-tag\"] }\n      # stricter\n      it { should allow_source_tags_only [\"allow-gcp-tag\"] }\n      it { should allow_target_tags_only [\"allow-gcp-other-tag\"] }\n    end\n\n\n## Properties\n\nProperties that can be accessed from the `google_compute_firewall` resource:\n\n\n  * `allowed`: The list of ALLOW rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.\n\n    * `ip_protocol`: The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, sctp, ipip, all), or the IP protocol number.\n\n    * `ports`: An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port.  Example inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"].\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `denied`: The list of DENY rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a denied connection.\n\n    * `ip_protocol`: The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, sctp, ipip, all), or the IP protocol number.\n\n    * `ports`: An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port.  Example inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"].\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `destination_ranges`: If destination ranges are specified, the firewall will apply only to traffic that has destination IP address in these ranges. These ranges must be expressed in CIDR format. Only IPv4 is supported.\n\n  * `direction`: Direction of traffic to which this firewall applies; default is INGRESS. Note: For INGRESS traffic, it is NOT supported to specify destinationRanges; For EGRESS traffic, it is NOT supported to specify sourceRanges OR sourceTags.\n  Possible values:\n    * INGRESS\n    * EGRESS\n\n  * `disabled`: Denotes whether the firewall rule is disabled, i.e not applied to the network it is associated with. When set to true, the firewall rule is not enforced and the network behaves as if it did not exist. If this is unspecified, the firewall rule will be enabled.\n\n  * `log_config`: This field denotes the logging options for a particular firewall rule. If logging is enabled, logs will be exported to Cloud Logging.\n\n    * `enable`: This field denotes whether to enable logging for a particular firewall rule. If logging is enabled, logs will be exported to Stackdriver.\n\n    * `metadata`: This field denotes whether to include or exclude metadata for firewall logs.\n    Possible values:\n      * EXCLUDE_ALL_METADATA\n      * INCLUDE_ALL_METADATA\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network`: URL of the network resource for this firewall rule. If not specified when creating a firewall rule, the default network is used:    global/networks/default  If you choose to specify this property, you can specify the network as a full or partial URL. For example, the following are all valid URLs:    https://www.googleapis.com/compute/v1/projects/myproject/global/       networks/my-network   projects/myproject/global/networks/my-network   global/networks/default\n\n  * `priority`: Priority for this rule. This is an integer between 0 and 65535, both inclusive. When not specified, the value assumed is 1000. Relative priorities determine precedence of conflicting rules. Lower value of priority implies higher precedence (eg, a rule with priority 0 has higher precedence than a rule with priority 1). DENY rules take precedence over ALLOW rules having equal priority.\n\n  * `source_ranges`: If source ranges are specified, the firewall will apply only to traffic that has source IP address in these ranges. These ranges must be expressed in CIDR format. One or both of sourceRanges and sourceTags may be set. If both properties are set, the firewall will apply to traffic that has source IP address within sourceRanges OR the source IP that belongs to a tag listed in the sourceTags property. The connection does not need to match both properties for the firewall to apply. Only IPv4 is supported.\n\n  * `source_service_accounts`: If source service accounts are specified, the firewall will apply only to traffic originating from an instance with a service account in this list. Source service accounts cannot be used to control traffic to an instance's external IP address because service accounts are associated with an instance, not an IP address. sourceRanges can be set at the same time as sourceServiceAccounts. If both are set, the firewall will apply to traffic that has source IP address within sourceRanges OR the source IP belongs to an instance with service account listed in sourceServiceAccount. The connection does not need to match both properties for the firewall to apply. sourceServiceAccounts cannot be used at the same time as sourceTags or targetTags.\n\n  * `source_tags`: If source tags are specified, the firewall will apply only to traffic with source IP that belongs to a tag listed in source tags. Source tags cannot be used to control traffic to an instance's external IP address. Because tags are associated with an instance, not an IP address. One or both of sourceRanges and sourceTags may be set. If both properties are set, the firewall will apply to traffic that has source IP address within sourceRanges OR the source IP that belongs to a tag listed in the sourceTags property. The connection does not need to match both properties for the firewall to apply.\n\n  * `target_service_accounts`: A list of service accounts indicating sets of instances located in the network that may make network connections as specified in allowed[]. targetServiceAccounts cannot be used at the same time as targetTags or sourceTags. If neither targetServiceAccounts nor targetTags are specified, the firewall rule applies to all instances on the specified network.\n\n  * `target_tags`: A list of instance tags indicating sets of instances located in the network that may make network connections as specified in allowed[]. If no targetTags are specified, the firewall rule applies to all instances on the specified network.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_firewalls.md",
    "content": "+++\ntitle = \"google_compute_firewalls resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_firewalls\"\nidentifier = \"inspec/resources/gcp/google_compute_firewalls resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_firewalls` is used to test a Google Firewall resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_firewalls(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('firewall_names') { should include 'inspec-gcp-firewall' }\n  its('firewall_directions') { should include 'INGRESS' }\nend\n```\n\n### Test that there are no more than a specified number of firewalls available for the project\n\n    describe google_compute_firewalls(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected firewall is available for the project\n\n    describe google_compute_firewalls(project: 'chef-inspec-gcp') do\n      its('firewall_names') { should include \"my-app-firewall-rule\" }\n    end\n\n### Test that a particular named rule does not exist\n\n    describe google_compute_firewalls(project: 'chef-inspec-gcp') do\n      its('firewall_names') { should_not include \"default-allow-ssh\" }\n    end\n\n### Test there are no firewalls for the \"INGRESS\" direction\n\n    describe google_compute_firewalls(project: 'chef-inspec-gcp').where(firewall_direction: 'INGRESS') do\n      it { should_not exist }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_firewalls` resource:\n\nSee [google_compute_firewall](google_compute_firewall) for more detailed information.\n\n  * `alloweds`: an array of `google_compute_firewall` allowed\n  * `creation_timestamps`: an array of `google_compute_firewall` creation_timestamp\n  * `denieds`: an array of `google_compute_firewall` denied\n  * `descriptions`: an array of `google_compute_firewall` description\n  * `destination_ranges`: an array of `google_compute_firewall` destination_ranges\n  * `firewall_directions`: an array of `google_compute_firewall` direction\n  * `disableds`: an array of `google_compute_firewall` disabled\n  * `log_configs`: an array of `google_compute_firewall` log_config\n  * `firewall_ids`: an array of `google_compute_firewall` id\n  * `firewall_names`: an array of `google_compute_firewall` name\n  * `networks`: an array of `google_compute_firewall` network\n  * `priorities`: an array of `google_compute_firewall` priority\n  * `source_ranges`: an array of `google_compute_firewall` source_ranges\n  * `source_service_accounts`: an array of `google_compute_firewall` source_service_accounts\n  * `source_tags`: an array of `google_compute_firewall` source_tags\n  * `target_service_accounts`: an array of `google_compute_firewall` target_service_accounts\n  * `target_tags`: an array of `google_compute_firewall` target_tags\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_forwarding_rule.md",
    "content": "+++\ntitle = \"google_compute_forwarding_rule resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_forwarding_rule\"\nidentifier = \"inspec/resources/gcp/google_compute_forwarding_rule resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_forwarding_rule` is used to test a Google ForwardingRule resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_forwarding_rule(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'udp-forwarding-rule') do\n  it { should exist }\n  its('region') { should match 'europe-west2' }\n  its('creation_timestamp') { should be > Time.now - 365*60*60*24*10 }\n  its('load_balancing_scheme') { should match 'EXTERNAL' }\n  its('port_range') { should match \"500-500\" }\n  its('ip_protocol') { should match \"UDP\" }\nend\n\ndescribe google_compute_forwarding_rule(project: 'chef-gcp-inspec', region: 'europe-west2', name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute forwarding_rule exists\n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      it { should exist }\n    end\n\n### Test when a GCP compute forwarding_rule was created\n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      its('creation_timestamp_date') { should be > Time.now - 365*60*60*24*10 }\n    end\n\n### Test for an expected forwarding_rule identifier \n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      its('id') { should eq 12345567789 }\n    end    \n\n### Test that a forwarding_rule load_balancing_scheme is as expected\n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      its('load_balancing_scheme') { should eq \"INTERNAL\" }\n    end  \n\n### Test that a forwarding_rule IP address is as expected\n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      its('ip_address') { should eq \"10.0.0.1\" }\n    end  \n\n### Test that a forwarding_rule is associated with the expected network\n\n    describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding_rule') do\n      its('network') { should match \"gcp_network_name\" }\n    end  \n\n## Properties\n\nProperties that can be accessed from the `google_compute_forwarding_rule` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `is_mirroring_collector`: Indicates whether or not this load balancer can be used as a collector for packet mirroring. To prevent mirroring loops, instances behind this load balancer will not have their traffic mirrored even if a PacketMirroring rule applies to them. This can only be set to true for load balancers that have their loadBalancingScheme set to INTERNAL.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `ip_address`: The IP address that this forwarding rule is serving on behalf of.  Addresses are restricted based on the forwarding rule's load balancing scheme (EXTERNAL or INTERNAL) and scope (global or regional).  When the load balancing scheme is EXTERNAL, for global forwarding rules, the address must be a global IP, and for regional forwarding rules, the address must live in the same region as the forwarding rule. If this field is empty, an ephemeral IPv4 address from the same scope (global or regional) will be assigned. A regional forwarding rule supports IPv4 only. A global forwarding rule supports either IPv4 or IPv6.  When the load balancing scheme is INTERNAL, this can only be an RFC 1918 IP address belonging to the network/subnet configured for the forwarding rule. By default, if this field is empty, an ephemeral internal IP address will be automatically allocated from the IP range of the subnet or network configured for this forwarding rule.  An address can be specified either by a literal IP address or a URL reference to an existing Address resource. The following examples are all valid:  * 100.1.2.3 * https://www.googleapis.com/compute/v1/projects/project/regions/      region/addresses/address * projects/project/regions/region/addresses/address * regions/region/addresses/address * global/addresses/address * address\n\n  * `ip_protocol`: The IP protocol to which this rule applies.  When the load balancing scheme is INTERNAL, only TCP and UDP are valid.\n  Possible values:\n    * TCP\n    * UDP\n    * ESP\n    * AH\n    * SCTP\n    * ICMP\n\n  * `backend_service`: A BackendService to receive the matched traffic. This is used only for INTERNAL load balancing.\n\n  * `load_balancing_scheme`: This signifies what the ForwardingRule will be used for and can be EXTERNAL, INTERNAL, or INTERNAL_MANAGED. EXTERNAL is used for Classic Cloud VPN gateways, protocol forwarding to VMs from an external IP address, and HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP load balancers. INTERNAL is used for protocol forwarding to VMs from an internal IP address, and internal TCP/UDP load balancers. INTERNAL_MANAGED is used for internal HTTP(S) load balancers.\n  Possible values:\n    * EXTERNAL\n    * INTERNAL\n    * INTERNAL_MANAGED\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network`: For internal load balancing, this field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not specified, the default network will be used. This field is only used for INTERNAL load balancing.\n\n  * `port_range`: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance.  Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.  Some types of forwarding target have constraints on the acceptable ports:  * TargetHttpProxy: 80, 8080 * TargetHttpsProxy: 443 * TargetTcpProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995,                   1883, 5222 * TargetSslProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995,                   1883, 5222 * TargetVpnGateway: 500, 4500\n\n  * `ports`: This field is used along with the backend_service field for internal load balancing.  When the load balancing scheme is INTERNAL, a single port or a comma separated list of ports can be configured. Only packets addressed to these ports will be forwarded to the backends configured with this forwarding rule.  You may specify a maximum of up to 5 ports.\n\n  * `subnetwork`: The subnetwork that the load balanced IP should belong to for this Forwarding Rule.  This field is only used for INTERNAL load balancing.  If the network specified is in auto subnet mode, this field is optional. However, if the network is in custom subnet mode, a subnetwork must be specified.\n\n  * `target`: The URL of the target resource to receive the matched traffic. The target must live in the same region as the forwarding rule. The forwarded traffic must be of a type appropriate to the target object.\n\n  * `allow_global_access`: If true, clients can access ILB from all regions. Otherwise only allows from the local region the ILB is located at.\n\n  * `labels`: (Beta only) Labels to apply to this forwarding rule.  A list of key->value pairs.\n\n  * `label_fingerprint`: (Beta only) The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `all_ports`: For internal TCP/UDP load balancing (i.e. load balancing scheme is INTERNAL and protocol is TCP/UDP), set this to true to allow packets addressed to any ports to be forwarded to the backends configured with this forwarding rule. Used with backend service. Cannot be set if port or portRange are set.\n\n  * `network_tier`: The networking tier used for configuring this address. If this field is not specified, it is assumed to be PREMIUM.\n  Possible values:\n    * PREMIUM\n    * STANDARD\n\n  * `service_label`: An optional prefix to the service name for this Forwarding Rule. If specified, will be the first label of the fully qualified service name.  The label must be 1-63 characters long, and comply with RFC1035. Specifically, the label must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.  This field is only used for INTERNAL load balancing.\n\n  * `service_name`: The internal fully qualified service name for this Forwarding Rule. This field is only used for INTERNAL load balancing.\n\n  * `region`: A reference to the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_forwarding_rules.md",
    "content": "+++\ntitle = \"google_compute_forwarding_rules resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_forwarding_rules\"\nidentifier = \"inspec/resources/gcp/google_compute_forwarding_rules resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_forwarding_rules` is used to test a Google ForwardingRule resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_forwarding_rules(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('forwarding_rule_names') { should include 'udp-forwarding-rule' }\nend\n```\n\n### Test that there are no more than a specified number of forwarding_rules available for the project and region\n\n    describe google_compute_forwarding_rules(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected forwarding_rule identifier is present in the project and region\n\n    describe google_compute_forwarding_rules(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('forwarding_rule_ids') { should include 12345678975432 }\n    end\n\n\n### Test that an expected forwarding_rule name is available for the project and region\n\n    describe google_compute_forwarding_rules(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('forwarding_rule_names') { should include \"forwarding_rule-name\" }\n    end\n\n### Test that an expected forwarding_rule network name is not present for the project and region\n\n    describe google_compute_forwarding_rules(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('forwarding_rule_networks') { should not include \"network-name\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_forwarding_rules` resource:\n\nSee [google_compute_forwarding_rule](google_compute_forwarding_rule) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_forwarding_rule` creation_timestamp\n  * `is_mirroring_collectors`: an array of `google_compute_forwarding_rule` is_mirroring_collector\n  * `descriptions`: an array of `google_compute_forwarding_rule` description\n  * `forwarding_rule_ids`: an array of `google_compute_forwarding_rule` id\n  * `ip_addresses`: an array of `google_compute_forwarding_rule` ip_address\n  * `ip_protocols`: an array of `google_compute_forwarding_rule` ip_protocol\n  * `backend_services`: an array of `google_compute_forwarding_rule` backend_service\n  * `forwarding_rule_load_balancing_schemes`: an array of `google_compute_forwarding_rule` load_balancing_scheme\n  * `forwarding_rule_names`: an array of `google_compute_forwarding_rule` name\n  * `forwarding_rule_networks`: an array of `google_compute_forwarding_rule` network\n  * `port_ranges`: an array of `google_compute_forwarding_rule` port_range\n  * `ports`: an array of `google_compute_forwarding_rule` ports\n  * `subnetworks`: an array of `google_compute_forwarding_rule` subnetwork\n  * `targets`: an array of `google_compute_forwarding_rule` target\n  * `allow_global_accesses`: an array of `google_compute_forwarding_rule` allow_global_access\n  * `labels`: (Beta only) an array of `google_compute_forwarding_rule` labels\n  * `label_fingerprints`: (Beta only) an array of `google_compute_forwarding_rule` label_fingerprint\n  * `all_ports`: an array of `google_compute_forwarding_rule` all_ports\n  * `network_tiers`: an array of `google_compute_forwarding_rule` network_tier\n  * `service_labels`: an array of `google_compute_forwarding_rule` service_label\n  * `service_names`: an array of `google_compute_forwarding_rule` service_name\n  * `regions`: an array of `google_compute_forwarding_rule` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_address.md",
    "content": "+++\ntitle = \"google_compute_global_address resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_address\"\nidentifier = \"inspec/resources/gcp/google_compute_global_address resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_global_address` is used to test a Google GlobalAddress resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_address(project: 'chef-gcp-inspec', name: 'inspec-gcp-global-address') do\n  it { should exist }\n  its('ip_version') { should eq 'IPV6' }\nend\n\ndescribe google_compute_global_address(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_address` resource:\n\n\n  * `address`: The static external IP address represented by this resource.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `labels`: (Beta only) Labels to apply to this address.  A list of key->value pairs.\n\n  * `label_fingerprint`: (Beta only) The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `ip_version`: The IP Version that will be used by this address. The default value is `IPV4`.\n  Possible values:\n    * IPV4\n    * IPV6\n\n  * `region`: A reference to the region where the regional address resides.\n\n  * `prefix_length`: The prefix length of the IP range. If not present, it means the address field is a single IP address.  This field is not applicable to addresses with addressType=EXTERNAL, or addressType=INTERNAL when purpose=PRIVATE_SERVICE_CONNECT\n\n  * `address_type`: The type of the address to reserve.  * EXTERNAL indicates public/external single IP address. * INTERNAL indicates internal IP ranges belonging to some network.\n  Possible values:\n    * EXTERNAL\n    * INTERNAL\n\n  * `purpose`: The purpose of the resource. For global internal addresses it can be  * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks  This should only be set when using an Internal address.\n  Possible values:\n    * VPC_PEERING\n    * PRIVATE_SERVICE_CONNECT\n\n  * `network`: The URL of the network in which to reserve the IP range. The IP range must be in RFC1918 space. The network cannot be deleted if there are any reserved IP ranges referring to it.  This should only be set when using an Internal address.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_addresses.md",
    "content": "+++\ntitle = \"google_compute_global_addresses resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_addresses\"\nidentifier = \"inspec/resources/gcp/google_compute_global_addresses resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_global_addresses` is used to test a Google GlobalAddress resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_addresses(project: 'chef-gcp-inspec', name: 'inspec-gcp-global-address') do\n  its('count') { should be >= 1 }\n  its('names') { should include 'inspec-gcp-global-address' }\n  its('ip_versions') { should include 'IPV6' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_addresses` resource:\n\nSee [google_compute_global_address](google_compute_global_address) for more detailed information.\n\n  * `addresses`: an array of `google_compute_global_address` address\n  * `creation_timestamps`: an array of `google_compute_global_address` creation_timestamp\n  * `descriptions`: an array of `google_compute_global_address` description\n  * `ids`: an array of `google_compute_global_address` id\n  * `names`: an array of `google_compute_global_address` name\n  * `labels`: (Beta only) an array of `google_compute_global_address` labels\n  * `label_fingerprints`: (Beta only) an array of `google_compute_global_address` label_fingerprint\n  * `ip_versions`: an array of `google_compute_global_address` ip_version\n  * `regions`: an array of `google_compute_global_address` region\n  * `prefix_lengths`: an array of `google_compute_global_address` prefix_length\n  * `address_types`: an array of `google_compute_global_address` address_type\n  * `purposes`: an array of `google_compute_global_address` purpose\n  * `networks`: an array of `google_compute_global_address` network\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_forwarding_rule.md",
    "content": "+++\ntitle = \"google_compute_global_forwarding_rule resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_forwarding_rule\"\nidentifier = \"inspec/resources/gcp/google_compute_global_forwarding_rule resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_global_forwarding_rule` is used to test a Google GlobalForwardingRule resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_forwarding_rule(project: 'chef-gcp-inspec', name: 'inspec-gcp-global-forwarding-rule') do\n  it { should exist }\n  its('port_range') { should eq '80-80' }\n  its('target') { should  match /\\/inspec-gcp-http-proxy$/ }\nend\n\ndescribe google_compute_global_forwarding_rule(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_forwarding_rule` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `ip_address`: The IP address that this forwarding rule is serving on behalf of.  Addresses are restricted based on the forwarding rule's load balancing scheme (external or internal) and scope (global or regional). The address must be a global IP for external global forwarding rules.  If this field is empty, an ephemeral IPv4 address from the same scope (global) is chosen. Global forwarding rules supports either IPv4 or IPv6.  When the load balancing scheme is INTERNAL_SELF_MANAGED, this must be a URL reference to an existing Address resource (internal regional static IP address), with a purpose of GCE_END_POINT and addressType of INTERNAL.  ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) This must be a URL reference to an existing Address resource (internal global static IP address), with a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL.  An address can be specified either by a literal IP address or a URL reference to an existing Address resource. The following examples are all valid:  * 100.1.2.3 * https://www.googleapis.com/compute/v1/projects/project/regions/      region/addresses/address * projects/project/regions/region/addresses/address * regions/region/addresses/address * global/addresses/address * address\n\n  * `ip_protocol`: The IP protocol to which this rule applies. When the load balancing scheme is INTERNAL_SELF_MANAGED, only TCP is valid. This field must not be set if the global address is configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL\n  Possible values:\n    * TCP\n    * UDP\n    * ESP\n    * AH\n    * SCTP\n    * ICMP\n\n  * `ip_version`: The IP Version that will be used by this global forwarding rule.\n  Possible values:\n    * IPV4\n    * IPV6\n\n  * `labels`: (Beta only) Labels to apply to this forwarding rule.  A list of key->value pairs.\n\n  * `label_fingerprint`: (Beta only) The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `load_balancing_scheme`: This signifies what the GlobalForwardingRule will be used for. The value of INTERNAL_SELF_MANAGED means that this will be used for Internal Global HTTP(S) LB. The value of EXTERNAL means that this will be used for External Global Load Balancing (HTTP(S) LB, External TCP/UDP LB, SSL Proxy)  ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Note: This field must be set \"\" if the global address is configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL.\n  Possible values:\n    * EXTERNAL\n    * INTERNAL_SELF_MANAGED\n\n  * `metadata_filters`: Opaque filter criteria used by Loadbalancer to restrict routing configuration to a limited set xDS compliant clients. In their xDS requests to Loadbalancer, xDS clients present node metadata. If a match takes place, the relevant routing configuration is made available to those proxies.  For each metadataFilter in this list, if its filterMatchCriteria is set to MATCH_ANY, at least one of the filterLabels must match the corresponding label provided in the metadata. If its filterMatchCriteria is set to MATCH_ALL, then all of its filterLabels must match with corresponding labels in the provided metadata.  metadataFilters specified here can be overridden by those specified in the UrlMap that this ForwardingRule references.  metadataFilters only applies to Loadbalancers that have their loadBalancingScheme set to INTERNAL_SELF_MANAGED.\n\n    * `filter_match_criteria`: Specifies how individual filterLabel matches within the list of filterLabels contribute towards the overall metadataFilter match.  MATCH_ANY - At least one of the filterLabels must have a matching label in the provided metadata. MATCH_ALL - All filterLabels must have matching labels in the provided metadata.\n    Possible values:\n      * MATCH_ANY\n      * MATCH_ALL\n\n    * `filter_labels`: The list of label value pairs that must match labels in the provided metadata based on filterMatchCriteria  This list must not be empty and can have at the most 64 entries.\n\n      * `name`: Name of the metadata label. The length must be between 1 and 1024 characters, inclusive.\n\n      * `value`: The value that the label must match. The value has a maximum length of 1024 characters.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network`: This field is not used for external load balancing. For INTERNAL_SELF_MANAGED load balancing, this field identifies the network that the load balanced IP should belong to for this global forwarding rule. If this field is not specified, the default network will be used.\n\n  * `port_range`: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance.  Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.  Some types of forwarding target have constraints on the acceptable ports:  * TargetHttpProxy: 80, 8080 * TargetHttpsProxy: 443 * TargetTcpProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995,                   1883, 5222 * TargetSslProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995,                   1883, 5222 * TargetVpnGateway: 500, 4500\n\n  * `target`: The URL of the target resource to receive the matched traffic. The forwarded traffic must be of a type appropriate to the target object. For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets are valid.  ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) For global address with a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL, only \"all-apis\" and \"vpc-sc\" are valid.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_forwarding_rules.md",
    "content": "+++\ntitle = \"google_compute_global_forwarding_rules resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_forwarding_rules\"\nidentifier = \"inspec/resources/gcp/google_compute_global_forwarding_rules resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_global_forwarding_rules` is used to test a Google GlobalForwardingRule resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_forwarding_rules(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('port_ranges') { should include '80-80' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_forwarding_rules` resource:\n\nSee [google_compute_global_forwarding_rule](google_compute_global_forwarding_rule) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_global_forwarding_rule` creation_timestamp\n  * `descriptions`: an array of `google_compute_global_forwarding_rule` description\n  * `ids`: an array of `google_compute_global_forwarding_rule` id\n  * `ip_addresses`: an array of `google_compute_global_forwarding_rule` ip_address\n  * `ip_protocols`: an array of `google_compute_global_forwarding_rule` ip_protocol\n  * `ip_versions`: an array of `google_compute_global_forwarding_rule` ip_version\n  * `labels`: (Beta only) an array of `google_compute_global_forwarding_rule` labels\n  * `label_fingerprints`: (Beta only) an array of `google_compute_global_forwarding_rule` label_fingerprint\n  * `load_balancing_schemes`: an array of `google_compute_global_forwarding_rule` load_balancing_scheme\n  * `metadata_filters`: an array of `google_compute_global_forwarding_rule` metadata_filters\n  * `names`: an array of `google_compute_global_forwarding_rule` name\n  * `networks`: an array of `google_compute_global_forwarding_rule` network\n  * `port_ranges`: an array of `google_compute_global_forwarding_rule` port_range\n  * `targets`: an array of `google_compute_global_forwarding_rule` target\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_network_endpoint_group.md",
    "content": "+++\ntitle = \"google_compute_global_network_endpoint_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_network_endpoint_group\"\nidentifier = \"inspec/resources/gcp/google_compute_global_network_endpoint_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_global_network_endpoint_group` InSpec audit resource to to test a Google Cloud GlobalNetworkEndpointGroup resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_network_endpoint_group(project: 'chef-gcp-inspec', name: 'inspec-gcp-global-endpoint-group') do\n  it { should exist }\n  its('default_port') { should cmp '90' }\n  its('kind') { should cmp '' }\n\tits('id') { should cmp '' }\n\tits('creation_timestamp') { should cmp '' }\n\tits('self_link') { should cmp '' }\n\tits('name') { should cmp 'inspec-gcp-global-endpoint-group' }\n\tits('description') { should cmp '' }\n\tits('network_endpoint_type') { should cmp 'INTERNET_IP_PORT' }\n\tits('region') { should cmp '' }\n\tits('zone') { should cmp '' }\n\tits('network') { should cmp '' }\n\tits('subnetwork') { should cmp '' }\n\tits('psc_target_service') { should cmp '' }\nend\n\ndescribe google_compute_global_network_endpoint_group(project: 'chef-gcp-inspec',name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_network_endpoint_group` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `network_endpoint_type`: Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP, GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.\n  Possible values:\n    * GCE_VM_IP\n    * GCE_VM_IP_PORT\n    * INTERNET_FQDN_PORT\n    * INTERNET_IP_PORT\n    * NON_GCP_PRIVATE_IP_PORT\n    * PRIVATE_SERVICE_CONNECT\n    * SERVERLESS\n\n  * `size`: [Output only] Number of network endpoints in the network endpoint group.\n\n  * `region`: [Output Only] The URL of the region where the network endpoint group is located.\n\n  * `zone`: [Output Only] The URL of the zone where the network endpoint group is located.\n\n  * `network`: The URL of the network to which all network endpoints in the NEG belong. Uses \"default\" project network if unspecified.\n\n  * `subnetwork`: Optional URL of the subnetwork to which all network endpoints in the NEG belong.\n\n  * `default_port`: The default port used if the port number is not specified in the network endpoint.\n\n  * `annotations`: Metadata defined as annotations on the network endpoint group.\n\n    * `additional_properties`:\n\n  * `cloud_run`: Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG.\n\n    * `service`: Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: \"run-service\".\n\n    * `tag`: Optional Cloud Run tag represents the \"named-revision\" to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: \"revision-0010\".\n\n    * `url_mask`: A template to parse <service> and <tag> fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs \"foo1.domain.com/bar1\" and \"foo1.domain.com/bar2\" can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask \"<tag>.domain.com/<service>\". The URL mask will parse them to { service=\"bar1\", tag=\"foo1\" } and { service=\"bar2\", tag=\"foo2\" } respectively.\n\n  * `app_engine`: Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG.\n\n    * `service`: Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: \"default\", \"my-service\".\n\n    * `version`: Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: \"v1\", \"v2\".\n\n    * `url_mask`: A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs \"foo1-dot-appname.appspot.com/v1\" and \"foo1-dot-appname.appspot.com/v2\" can be backed by the same Serverless NEG with URL mask \"<service>-dot-appname.appspot.com/<version>\". The URL mask will parse them to { service = \"foo1\", version = \"v1\" } and { service = \"foo1\", version = \"v2\" } respectively.\n\n  * `cloud_function`: Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG.\n\n    * `function`: A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: \"func1\".\n\n    * `url_mask`: A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs \" mydomain.com/function1\" and \"mydomain.com/function2\" can be backed by the same Serverless NEG with URL mask \"/<function>\". The URL mask will parse them to { function = \"function1\" } and { function = \"function2\" } respectively.\n\n  * `psc_target_service`: The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. An example value is: \"asia-northeast3-cloudkms.googleapis.com\"\n\n  * `psc_data`: All data that is specifically relevant to only network endpoint groups of type PRIVATE_SERVICE_CONNECT.\n\n    * `consumer_psc_address`: [Output Only] Address allocated from given subnetwork for PSC. This IP address acts as a VIP for a PSC NEG, allowing it to act as an endpoint in L7 PSC-XLB.\n\n    * `psc_connection_id`: [Output Only] The PSC connection id of the PSC Network Endpoint Group Consumer.\n\n    * `psc_connection_status`: [Output Only] The connection status of the PSC Forwarding Rule.\n    Possible values:\n      * ACCEPTED\n      * CLOSED\n      * NEEDS_ATTENTION\n      * PENDING\n      * REJECTED\n      * STATUS_UNSPECIFIED\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_network_endpoint_groups.md",
    "content": "+++\ntitle = \"google_compute_global_network_endpoint_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_network_endpoint_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_global_network_endpoint_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_global_network_endpoint_groups` InSpec audit resource to to test a Google Cloud GlobalNetworkEndpointGroup resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_network_endpoint_groups(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('default_ports') { should include '90' }\n  its('names') { should include 'inspec-gcp-global-endpoint-group' }\n  its('network_endpoint_types'){ should include 'INTERNET_IP_PORT' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_network_endpoint_groups` resource:\n\nSee [google_compute_global_network_endpoint_group](google_compute_global_network_endpoint_group) for more detailed information.\n\n  * `kinds`: an array of `google_compute_global_network_endpoint_group` kind\n  * `ids`: an array of `google_compute_global_network_endpoint_group` id\n  * `creation_timestamps`: an array of `google_compute_global_network_endpoint_group` creation_timestamp\n  * `self_links`: an array of `google_compute_global_network_endpoint_group` self_link\n  * `names`: an array of `google_compute_global_network_endpoint_group` name\n  * `descriptions`: an array of `google_compute_global_network_endpoint_group` description\n  * `network_endpoint_types`: an array of `google_compute_global_network_endpoint_group` network_endpoint_type\n  * `sizes`: an array of `google_compute_global_network_endpoint_group` size\n  * `regions`: an array of `google_compute_global_network_endpoint_group` region\n  * `zones`: an array of `google_compute_global_network_endpoint_group` zone\n  * `networks`: an array of `google_compute_global_network_endpoint_group` network\n  * `subnetworks`: an array of `google_compute_global_network_endpoint_group` subnetwork\n  * `default_ports`: an array of `google_compute_global_network_endpoint_group` default_port\n  * `annotations`: an array of `google_compute_global_network_endpoint_group` annotations\n  * `cloud_runs`: an array of `google_compute_global_network_endpoint_group` cloud_run\n  * `app_engines`: an array of `google_compute_global_network_endpoint_group` app_engine\n  * `cloud_functions`: an array of `google_compute_global_network_endpoint_group` cloud_function\n  * `psc_target_services`: an array of `google_compute_global_network_endpoint_group` psc_target_service\n  * `psc_data`: an array of `google_compute_global_network_endpoint_group` psc_data\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_operation.md",
    "content": "+++\ntitle = \"google_compute_global_operation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_operation\"\nidentifier = \"inspec/resources/gcp/google_compute_global_operation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_global_operation` InSpec audit resource to to test a Google Cloud GlobalOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_operation(project: 'chef-gcp-inspec', name: 'operation-1634799391539-5ced765030229-be5d5765-6623920f') do\n  it { should exist }\n  it { should be_up }\n  its('operation_type') { should include 'delete' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_operation` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the operation.\n\n  * `zone`: The URL of the zone where the operation resides. Only applicable when performing per-zone operations.\n\n  * `client_operation_id`: The value of requestId if you provided it in the request. Not present otherwise.\n\n  * `operation_type`: The type of operation, such as insert, update, or delete, and so on.\n\n  * `user`: User who requested the operation, for example: user@example.com.\n\n  * `progress`: An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.\n\n  * `insert_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `start_time`: The time that this operation was started by the server. This value is in RFC3339 text format.\n\n  * `end_time`: The time that this operation was completed. This value is in RFC3339 text format.\n\n  * `status`: The status of the operation, which can be one of the following: * PENDING * PENDINGPENDING * DONE\n  Possible values:\n    * PENDING\n    * PENDING\n    * DONE\n\n  * `status_message`: An optional textual description of the current status of the operation.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_global_operations.md",
    "content": "+++\ntitle = \"google_compute_global_operations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_global_operations\"\nidentifier = \"inspec/resources/gcp/google_compute_global_operations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_global_operations` InSpec audit resource to to test a Google Cloud GlobalOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_global_operations(project: 'chef-gcp-inspec') do\n  it { should exist }\n  it { should be_up }\n  its('operation_type') { should include 'delete' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_global_operations` resource:\n\nSee [google_compute_global_operation](google_compute_global_operation) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_global_operation` creation_timestamp\n  * `descriptions`: an array of `google_compute_global_operation` description\n  * `ids`: an array of `google_compute_global_operation` id\n  * `names`: an array of `google_compute_global_operation` name\n  * `zones`: an array of `google_compute_global_operation` zone\n  * `client_operation_ids`: an array of `google_compute_global_operation` client_operation_id\n  * `operation_types`: an array of `google_compute_global_operation` operation_type\n  * `users`: an array of `google_compute_global_operation` user\n  * `progresses`: an array of `google_compute_global_operation` progress\n  * `insert_times`: an array of `google_compute_global_operation` insert_time\n  * `start_times`: an array of `google_compute_global_operation` start_time\n  * `end_times`: an array of `google_compute_global_operation` end_time\n  * `statuses`: an array of `google_compute_global_operation` status\n  * `status_messages`: an array of `google_compute_global_operation` status_message\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_health_check.md",
    "content": "+++\ntitle = \"google_compute_health_check resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_health_check\"\nidentifier = \"inspec/resources/gcp/google_compute_health_check resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_health_check` is used to test a Google HealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_health_check(project: 'chef-gcp-inspec', name: 'inspec-gcp-health-check') do\n  it { should exist }\n  its('timeout_sec') { should eq '10' }\n  its('tcp_health_check.port') { should eq '80' }\nend\n\ndescribe google_compute_health_check(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_health_check` resource:\n\n\n  * `check_interval_sec`: How often (in seconds) to send a health check. The default value is 5 seconds.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `healthy_threshold`: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `timeout_sec`: How long (in seconds) to wait before claiming failure. The default value is 5 seconds.  It is invalid for timeoutSec to have greater value than checkIntervalSec.\n\n  * `unhealthy_threshold`: A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.\n\n  * `type`: Specifies the type of the healthCheck, either TCP, SSL, HTTP or HTTPS. If not specified, the default is TCP. Exactly one of the protocol-specific health check field must be specified, which must match type field.\n  Possible values:\n    * TCP\n    * SSL\n    * HTTP\n    * HTTPS\n    * HTTP2\n\n  * `http_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTP health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTP health check request. The default value is 80.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTP health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `https_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTPS health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTPS health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTPS health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `tcp_health_check`: A nested object resource\n\n    * `request`: The application data to send once the TCP connection has been established (default value is empty). If both request and response are empty, the connection establishment alone will indicate health. The request data can only be ASCII.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the TCP health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, TCP health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `ssl_health_check`: A nested object resource\n\n    * `request`: The application data to send once the SSL connection has been established (default value is empty). If both request and response are empty, the connection establishment alone will indicate health. The request data can only be ASCII.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the SSL health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, SSL health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `http2_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTP2 health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTP2 health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTP2 health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTP2 health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `grpc_health_check`: A nested object resource\n\n    * `port`: The port number for the health check request.  Must be specified if portName and portSpecification are not set  or if port_specification is USE_FIXED_PORT. Valid values are 1 through 65535.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, gRPC health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n    * `grpc_service_name`: The gRPC service name for the health check.  The value of grpcServiceName has the following meanings by convention:   - Empty serviceName means the overall status of all services at the backend.   - Non-empty serviceName means the health of that gRPC service, as defined by the owner of the service. The grpcServiceName can only be ASCII.\n\n  * `log_config`: (Beta only) Configure logging on this health check.\n\n    * `enable`: Indicates whether or not to export logs. This is false by default, which means no health check logging will be done.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_health_check_service.md",
    "content": "+++\ntitle = \"google_compute_health_check_service resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_health_check_service\"\nidentifier = \"inspec/resources/gcp/google_compute_health_check_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_health_check_service` InSpec audit resource to to test a Google Cloud HealthCheckService resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_health_check_service(project: 'chef-gcp-inspec', region: 'us-central1', name: 'instance-group-2') do\nit { should exist }\nits('name') { should eq 'instance-group-2' }\nits('health_status_aggregation_policy') { should eq 'NO_AGGREGATION' }\nend\n\ndescribe google_compute_health_check_service(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\nit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_health_check_service` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `health_status_aggregation_policy`: Optional. Policy for how the results from multiple health checks for the same endpoint are aggregated. Defaults to NO_AGGREGATION if unspecified. NO_AGGREGATION. An EndpointHealth message is returned for each <endpoint, health check> pair in the health check service. AND. If any health check of an endpoint reports UNHEALTHY, then UNHEALTHY is the HealthState of the endpoint. If all health checks report HEALTHY, the HealthState of the endpoint is HEALTHY.\n  Possible values:\n    * HEALTHY\n    * UNHEALTHY\n\n  * `health_checks`: A list of URLs to the HealthCheck resources. Must have at least one HealthCheck, and not more than 10. HealthCheck resources must have portSpecification=USE_SERVING_PORT or portSpecification=USE_FIXED_PORT. For regional HealthCheckService, the HealthCheck must be regional and in the same region. For global HealthCheckService, HealthCheck must be global. Mix of regional and global HealthChecks is not supported. Multiple regional HealthChecks must belong to the same region. Regional HealthChecks must belong to the same region as zones of NEGs.\n\n  * `network_endpoint_groups`: A list of URLs to the NetworkEndpointGroup resources. Must not have more than 100. For regional HealthCheckService, NEGs must be in zones in the region of the HealthCheckService.\n\n  * `notification_endpoints`: A list of URLs to the NotificationEndpoint resources. Must not have more than 10. A list of endpoints for receiving notifications of change in health status. For regional HealthCheckService, NotificationEndpoint must be regional and in the same region. For global HealthCheckService, NotificationEndpoint must be global.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a HealthCheckService. An up-to-date fingerprint must be provided in order to patch/update the HealthCheckService; Otherwise, the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the HealthCheckService. A base64-encoded string.\n\n  * `next_page_token`: This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_health_check_services.md",
    "content": "+++\ntitle = \"google_compute_health_check_services resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_health_check_services\"\nidentifier = \"inspec/resources/gcp/google_compute_health_check_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_health_check_services` InSpec audit resource to to test a Google Cloud HealthCheckService resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_health_check_services(project: 'chef-gcp-inspec', region: 'us-central1') do\n\tit { should exist }\n\tits('names') { should include 'instance-group-2' }\n\tits('health_status_aggregation_policies') { should include 'NO_AGGREGATION' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_health_check_services` resource:\n\nSee [google_compute_health_check_service](google_compute_health_check_service) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_health_check_service` creation_timestamp\n  * `descriptions`: an array of `google_compute_health_check_service` description\n  * `ids`: an array of `google_compute_health_check_service` id\n  * `names`: an array of `google_compute_health_check_service` name\n  * `health_status_aggregation_policies`: an array of `google_compute_health_check_service` health_status_aggregation_policy\n  * `health_checks`: an array of `google_compute_health_check_service` health_checks\n  * `network_endpoint_groups`: an array of `google_compute_health_check_service` network_endpoint_groups\n  * `notification_endpoints`: an array of `google_compute_health_check_service` notification_endpoints\n  * `fingerprints`: an array of `google_compute_health_check_service` fingerprint\n  * `next_page_tokens`: an array of `google_compute_health_check_service` next_page_token\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_health_checks.md",
    "content": "+++\ntitle = \"google_compute_health_checks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_health_checks\"\nidentifier = \"inspec/resources/gcp/google_compute_health_checks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_health_checks` is used to test a Google HealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_health_checks(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-health-check' }\n  its('timeout_secs') { should include '10' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_health_checks` resource:\n\nSee [google_compute_health_check](google_compute_health_check) for more detailed information.\n\n  * `check_interval_secs`: an array of `google_compute_health_check` check_interval_sec\n  * `creation_timestamps`: an array of `google_compute_health_check` creation_timestamp\n  * `descriptions`: an array of `google_compute_health_check` description\n  * `healthy_thresholds`: an array of `google_compute_health_check` healthy_threshold\n  * `ids`: an array of `google_compute_health_check` id\n  * `names`: an array of `google_compute_health_check` name\n  * `timeout_secs`: an array of `google_compute_health_check` timeout_sec\n  * `unhealthy_thresholds`: an array of `google_compute_health_check` unhealthy_threshold\n  * `types`: an array of `google_compute_health_check` type\n  * `http_health_checks`: an array of `google_compute_health_check` http_health_check\n  * `https_health_checks`: an array of `google_compute_health_check` https_health_check\n  * `tcp_health_checks`: an array of `google_compute_health_check` tcp_health_check\n  * `ssl_health_checks`: an array of `google_compute_health_check` ssl_health_check\n  * `http2_health_checks`: an array of `google_compute_health_check` http2_health_check\n  * `grpc_health_checks`: an array of `google_compute_health_check` grpc_health_check\n  * `log_configs`: (Beta only) an array of `google_compute_health_check` log_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_http_health_check.md",
    "content": "+++\ntitle = \"google_compute_http_health_check resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_http_health_check\"\nidentifier = \"inspec/resources/gcp/google_compute_http_health_check resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_http_health_check` is used to test a Google HttpHealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_http_health_check(project: 'chef-gcp-inspec', name: 'inspec-gcp-http-health-check') do\n  it { should exist }\n  its('timeout_sec') { should eq '20' }\n  its('request_path') { should eq '/health_check' }\n  its('check_interval_sec') { should eq '20' }\nend\n\ndescribe google_compute_http_health_check(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_http_health_check` resource:\n\n\n  * `check_interval_sec`: How often (in seconds) to send a health check. The default value is 5 seconds.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `healthy_threshold`: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.\n\n  * `host`: The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `port`: The TCP port number for the HTTP health check request. The default value is 80.\n\n  * `request_path`: The request path of the HTTP health check request. The default value is /.\n\n  * `timeout_sec`: How long (in seconds) to wait before claiming failure. The default value is 5 seconds.  It is invalid for timeoutSec to have greater value than checkIntervalSec.\n\n  * `unhealthy_threshold`: A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_http_health_checks.md",
    "content": "+++\ntitle = \"google_compute_http_health_checks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_http_health_checks\"\nidentifier = \"inspec/resources/gcp/google_compute_http_health_checks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_http_health_checks` is used to test a Google HttpHealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_http_health_checks(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-http-health-check' }\n  its('timeout_secs') { should include '20' }\n  its('check_interval_secs') { should include '20' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_http_health_checks` resource:\n\nSee [google_compute_http_health_check](google_compute_http_health_check) for more detailed information.\n\n  * `check_interval_secs`: an array of `google_compute_http_health_check` check_interval_sec\n  * `creation_timestamps`: an array of `google_compute_http_health_check` creation_timestamp\n  * `descriptions`: an array of `google_compute_http_health_check` description\n  * `healthy_thresholds`: an array of `google_compute_http_health_check` healthy_threshold\n  * `hosts`: an array of `google_compute_http_health_check` host\n  * `ids`: an array of `google_compute_http_health_check` id\n  * `names`: an array of `google_compute_http_health_check` name\n  * `ports`: an array of `google_compute_http_health_check` port\n  * `request_paths`: an array of `google_compute_http_health_check` request_path\n  * `timeout_secs`: an array of `google_compute_http_health_check` timeout_sec\n  * `unhealthy_thresholds`: an array of `google_compute_http_health_check` unhealthy_threshold\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_https_health_check.md",
    "content": "+++\ntitle = \"google_compute_https_health_check resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_https_health_check\"\nidentifier = \"inspec/resources/gcp/google_compute_https_health_check resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_https_health_check` is used to test a Google HttpsHealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_https_health_check(project: 'chef-gcp-inspec', name: 'inspec-gcp-https-health-check') do\n  it { should exist }\n  its('timeout_sec') { should eq '15' }\n  its('request_path') { should eq '/https_health_check' }\n  its('check_interval_sec') { should eq '15' }\n  its('unhealthy_threshold') { should eq '3' }\nend\n\ndescribe google_compute_https_health_check(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_https_health_check` resource:\n\n\n  * `check_interval_sec`: How often (in seconds) to send a health check. The default value is 5 seconds.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `healthy_threshold`: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.\n\n  * `host`: The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `port`: The TCP port number for the HTTPS health check request. The default value is 80.\n\n  * `request_path`: The request path of the HTTPS health check request. The default value is /.\n\n  * `timeout_sec`: How long (in seconds) to wait before claiming failure. The default value is 5 seconds.  It is invalid for timeoutSec to have greater value than checkIntervalSec.\n\n  * `unhealthy_threshold`: A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_https_health_checks.md",
    "content": "+++\ntitle = \"google_compute_https_health_checks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_https_health_checks\"\nidentifier = \"inspec/resources/gcp/google_compute_https_health_checks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_https_health_checks` is used to test a Google HttpsHealthCheck resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_https_health_checks(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-https-health-check' }\n  its('timeout_secs') { should include '15' }\n  its('check_interval_secs') { should include '15' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_https_health_checks` resource:\n\nSee [google_compute_https_health_check](google_compute_https_health_check) for more detailed information.\n\n  * `check_interval_secs`: an array of `google_compute_https_health_check` check_interval_sec\n  * `creation_timestamps`: an array of `google_compute_https_health_check` creation_timestamp\n  * `descriptions`: an array of `google_compute_https_health_check` description\n  * `healthy_thresholds`: an array of `google_compute_https_health_check` healthy_threshold\n  * `hosts`: an array of `google_compute_https_health_check` host\n  * `ids`: an array of `google_compute_https_health_check` id\n  * `names`: an array of `google_compute_https_health_check` name\n  * `ports`: an array of `google_compute_https_health_check` port\n  * `request_paths`: an array of `google_compute_https_health_check` request_path\n  * `timeout_secs`: an array of `google_compute_https_health_check` timeout_sec\n  * `unhealthy_thresholds`: an array of `google_compute_https_health_check` unhealthy_threshold\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_image.md",
    "content": "+++\ntitle = \"google_compute_image resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_image\"\nidentifier = \"inspec/resources/gcp/google_compute_image resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_image` is used to test a Google Image resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_image(project: 'chef-gcp-inspec', name: 'inspec-image') do\n  it { should exist }\n  its('disk_size_gb') { should cmp 3 }\nend\n\ndescribe google_compute_image(project: 'chef-gcp-inspec', name: 'notfound') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute image is in a particular status e.g. \"READY\" means available for use\n\n    describe google_compute_image(project: 'chef-inspec-gcp', location: 'europe-west2', name: 'compute-address') do\n      its('status') { should eq \"READY\" }\n    end\n\n### Test that a GCP compute image has the expected family\n\n    describe google_compute_image(project: 'chef-inspec-gcp', name: 'ubuntu') do\n      its('family') { should match \"ubuntu\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_image` resource:\n\n\n  * `archive_size_bytes`: Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `deprecated`: The deprecation status associated with this image.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * DEPRECATED\n      * OBSOLETE\n      * DELETED\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `disk_size_gb`: Size of the image when restored onto a persistent disk (in GB).\n\n  * `family`: The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated. The name of the image family must comply with RFC1035.\n\n  * `guest_os_features`: A list of features to enable on the guest operating system. Applicable only for bootable images.\n\n    * `type`: The type of supported feature. Read [Enabling guest operating system features](https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images#guest-os-features) to see a list of available options.\n    Possible values:\n      * MULTI_IP_SUBNET\n      * SECURE_BOOT\n      * SEV_CAPABLE\n      * UEFI_COMPATIBLE\n      * VIRTIO_SCSI_MULTIQUEUE\n      * WINDOWS\n      * GVNIC\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `image_encryption_key`: Encrypts the image using a customer-supplied encryption key.  After you encrypt an image with a customer-supplied key, you must provide the same key if you use the image later (e.g. to create a disk from the image)\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_name`: (Beta only) The name of the encryption key that is stored in Google Cloud KMS.\n\n  * `labels`: Labels to apply to this Image.\n\n  * `label_fingerprint`: The fingerprint used for optimistic locking of this resource. Used internally during updates.\n\n  * `licenses`: Any applicable license URI.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `raw_disk`: The parameters of the raw disk image.\n\n    * `container_type`: The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.\n    Possible values:\n      * TAR\n\n    * `sha1_checksum`: An optional SHA1 checksum of the disk image before unpackaging. This is provided by the client when the disk image is created.\n\n    * `source`: The full Google Cloud Storage URL where disk storage is stored You must provide either this property or the sourceDisk property but not both.\n\n  * `source_disk`: The source disk to create this image based on. You must provide either this property or the rawDisk.source property but not both to create an image.\n\n  * `source_disk_encryption_key`: The customer-supplied encryption key of the source disk. Required if the source disk is protected by a customer-supplied encryption key.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_name`: (Beta only) The name of the encryption key that is stored in Google Cloud KMS.\n\n  * `source_disk_id`: The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.\n\n  * `source_image`: URL of the source image used to create this image. In order to create an image, you must provide the full or partial URL of one of the following:  * The selfLink URL * This property * The rawDisk.source URL * The sourceDisk URL\n\n  * `source_snapshot`: URL of the source snapshot used to create this image.  In order to create an image, you must provide the full or partial URL of one of the following:  * The selfLink URL * This property * The sourceImage URL * The rawDisk.source URL * The sourceDisk URL\n\n  * `source_type`: The type of the image used to create this disk. The default and only value is RAW\n  Possible values:\n    * RAW\n\n  * `self_link`: The self link of the image\n\n  * `status`: The status of the image. Either `READY` `PENDING` or `FAILED`.\n  Possible values:\n    * READY\n    * PENDING\n    * FAILED\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_image_family_view.md",
    "content": "+++\ntitle = \"google_compute_image_family_view resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_image_family_view\"\nidentifier = \"inspec/resources/gcp/google_compute_image_family_view resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_image_family_view` InSpec audit resource to to test a Google Cloud ImageFamilyView resource.\n\n## Examples\n\n```ruby\n\ndescribe google_compute_image_family_view(project: 'chef-gcp-inspec', zone: 'us-central1-c', name: 'test') do\n  it { should exist }\n  its('image_name') { should eq 'image-1' }\n  its('image_source_type') { should eq 'RAW' }\n  its('image_family') { should eq 'test' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_image_family_view` resource:\n\n\n  * `image`: The latest image that is part of the specified image family in the requested location, and that is not deprecated.\n\n    * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n    * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n    * `source_type`: The type of the image used to create this disk. The default and only value is RAW\n    Possible values:\n      * RAW\n\n    * `deprecated`: The deprecation status associated with this disk type.\n\n      * `deleted`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.\n\n      * `deprecated`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.\n\n      * `obsolete`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.\n\n      * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n      * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n      Possible values:\n        * DEPRECATED\n        * OBSOLETE\n        * DELETED\n\n    * `raw_disk`: The parameters of the raw disk image.\n\n      * `source`: The full Google Cloud Storage URL where the raw disk image archive is stored. The following are valid formats for the URL: https://storage.googleapis.com/bucketName/image_archive_name https://storage.googleapis.com/bucketName/folder_name/image_archive_name In order to create an image, you must provide the full or partial URL of one of the following: The rawDisk.source URL The sourceDisk URL The sourceImage URL The sourceSnapshot URL\n\n      * `sha1_checksum`: [Deprecated] This field is deprecated. An optional SHA1 checksum of the disk image before unpackaging provided by the client when the disk image is created.\n\n      * `container_type`: The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.\n      Possible values:\n        * TAR\n        * UNDEFINED_CONTAINER_TYPE\n\n    * `status`: The status of the image. An image can be used to create other resources, such as instances, only after the image has been successfully created and the status is set to * READY * FAILED * PENDING\n    Possible values:\n      * FAILED\n      * PENDING\n      * READY\n\n    * `archive_size_bytes`: Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).\n\n    * `disk_size_gb`: Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).\n\n    * `source_disk`: URL of the source disk used to create this image. For example, the following are valid values: https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/disk projects/project/zones/zone/disks/disk zones/zone/disks/disk In order to create an image, you must provide the full or partial URL of one of the following: The rawDisk.source URL The sourceDisk URL The sourceImage URL The sourceSnapshot URL\n\n    * `source_disk_id`: The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.\n\n    * `licenses`: Any applicable license URI.\n\n    * `storage_locations`: Any applicable license URI.\n\n    * `family`: The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated. The name of the image family must comply with RFC1035.\n\n    * `image_encryption_key`: The deprecation status associated with this disk type.\n\n      * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n      * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@ projectId.iam.gserviceaccount.com/\n\n      * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n      * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: The key is wrapped using a RSA public key certificate provided by Google. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n      * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/ kms_project_id/locations/ region/keyRings/key_region/cryptoKeys/key\n\n    * `source_disk_encryption_key`: Encrypts the image using a customer-supplied encryption key. After you encrypt an image with a customer-supplied key, you must provide the same key if you use the image later (e.g. to create a disk from the image). Customer-supplied encryption keys do not protect access to metadata of the disk. If you do not provide an encryption key when creating the image, then the disk will be encrypted using an automatically generated key and you do not need to provide a key to use the image later.\n\n      * `sha256`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n      * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@ projectId.iam.gserviceaccount.com/\n\n      * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n      * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: The key is wrapped using a RSA public key certificate provided by Google. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n      * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/ kms_project_id/locations/ region/keyRings/key_region/cryptoKeys/key\n\n    * `source_snapshot_encryption_key`: The deprecation status associated with this disk type.\n\n      * `pk`: The Platform Key (PK).\n\n        * `content`: The raw content in the secure keys file. A base64-encoded string.\n\n        * `file_type`: The file type of source file.\n\n      * `keks`: The Key Database (db).\n\n        * `content`: The raw content in the secure keys file. A base64-encoded string.\n\n        * `file_type`: The file type of source file.\n\n      * `dbs`: The Key Database (db).\n\n        * `content`: The raw content in the secure keys file. A base64-encoded string.\n\n        * `file_type`: The file type of source file.\n\n      * `dbxs`: The forbidden key database (dbx).\n\n        * `content`: The raw content in the secure keys file. A base64-encoded string.\n\n        * `file_type`: The file type of source file.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance.md",
    "content": "+++\ntitle = \"google_compute_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance\"\nidentifier = \"inspec/resources/gcp/google_compute_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-instance') do\n  it { should exist }\n  its('machine_type') { should match 'n1-standard-1' }\n  its('tags.items') { should include 'foo' }\n  its('tags.items') { should include 'bar' }\n  its('tag_count') { should cmp 2 }\n  its('service_account_scopes') { should include 'https://www.googleapis.com/auth/compute.readonly' }\n  its('metadata_keys') { should include '123' }\n  its('metadata_values') { should include 'asdf' }\nend\n\ndescribe google_compute_instance(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute instance does not exist\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm-not-there') do\n      it { should_not exist }\n    end\n\n### Test that a GCP compute instance is in the expected state ([explore possible states here](https://cloud.google.com/compute/docs/instances/checking-instance-status))\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('status') { should eq 'RUNNING' }\n    end\n\n### Test that a GCP compute instance is the expected size\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('machine_type') { should match \"f1-micro\" }\n    end\n\n### Test that a GCP compute instance has the expected CPU platform\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('cpu_platform') { should match \"Intel\" }\n    end\n\n### Test that a GCP compute instance has the expected number of attached disks\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('disk_count'){should eq 2}\n    end\n\n### Test that a GCP compute instance has the expected number of attached network interfaces\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('network_interfaces_count'){should eq 1}\n    end\n\n### Test that a GCP compute instance has the expected number of tags\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('tag_count'){should eq 1}\n    end\n\n### Test that a GCP compute instance has a single public IP address\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('first_network_interface_nat_ip_exists'){ should be true }\n      its('first_network_interface_name'){ should eq \"external-nat\" }\n      its('first_network_interface_type'){ should eq \"one_to_one_nat\" }\n    end\n\n### Test that a particular compute instance label key is present\n\n    describe google_compute_instance(project: 'chef-inspec-gcp',  zone: 'us-east1-b', name: 'inspec-test-vm') do\n      its('labels_keys') { should include 'my_favourite_label' }\n    end\n\n### Test that a particular compute instance label value is matching regexp \n    describe google_compute_instance(project: 'chef-inspec-gcp', zone:'us-east1-b', name:'inspec-test-vm').label_value_by_key('business-area') do\n      it { should match '^(marketing|research)$' }\n    end\n\n### Test that a particular compute instance metadata key is present \n    describe google_compute_instance(project: 'chef-inspec-gcp', zone:'us-east1-b', name:'inspec-test-vm') do\n      its('metadata_keys') { should include 'patching-type' }\n    end\n\n### Test that a particular compute instance metadata value is matching regexp \n    describe google_compute_instance(project: 'chef-inspec-gcp', zone:'us-east1-b', name:'inspec-test-vm').metadata_value_by_key('patching-window') do\n      it { should match '^\\d{1}-\\d{2}$' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance` resource:\n\n\n  * `can_ip_forward`: Allows this instance to send and receive packets with non-matching destination or source IPs. This is required if you plan to use this instance to forward routes.\n\n  * `cpu_platform`: The CPU platform used by this instance.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `deletion_protection`: Whether the resource should be protected against deletion.\n\n  * `disks`: An array of disks that are associated with the instances that are created from this template.\n\n    * `auto_delete`: Specifies whether the disk will be auto-deleted when the instance is deleted (but not when the disk is detached from the instance).  Tip: Disks should be set to autoDelete=true so that leftover disks are not left behind on machine deletion.\n\n    * `boot`: Indicates that this is a boot disk. The virtual machine will use the first partition of the disk for its root filesystem.\n\n    * `device_name`: Specifies a unique device name of your choice that is reflected into the /dev/disk/by-id/google-* tree of a Linux operating system running within the instance. This name can be used to reference the device for mounting, resizing, and so on, from within the instance.\n\n    * `disk_encryption_key`: Encrypts or decrypts a disk using a customer-supplied encryption key.\n\n      * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n      * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource.\n\n      * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `index`: Assigns a zero-based index to this disk, where 0 is reserved for the boot disk. For example, if you have many disks attached to an instance, each disk would have a unique index number. If not specified, the server will choose an appropriate value.\n\n    * `initialize_params`: Specifies the parameters for a new disk that will be created alongside the new instance. Use initialization parameters to create boot disks or local SSDs attached to the new instance.\n\n      * `disk_name`: Specifies the disk name. If not specified, the default is to use the name of the instance.\n\n      * `disk_size_gb`: Specifies the size of the disk in base-2 GB.\n\n      * `disk_type`: Reference to a disk type. Specifies the disk type to use to create the instance. If not specified, the default is pd-standard.\n\n      * `source_image`: The source image to create this disk. When creating a new instance, one of initializeParams.sourceImage or disks.source is required.  To create a disk with one of the public operating system images, specify the image by its family name.\n\n      * `source_image_encryption_key`: The customer-supplied encryption key of the source image. Required if the source image is protected by a customer-supplied encryption key.  Instance templates do not store customer-supplied encryption keys, so you cannot create disks for instances in a managed instance group if the source images are encrypted with your own keys.\n\n        * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n        * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI. Persistent disks must always use SCSI and the request will fail if you attempt to attach a persistent disk in any other format than SCSI.\n    Possible values:\n      * SCSI\n      * NVME\n\n    * `mode`: The mode in which to attach this disk, either READ_WRITE or READ_ONLY. If not specified, the default is to attach the disk in READ_WRITE mode.\n    Possible values:\n      * READ_WRITE\n      * READ_ONLY\n\n    * `source`: Reference to a disk. When creating a new instance, one of initializeParams.sourceImage or disks.source is required.  If desired, you can also attach existing non-root persistent disks using this property. This field is only applicable for persistent disks.\n\n    * `type`: Specifies the type of the disk, either SCRATCH or PERSISTENT. If not specified, the default is PERSISTENT.\n    Possible values:\n      * SCRATCH\n      * PERSISTENT\n\n    * `licenses`: Any applicable publicly visible licenses.\n\n  * `guest_accelerators`: List of the type and count of accelerator cards attached to the instance\n\n    * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n    * `accelerator_type`: Full or partial URL of the accelerator type resource to expose to this instance.\n\n  * `hostname`: The hostname of the instance to be created. The specified hostname must be RFC1035 compliant. If hostname is not specified, the default hostname is [INSTANCE_NAME].c.[PROJECT_ID].internal when using the global DNS, and [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal when using zonal DNS.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `label_fingerprint`: The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `labels`: Labels to apply to this instance.  A list of key->value pairs.\n\n  * `metadata`: The metadata key/value pairs to assign to instances that are created from this template. These pairs can consist of custom metadata or predefined keys.\n\n  * `machine_type`: A reference to a machine type which defines VM kind.\n\n  * `min_cpu_platform`: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms\n\n  * `name`: The name of the resource, provided by the client when initially creating the resource. The resource name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network_interfaces`: An array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Only one network interface is supported per instance.\n\n    * `access_configs`: An array of configurations for this interface. Currently, only one access config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs specified, then this instance will have no external internet access.\n\n      * `name`: The name of this access configuration. The default and recommended name is External NAT but you can use any arbitrary string you would like. For example, My external IP or Network Access.\n\n      * `nat_ip`: Reference to an address. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n      * `type`: The type of configuration. The default and only option is ONE_TO_ONE_NAT.\n      Possible values:\n        * ONE_TO_ONE_NAT\n\n      * `set_public_ptr`: Specifies whether a public DNS PTR record should be created to map the external IP address of the instance to a DNS domain name.\n\n      * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the setPublicPtr field is enabled.\n\n      * `network_tier`: This signifies the networking tier used for configuring this access configuration. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n      Possible values:\n        * PREMIUM\n        * STANDARD\n\n    * `alias_ip_ranges`: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks.\n\n      * `ip_cidr_range`: The IP CIDR range represented by this alias IP range. This IP CIDR range must belong to the specified subnetwork and cannot contain IP addresses reserved by system or used by other network interfaces. This range may be a single IP address (e.g. 10.2.3.4), a netmask (e.g. /24) or a CIDR format string (e.g. 10.1.2.0/24).\n\n      * `subnetwork_range_name`: Optional subnetwork secondary range name specifying the secondary range from which to allocate the IP CIDR range for this alias IP range. If left unspecified, the primary range of the subnetwork will be used.\n\n    * `name`: The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc\n\n    * `network`: Specifies the title of an existing network.  When creating an instance, if neither the network nor the subnetwork is specified, the default network global/networks/default is used; if the network is not specified but the subnetwork is specified, the network is inferred.\n\n    * `network_ip`: An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.\n\n    * `subnetwork`: Reference to a VPC network. If the network resource is in legacy mode, do not provide this property.  If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified.\n\n  * `scheduling`: Sets the scheduling options for this instance.\n\n    * `automatic_restart`: Specifies whether the instance should be automatically restarted if it is terminated by Compute Engine (not terminated by a user). You can only set the automatic restart option for standard instances. Preemptible instances cannot be automatically restarted.\n\n    * `on_host_maintenance`: Defines the maintenance behavior for this instance. For standard instances, the default behavior is MIGRATE. For preemptible instances, the default and only possible behavior is TERMINATE. For more information, see Setting Instance Scheduling Options.\n\n    * `preemptible`: Defines whether the instance is preemptible. This can only be set during instance creation, it cannot be set or changed after the instance has been created.\n\n  * `service_accounts`: A list of service accounts, with their specified scopes, authorized for this instance. Only one service account per VM instance is supported.\n\n    * `email`: Email address of the service account.\n\n    * `scopes`: The list of scopes to be made available for this service account.\n\n  * `shielded_instance_config`: Configuration for various parameters related to shielded instances.\n\n    * `enable_secure_boot`: Defines whether the instance has Secure Boot enabled.\n\n    * `enable_vtpm`: Defines whether the instance has the vTPM enabled\n\n    * `enable_integrity_monitoring`: Defines whether the instance has integrity monitoring enabled.\n\n  * `status`: The status of the instance. One of the following values: PROVISIONING, STAGING, RUNNING, STOPPING, SUSPENDING, SUSPENDED, and TERMINATED.  As a user, use RUNNING to keep a machine \"on\" and TERMINATED to turn a machine off\n  Possible values:\n    * PROVISIONING\n    * STAGING\n    * RUNNING\n    * STOPPING\n    * SUSPENDING\n    * SUSPENDED\n    * TERMINATED\n\n  * `status_message`: An optional, human-readable explanation of the status.\n\n  * `tags`: A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.\n\n    * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata.\n\n    * `items`: An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.\n\n  * `zone`: A reference to the zone where the machine resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_group.md",
    "content": "+++\ntitle = \"google_compute_instance_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_group\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_group` is used to test a Google InstanceGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-instance-group') do\n  it { should exist }\n  its('description') { should cmp 'My instance group for testing' }\n  its('named_ports.count') { should cmp 1 }\n  its('named_ports.first.name') { should cmp 'https' }\n  its('named_ports.first.port') { should cmp '8080' }\nend\n\ndescribe google_compute_instance_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute instance group has the expected size\n\n    describe google_compute_instance_group(project: 'chef-inspec-gcp', zone: 'europe-west2-a', name: 'gcp-inspec-test') do\n      its('size') { should eq 2 }\n    end\n\n### Test that a GCP compute instance group has a port with supplied name and value\n\n    describe google_compute_instance_group(project: 'chef-inspec-gcp', zone: 'europe-west2-a', name: 'gcp-inspec-test') do\n      its('port_name') { should eq \"http\" }\n      its('port_value') { should eq 80 }\n    end\n\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_group` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: A unique identifier for this instance group.\n\n  * `name`: The name of the instance group. The name must be 1-63 characters long, and comply with RFC1035.\n\n  * `named_ports`: Assigns a name to a port number. For example: {name: \"http\", port: 80}.  This allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports.  For example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}]  Named ports apply to all instances in this instance group.\n\n    * `name`: The name for this named port. The name must be 1-63 characters long, and comply with RFC1035.\n\n    * `port`: The port number, which can be a value between 1 and 65535.\n\n  * `network`: The network to which all instances in the instance group belong.\n\n  * `region`: The region where the instance group is located (for regional resources).\n\n  * `subnetwork`: The subnetwork to which all instances in the instance group belong.\n\n  * `zone`: A reference to the zone where the instance group resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_group_manager.md",
    "content": "+++\ntitle = \"google_compute_instance_group_manager resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_group_manager\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_group_manager resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_group_manager` is used to test a Google InstanceGroupManager resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_group_manager(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-gcp-igm') do\n  it { should exist }\n\n  its('base_instance_name') { should eq 'igm' }\n  its('named_ports.count') { should cmp 1 }\n  its('named_ports.first.name') { should eq 'port' }\n  its('named_ports.first.port') { should eq '80' }\nend\n\ndescribe google_compute_instance_group_manager(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_group_manager` resource:\n\n\n  * `base_instance_name`: The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.\n\n  * `creation_timestamp`: The creation timestamp for this managed instance group in RFC3339 text format.\n\n  * `current_actions`: The list of instance actions and the number of instances in this managed instance group that are scheduled for each of those actions.\n\n    * `abandoning`: The total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.\n\n    * `creating`: The number of instances in the managed instance group that are scheduled to be created or are currently being created. If the group fails to create any of these instances, it tries again until it creates the instance successfully.  If you have disabled creation retries, this field will not be populated; instead, the creatingWithoutRetries field will be populated.\n\n    * `creating_without_retries`: The number of instances that the managed instance group will attempt to create. The group attempts to create each instance only once. If the group fails to create any of these instances, it decreases the group's targetSize value accordingly.\n\n    * `deleting`: The number of instances in the managed instance group that are scheduled to be deleted or are currently being deleted.\n\n    * `none`: The number of instances in the managed instance group that are running and have no scheduled actions.\n\n    * `recreating`: The number of instances in the managed instance group that are scheduled to be recreated or are currently being being recreated. Recreating an instance deletes the existing root persistent disk and creates a new disk from the image that is defined in the instance template.\n\n    * `refreshing`: The number of instances in the managed instance group that are being reconfigured with properties that do not require a restart or a recreate action. For example, setting or removing target pools for the instance.\n\n    * `restarting`: The number of instances in the managed instance group that are scheduled to be restarted or are currently being restarted.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: A unique identifier for this resource\n\n  * `instance_group`: The instance group being managed\n\n  * `instance_template`: The instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.\n\n  * `name`: The name of the managed instance group. The name must be 1-63 characters long, and comply with RFC1035.\n\n  * `named_ports`: Named ports configured for the Instance Groups complementary to this Instance Group Manager.\n\n    * `name`: The name for this named port. The name must be 1-63 characters long, and comply with RFC1035.\n\n    * `port`: The port number, which can be a value between 1 and 65535.\n\n  * `region`: The region this managed instance group resides (for regional resources).\n\n  * `target_pools`: TargetPool resources to which instances in the instanceGroup field are added. The target pools automatically apply to all of the instances in the managed instance group.\n\n  * `target_size`: The target number of running instances for this managed instance group. Deleting or abandoning instances reduces this number. Resizing the group changes this number.\n\n  * `zone`: The zone the managed instance group resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_group_managers.md",
    "content": "+++\ntitle = \"google_compute_instance_group_managers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_group_managers\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_group_managers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_group_managers` is used to test a Google InstanceGroupManager resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_group_managers(project: 'chef-gcp-inspec', zone: 'zone') do\n  its('base_instance_names') { should include 'igm' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_group_managers` resource:\n\nSee [google_compute_instance_group_manager](google_compute_instance_group_manager) for more detailed information.\n\n  * `base_instance_names`: an array of `google_compute_instance_group_manager` base_instance_name\n  * `creation_timestamps`: an array of `google_compute_instance_group_manager` creation_timestamp\n  * `current_actions`: an array of `google_compute_instance_group_manager` current_actions\n  * `descriptions`: an array of `google_compute_instance_group_manager` description\n  * `ids`: an array of `google_compute_instance_group_manager` id\n  * `instance_groups`: an array of `google_compute_instance_group_manager` instance_group\n  * `instance_templates`: an array of `google_compute_instance_group_manager` instance_template\n  * `names`: an array of `google_compute_instance_group_manager` name\n  * `named_ports`: an array of `google_compute_instance_group_manager` named_ports\n  * `regions`: an array of `google_compute_instance_group_manager` region\n  * `target_pools`: an array of `google_compute_instance_group_manager` target_pools\n  * `target_sizes`: an array of `google_compute_instance_group_manager` target_size\n  * `zones`: an array of `google_compute_instance_group_manager` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_groups.md",
    "content": "+++\ntitle = \"google_compute_instance_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_groups` is used to test a Google InstanceGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_groups(project: 'chef-gcp-inspec', zone: 'zone') do\n  its('instance_group_names') { should include 'inspec-instance-group' }\nend\n```\n\n### Test that there are no more than a specified number of instance groups available for the project\n\n    describe google_compute_instance_groups(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected instance_group is available for the project\n\n    describe google_compute_instance_groups(project: 'chef-inspec-gcp', zone: 'europe-west2-a') do\n      its('instance_group_names') { should include \"my-instance-group-name\" }\n    end\n\n### Test that a subset of all instance_groups matching \"mig*\" have size greater than zero\n\n    google_compute_instance_groups(project: 'chef-inspec-gcp', zone: 'europe-west2-a').where(instance_group_name: /^mig/).instance_group_names.each do |instance_group_name|\n      describe google_compute_instance_group(project: 'chef-inspec-gcp', zone: 'europe-west2-a', name: instance_group_name) do\n        it { should exist }\n        its('size') { should be > 0 }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_groups` resource:\n\nSee [google_compute_instance_group](google_compute_instance_group) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_instance_group` creation_timestamp\n  * `descriptions`: an array of `google_compute_instance_group` description\n  * `instance_group_ids`: an array of `google_compute_instance_group` id\n  * `instance_group_names`: an array of `google_compute_instance_group` name\n  * `named_ports`: an array of `google_compute_instance_group` named_ports\n  * `networks`: an array of `google_compute_instance_group` network\n  * `regions`: an array of `google_compute_instance_group` region\n  * `subnetworks`: an array of `google_compute_instance_group` subnetwork\n  * `zones`: an array of `google_compute_instance_group` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_template.md",
    "content": "+++\ntitle = \"google_compute_instance_template resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_template\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_template resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_template` is used to test a Google InstanceTemplate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_template(project: 'chef-gcp-inspec', name: 'inspec-gcp-instance-template') do\n  it { should exist }\n  its('description') { should eq 'A description of the instance template' }\n  its('properties.description') { should eq 'A description of the instance itself' }\n  its('properties.machine_type') { should eq 'f1-micro' }\n  its('properties.tags.items') { should include 'foo' }\n  its('properties.disks.count') { should eq 1 }\n  its('properties.disks.first.auto_delete') { should eq 'true' }\n  its('properties.disks.first.boot') { should eq 'true' }\n  its('properties.network_interfaces.count') { should eq 1 }\n  its('properties.service_accounts.count') { should eq 1 }\nend\n\ndescribe google_compute_instance_template(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_template` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. The name is 1-63 characters long and complies with RFC1035.\n\n  * `properties`: The instance properties for this instance template.\n\n    * `can_ip_forward`: Enables instances created based on this template to send packets with source IP addresses other than their own and receive packets with destination IP addresses other than their own. If these instances will be used as an IP gateway or it will be set as the next-hop in a Route resource, specify true. If unsure, leave this set to false.\n\n    * `description`: An optional text description for the instances that are created from this instance template.\n\n    * `disks`: An array of disks that are associated with the instances that are created from this template.\n\n      * `licenses`: Any applicable license URI.\n\n      * `auto_delete`: Specifies whether the disk will be auto-deleted when the instance is deleted (but not when the disk is detached from the instance).  Tip: Disks should be set to autoDelete=true so that leftover disks are not left behind on machine deletion.\n\n      * `boot`: Indicates that this is a boot disk. The virtual machine will use the first partition of the disk for its root filesystem.\n\n      * `device_name`: Specifies a unique device name of your choice that is reflected into the /dev/disk/by-id/google-* tree of a Linux operating system running within the instance. This name can be used to reference the device for mounting, resizing, and so on, from within the instance.\n\n      * `disk_encryption_key`: Encrypts or decrypts a disk using a customer-supplied encryption key.\n\n        * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n        * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource.\n\n        * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n      * `index`: Assigns a zero-based index to this disk, where 0 is reserved for the boot disk. For example, if you have many disks attached to an instance, each disk would have a unique index number. If not specified, the server will choose an appropriate value.\n\n      * `initialize_params`: Specifies the parameters for a new disk that will be created alongside the new instance. Use initialization parameters to create boot disks or local SSDs attached to the new instance.\n\n        * `disk_name`: Specifies the disk name. If not specified, the default is to use the name of the instance.\n\n        * `disk_size_gb`: Specifies the size of the disk in base-2 GB.\n\n        * `disk_type`: Reference to a disk type. Specifies the disk type to use to create the instance. If not specified, the default is pd-standard.\n\n        * `source_image`: The source image to create this disk. When creating a new instance, one of initializeParams.sourceImage or disks.source is required.  To create a disk with one of the public operating system images, specify the image by its family name.\n\n        * `source_image_encryption_key`: The customer-supplied encryption key of the source image. Required if the source image is protected by a customer-supplied encryption key.  Instance templates do not store customer-supplied encryption keys, so you cannot create disks for instances in a managed instance group if the source images are encrypted with your own keys.\n\n          * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n          * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n      * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI. Persistent disks must always use SCSI and the request will fail if you attempt to attach a persistent disk in any other format than SCSI.\n      Possible values:\n        * SCSI\n        * NVME\n\n      * `mode`: The mode in which to attach this disk, either READ_WRITE or READ_ONLY. If not specified, the default is to attach the disk in READ_WRITE mode.\n      Possible values:\n        * READ_WRITE\n        * READ_ONLY\n\n      * `source`: Reference to a disk. When creating a new instance, one of initializeParams.sourceImage or disks.source is required.  If desired, you can also attach existing non-root persistent disks using this property. This field is only applicable for persistent disks.  Note that for InstanceTemplate, specify the disk name, not the URL for the disk.\n\n      * `type`: Specifies the type of the disk, either SCRATCH or PERSISTENT. If not specified, the default is PERSISTENT.\n      Possible values:\n        * SCRATCH\n        * PERSISTENT\n\n    * `labels`: Labels to apply to this address.  A list of key->value pairs.\n\n    * `machine_type`: The machine type to use in the VM instance template.\n\n    * `min_cpu_platform`: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms\n\n    * `metadata`: The metadata key/value pairs to assign to instances that are created from this template. These pairs can consist of custom metadata or predefined keys.\n\n    * `guest_accelerators`: List of the type and count of accelerator cards attached to the instance\n\n      * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n      * `accelerator_type`: Full or partial URL of the accelerator type resource to expose to this instance.\n\n    * `network_interfaces`: An array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Only one network interface is supported per instance.\n\n      * `access_configs`: An array of configurations for this interface. Currently, only one access config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs specified, then this instance will have no external internet access.\n\n        * `name`: The name of this access configuration. The default and recommended name is External NAT but you can use any arbitrary string you would like. For example, My external IP or Network Access.\n\n        * `nat_ip`: Reference to an address. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n        * `type`: The type of configuration. The default and only option is ONE_TO_ONE_NAT.\n        Possible values:\n          * ONE_TO_ONE_NAT\n\n        * `set_public_ptr`: Specifies whether a public DNS PTR record should be created to map the external IP address of the instance to a DNS domain name.\n\n        * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the setPublicPtr field is enabled.\n\n        * `network_tier`: This signifies the networking tier used for configuring this access configuration. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n        Possible values:\n          * PREMIUM\n          * STANDARD\n\n      * `alias_ip_ranges`: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks.\n\n        * `ip_cidr_range`: The IP CIDR range represented by this alias IP range. This IP CIDR range must belong to the specified subnetwork and cannot contain IP addresses reserved by system or used by other network interfaces. This range may be a single IP address (e.g. 10.2.3.4), a netmask (e.g. /24) or a CIDR format string (e.g. 10.1.2.0/24).\n\n        * `subnetwork_range_name`: Optional subnetwork secondary range name specifying the secondary range from which to allocate the IP CIDR range for this alias IP range. If left unspecified, the primary range of the subnetwork will be used.\n\n      * `name`: The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc\n\n      * `network`: Specifies the title of an existing network.  When creating an instance, if neither the network nor the subnetwork is specified, the default network global/networks/default is used; if the network is not specified but the subnetwork is specified, the network is inferred.\n\n      * `network_ip`: An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.\n\n      * `subnetwork`: Reference to a VPC network. If the network resource is in legacy mode, do not provide this property.  If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified.\n\n    * `scheduling`: Sets the scheduling options for this instance.\n\n      * `automatic_restart`: Specifies whether the instance should be automatically restarted if it is terminated by Compute Engine (not terminated by a user). You can only set the automatic restart option for standard instances. Preemptible instances cannot be automatically restarted.\n\n      * `on_host_maintenance`: Defines the maintenance behavior for this instance. For standard instances, the default behavior is MIGRATE. For preemptible instances, the default and only possible behavior is TERMINATE. For more information, see Setting Instance Scheduling Options.\n\n      * `preemptible`: Defines whether the instance is preemptible. This can only be set during instance creation, it cannot be set or changed after the instance has been created.\n\n    * `service_accounts`: A list of service accounts, with their specified scopes, authorized for this instance. Only one service account per VM instance is supported.\n\n      * `email`: Email address of the service account.\n\n      * `scopes`: The list of scopes to be made available for this service account.\n\n    * `tags`: A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.\n\n      * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata.\n\n      * `items`: An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instance_templates.md",
    "content": "+++\ntitle = \"google_compute_instance_templates resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instance_templates\"\nidentifier = \"inspec/resources/gcp/google_compute_instance_templates resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instance_templates` is used to test a Google InstanceTemplate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instance_templates(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-instance-template' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instance_templates` resource:\n\nSee [google_compute_instance_template](google_compute_instance_template) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_instance_template` creation_timestamp\n  * `descriptions`: an array of `google_compute_instance_template` description\n  * `ids`: an array of `google_compute_instance_template` id\n  * `names`: an array of `google_compute_instance_template` name\n  * `properties`: an array of `google_compute_instance_template` properties\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_instances.md",
    "content": "+++\ntitle = \"google_compute_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_instances\"\nidentifier = \"inspec/resources/gcp/google_compute_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_instances` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_instances(project: 'chef-gcp-inspec', zone: 'zone') do\n  its('instance_names') { should include 'inspec-instance' }\nend\n```\n\n### Test that there are no more than a specified number of instances in the project and zone\n\n    describe google_compute_instances(project: 'chef-inspec-gcp',  zone: 'europe-west2-a') do\n      its('count') { should be <= 100}\n    end\n\n### Test the exact number of instances in the project and zone\n\n    describe google_compute_instances(project: 'chef-inspec-gcp',  zone: 'europe-west2-a') do\n      its('instance_ids.count') { should cmp 9 }\n    end\n\n### Test that an instance with a particular name exists in the project and zone\n\n    describe google_compute_instances(project: 'chef-inspec-gcp',  zone: 'europe-west2-a') do\n      its('instance_names') { should include \"my-favourite-instance\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_instances` resource:\n\nSee [google_compute_instance](google_compute_instance) for more detailed information.\n\n  * `can_ip_forwards`: an array of `google_compute_instance` can_ip_forward\n  * `cpu_platforms`: an array of `google_compute_instance` cpu_platform\n  * `creation_timestamps`: an array of `google_compute_instance` creation_timestamp\n  * `deletion_protections`: an array of `google_compute_instance` deletion_protection\n  * `disks`: an array of `google_compute_instance` disks\n  * `guest_accelerators`: an array of `google_compute_instance` guest_accelerators\n  * `hostnames`: an array of `google_compute_instance` hostname\n  * `instance_ids`: an array of `google_compute_instance` id\n  * `label_fingerprints`: an array of `google_compute_instance` label_fingerprint\n  * `labels`: an array of `google_compute_instance` labels\n  * `metadata`: an array of `google_compute_instance` metadata\n  * `machine_types`: an array of `google_compute_instance` machine_type\n  * `min_cpu_platforms`: an array of `google_compute_instance` min_cpu_platform\n  * `instance_names`: an array of `google_compute_instance` name\n  * `network_interfaces`: an array of `google_compute_instance` network_interfaces\n  * `schedulings`: an array of `google_compute_instance` scheduling\n  * `service_accounts`: an array of `google_compute_instance` service_accounts\n  * `shielded_instance_configs`: an array of `google_compute_instance` shielded_instance_config\n  * `statuses`: an array of `google_compute_instance` status\n  * `status_messages`: an array of `google_compute_instance` status_message\n  * `tags`: an array of `google_compute_instance` tags\n  * `zones`: an array of `google_compute_instance` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnect.md",
    "content": "+++\ntitle = \"google_compute_interconnect resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnect\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnect resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnect` InSpec audit resource to to test a Google Cloud Interconnect resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_interconnect(project: 'chef-gcp-inspec') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnect` resource:\n\n\n  * `admin_enabled`: Administrative status of the interconnect. When this is set to true, the Interconnect is functional and can carry traffic. When set to false, no packets can be carried over the interconnect and no BGP routes are exchanged over it. By default, the status is set to true.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: A description about the purpose of the outage.\n\n  * `location`: URL of the InterconnectLocation object that represents where this connection is to be provisioned.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `noc_contact_email`: Email address to contact the customer NOC for operations and maintenance notifications regarding this Interconnect. If specified, this will be used for notifications in addition to all other forms described, such as Stackdriver logs alerting and Cloud Notifications.\n\n  * `peer_ip_address`: IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.\n\n  * `google_ip_address`: IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.\n\n  * `client_operation_id`: The value of requestId if you provided it in the request. Not present otherwise.\n\n  * `google_reference_id`: Google reference ID to be used when raising support tickets with Google or otherwise to debug backend connectivity issues.\n\n  * `provisioned_link_count`: Number of links actually provisioned in this interconnect.\n\n  * `customer_name`: Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.\n\n  * `requested_link_count`: Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.\n\n  * `operational_status`: The current status of this Interconnect's functionality, which can take one of the following values: * OS_ACTIVE: A valid Interconnect, which is turned up and is ready to use. Attachments may be provisioned on this Interconnect. * OS_UNPROVISIONED: An Interconnect that has not completed turnup. No attachments may be provisioned on this Interconnect. * OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.\n  Possible values:\n    * OS_ACTIVE\n    * OS_UNPROVISIONED\n    * OS_UNDER_MAINTENANCE\n\n  * `link_type`: Type of link requested, which can take one of the following values: * LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics * LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics. Note that this field indicates the speed of each of the links in the bundle, not the speed of the entire bundle.\n  Possible values:\n    * LINK_TYPE_ETHERNET_10G_LR\n    * LINK_TYPE_ETHERNET_100G_LR\n\n  * `interconnect_type`: Type of interconnect, which can take one of the following values: * PARTNER: A partner-managed interconnection shared between customers though a partner. * DEDICATED: A dedicated physical interconnection with the customer. Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.\n  Possible values:\n    * PARTNER\n    * DEDICATED\n\n  * `interconnect_attachments`: A list of the URLs of all InterconnectAttachments configured to use this Interconnect.\n\n  * `expected_outages`: A list of outages expected for this Interconnect.\n\n    * `name`: Unique identifier for this outage notification.\n\n    * `description`: A description about the purpose of the outage.\n\n    * `source`: The party that generated this notification, which can take the following value: * GOOGLE: this notification as generated by Google. Note that the value of NSRC_GOOGLE has been deprecated in favor of GOOGLE.\n    Possible values:\n      * GOOGLE\n\n    * `state`: State of this notification, which can take one of the following values: * ACTIVE: This outage notification is active. The event could be in the past, present, or future.See startTime and endTime for scheduling. * CANCELLED: The outage associated with this notification was cancelled before the outage was due to start. * COMPLETED: The outage associated with this notification is complete. Note that the versions of this enum prefixed with \"NS_\" have been deprecated in favor of the unprefixed values.\n    Possible values:\n      * ACTIVE\n      * CANCELLED\n      * COMPLETED\n\n    * `issue_type`: Form this outage is expected to take, which can take one of the following values: * OUTAGE: The Interconnect may be completely out of service for some or all of the specified window. * PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole should remain up, but with reduced bandwidth. Note that the versions of this enum prefixed with \"IT_\" have been deprecated in favor of the unprefixed values.\n    Possible values:\n      * OUTAGE\n      * PARTIAL_OUTAGE\n\n    * `affected_circuits`: If issueType is IT_PARTIAL_OUTAGE, a list of the Google-side circuit IDs that will be affected.\n\n    * `start_time`: Scheduled start time for the outage (milliseconds since Unix epoch).\n\n    * `end_time`: Scheduled end time for the outage (milliseconds since Unix epoch).\n\n  * `circuit_infos`: A list of CircuitInfo objects, that describe the individual circuits in this LAG.\n\n    * `google_circuit_id`: Google-assigned unique ID for this circuit. Assigned at circuit turn-up.\n\n    * `google_demarc_id`: Google-assigned unique ID for this circuit. Assigned at circuit turn-up.\n\n    * `customer_demarc_id`: Customer-side demarc ID for this circuit.\n\n  * `satisfies_pzs`: Set to true if the resource satisfies the zone separation organization policy constraints and false otherwise. Defaults to false if the field is not present.'\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnect_attachment.md",
    "content": "+++\ntitle = \"google_compute_interconnect_attachment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnect_attachment\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnect_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnect_attachment` InSpec audit resource to to test a Google Cloud InterconnectAttachment resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_interconnect_attachment(name: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('interconnect') { should cmp 'value_interconnect' }\n\tits('router') { should cmp 'value_router' }\n\tits('region') { should cmp 'value_region' }\n\tits('google_reference_id') { should cmp 'value_googlereferenceid' }\n\tits('operational_status') { should cmp 'value_operationalstatus' }\n\tits('cloud_router_ip_address') { should cmp 'value_cloudrouteripaddress' }\n\tits('customer_router_ip_address') { should cmp 'value_customerrouteripaddress' }\n\tits('type') { should cmp 'value_type' }\n\tits('pairing_key') { should cmp 'value_pairingkey' }\n\tits('edge_availability_domain') { should cmp 'value_edgeavailabilitydomain' }\n\tits('bandwidth') { should cmp 'value_bandwidth' }\n\tits('label_fingerprint') { should cmp 'value_labelfingerprint' }\n\tits('state') { should cmp 'value_state' }\n\tits('partner_asn') { should cmp 'value_partnerasn' }\n\tits('encryption') { should cmp 'value_encryption' }\n\tits('stack_type') { should cmp 'value_stacktype' }\n\tits('cloud_router_ipv6address') { should cmp 'value_cloudrouteripv6address' }\n\tits('customer_router_ipv6address') { should cmp 'value_customerrouteripv6address' }\n\tits('cloud_router_ipv6interface_id') { should cmp 'value_cloudrouteripv6interfaceid' }\n\tits('customer_router_ipv6interface_id') { should cmp 'value_customerrouteripv6interfaceid' }\n\tits('remote_service') { should cmp 'value_remoteservice' }\n\nend\n\ndescribe google_compute_interconnect_attachment(name: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnect_attachment` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.\n\n  * `description`: An optional description of this resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `interconnect`: URL of the underlying Interconnect object that this attachment's traffic will traverse through.\n\n  * `router`: URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.\n\n  * `region`: [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `google_reference_id`: [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.\n\n  * `mtu`: Maximum Transmission Unit (MTU), in bytes, of packets passing through this interconnect attachment. Only 1440 and 1500 are allowed. If not specified, the value will default to 1440.\n\n  * `private_interconnect_info`: Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED.\n\n    * `tag8021q`: [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.\n\n  * `operational_status`: [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values: - OS_ACTIVE: The attachment has been turned up and is ready to use. - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.\n  Possible values:\n    * OS_ACTIVE\n    * OS_UNPROVISIONED\n\n  * `cloud_router_ip_address`: [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.\n\n  * `customer_router_ip_address`: [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.\n\n  * `type`: The type of interconnect attachment this is, which can take one of the following values: - DEDICATED: an attachment to a Dedicated Interconnect. - PARTNER: an attachment to a Partner Interconnect, created by the customer. - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.\n  Possible values:\n    * DEDICATED\n    * PARTNER\n    * PARTNER_PROVIDER\n\n  * `pairing_key`: [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of a PARTNER attachment used to initiate provisioning with a selected partner. Of the form \"XXXXX/region/domain\"\n\n  * `admin_enabled`: Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.\n\n  * `vlan_tag8021q`: The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4093. Only specified at creation time.\n\n  * `edge_availability_domain`: Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values: - AVAILABILITY_DOMAIN_ANY - AVAILABILITY_DOMAIN_1 - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.\n  Possible values:\n    * AVAILABILITY_DOMAIN_1\n    * AVAILABILITY_DOMAIN_2\n    * AVAILABILITY_DOMAIN_ANY\n\n  * `candidate_subnets`: Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google's edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.\n\n  * `bandwidth`: Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values: - BPS_50M: 50 Mbit/s - BPS_100M: 100 Mbit/s - BPS_200M: 200 Mbit/s - BPS_300M: 300 Mbit/s - BPS_400M: 400 Mbit/s - BPS_500M: 500 Mbit/s - BPS_1G: 1 Gbit/s - BPS_2G: 2 Gbit/s - BPS_5G: 5 Gbit/s - BPS_10G: 10 Gbit/s - BPS_20G: 20 Gbit/s - BPS_50G: 50 Gbit/s\n  Possible values:\n    * BPS_100M\n    * BPS_10G\n    * BPS_1G\n    * BPS_200M\n    * BPS_20G\n    * BPS_2G\n    * BPS_300M\n    * BPS_400M\n    * BPS_500M\n    * BPS_50G\n    * BPS_50M\n    * BPS_5G\n\n  * `partner_metadata`: Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments.\n\n    * `partner_name`: Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.\n\n    * `interconnect_name`: Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner's portal. For instance \"Chicago 1\". This value may be validated to match approved Partner values.\n\n    * `portal_url`: URL of the Partner's portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.\n\n  * `labels`: Labels for this resource. These can only be added or modified by the setLabels method. Each label key/value pair must comply with RFC1035. Label values may be empty.\n\n    * `additional_properties`:\n\n  * `label_fingerprint`: A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.\n\n  * `state`: [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values: - ACTIVE: The attachment has been turned up and is ready to use. - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete. - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side. - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it. - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it. - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.\n  Possible values:\n    * ACTIVE\n    * DEFUNCT\n    * PARTNER_REQUEST_RECEIVED\n    * PENDING_CUSTOMER\n    * PENDING_PARTNER\n    * STATE_UNSPECIFIED\n    * UNPROVISIONED\n\n  * `partner_asn`: Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.\n\n  * `encryption`: Indicates the user-supplied encryption option of this VLAN attachment (interconnectAttachment). Can only be specified at attachment creation for PARTNER or DEDICATED attachments. Possible values are: - NONE - This is the default value, which means that the VLAN attachment carries unencrypted traffic. VMs are able to send traffic to, or receive traffic from, such a VLAN attachment. - IPSEC - The VLAN attachment carries only encrypted traffic that is encrypted by an IPsec device, such as an HA VPN gateway or third-party IPsec VPN. VMs cannot directly send traffic to, or receive traffic from, such a VLAN attachment. To use *HA VPN over Cloud Interconnect*, the VLAN attachment must be created with this option.\n  Possible values:\n    * IPSEC\n    * NONE\n\n  * `ipsec_internal_addresses`: A list of URLs of addresses that have been reserved for the VLAN attachment. Used only for the VLAN attachment that has the encryption option as IPSEC. The addresses must be regional internal IP address ranges. When creating an HA VPN gateway over the VLAN attachment, if the attachment is configured to use a regional internal IP address, then the VPN gateway's IP address is allocated from the IP address range specified here. For example, if the HA VPN gateway's interface 0 is paired to this VLAN attachment, then a regional internal IP address for the VPN gateway interface 0 will be allocated from the IP address specified for this VLAN attachment. If this field is not specified when creating the VLAN attachment, then later on when creating an HA VPN gateway on this VLAN attachment, the HA VPN gateway's IP address is allocated from the regional external IP address pool.\n\n  * `dataplane_version`: [Output Only] Dataplane version for this InterconnectAttachment. This field is only present for Dataplane version 2 and higher. Absence of this field in the API output indicates that the Dataplane is version 1.\n\n  * `satisfies_pzs`: [Output Only] Reserved for future use.\n\n  * `stack_type`: The stack type for this interconnect attachment to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. This field can be both set at interconnect attachments creation and update interconnect attachment operations.\n  Possible values:\n    * IPV4_IPV6\n    * IPV4_ONLY\n\n  * `cloud_router_ipv6_address`: [Output Only] IPv6 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.\n\n  * `customer_router_ipv6_address`: [Output Only] IPv6 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.\n\n  * `candidate_ipv6_subnets`: This field is not available.\n\n  * `cloud_router_ipv6_interface_id`: This field is not available.\n\n  * `customer_router_ipv6_interface_id`: This field is not available.\n\n  * `subnet_length`: Length of the IPv4 subnet mask. Allowed values: - 29 (default) - 30 The default value is 29, except for Cross-Cloud Interconnect connections that use an InterconnectRemoteLocation with a constraints.subnetLengthRange.min equal to 30. For example, connections that use an Azure remote location fall into this category. In these cases, the default value is 30, and requesting 29 returns an error. Where both 29 and 30 are allowed, 29 is preferred, because it gives Google Cloud Support more debugging visibility.\n\n  * `remote_service`: [Output Only] If the attachment is on a Cross-Cloud Interconnect connection, this field contains the interconnect's remote location service provider. Example values: \"Amazon Web Services\" \"Microsoft Azure\". The field is set only for attachments on Cross-Cloud Interconnect connections. Its value is copied from the InterconnectRemoteLocation remoteService field.\n\n  * `configuration_constraints`:\n\n    * `bgp_md5`: [Output Only] Whether the attachment's BGP session requires/allows/disallows BGP MD5 authentication. This can take one of the following values: MD5_OPTIONAL, MD5_REQUIRED, MD5_UNSUPPORTED. For example, a Cross-Cloud Interconnect connection to a remote cloud provider that requires BGP MD5 authentication has the interconnectRemoteLocation attachment_configuration_constraints.bgp_md5 field set to MD5_REQUIRED, and that property is propagated to the attachment. Similarly, if BGP MD5 is MD5_UNSUPPORTED, an error is returned if MD5 is requested.\n    Possible values:\n      * MD5_OPTIONAL\n      * MD5_REQUIRED\n      * MD5_UNSUPPORTED\n\n    * `bgp_peer_asn_ranges`: [Output Only] List of ASN ranges that the remote location is known to support. Formatted as an array of inclusive ranges {min: min-value, max: max-value}. For example, [{min: 123, max: 123}, {min: 64512, max: 65534}] allows the peer ASN to be 123 or anything in the range 64512-65534. This field is only advisory. Although the API accepts other ranges, these are the ranges that we recommend.\n\n      * `min`:\n\n      * `max`:\n\n  * `multicast_enabled`: Whether or not to permit multicast traffic for this attachment. Multicast packets will be dropped if this is not enabled.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnect_attachments.md",
    "content": "+++\ntitle = \"google_compute_interconnect_attachments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnect_attachments\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnect_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnect_attachments` InSpec audit resource to to test a Google Cloud InterconnectAttachment resource.\n\n## Examples\n\n```ruby\n    describe google_compute_interconnect_attachments(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnect_attachments` resource:\n\nSee [google_compute_interconnect_attachment](google_compute_interconnect_attachment) for more detailed information.\n\n  * `kinds`: an array of `google_compute_interconnect_attachment` kind\n  * `descriptions`: an array of `google_compute_interconnect_attachment` description\n  * `self_links`: an array of `google_compute_interconnect_attachment` self_link\n  * `self_link_with_ids`: an array of `google_compute_interconnect_attachment` self_link_with_id\n  * `ids`: an array of `google_compute_interconnect_attachment` id\n  * `creation_timestamps`: an array of `google_compute_interconnect_attachment` creation_timestamp\n  * `names`: an array of `google_compute_interconnect_attachment` name\n  * `interconnects`: an array of `google_compute_interconnect_attachment` interconnect\n  * `routers`: an array of `google_compute_interconnect_attachment` router\n  * `regions`: an array of `google_compute_interconnect_attachment` region\n  * `google_reference_ids`: an array of `google_compute_interconnect_attachment` google_reference_id\n  * `mtus`: an array of `google_compute_interconnect_attachment` mtu\n  * `private_interconnect_infos`: an array of `google_compute_interconnect_attachment` private_interconnect_info\n  * `operational_statuses`: an array of `google_compute_interconnect_attachment` operational_status\n  * `cloud_router_ip_addresses`: an array of `google_compute_interconnect_attachment` cloud_router_ip_address\n  * `customer_router_ip_addresses`: an array of `google_compute_interconnect_attachment` customer_router_ip_address\n  * `types`: an array of `google_compute_interconnect_attachment` type\n  * `pairing_keys`: an array of `google_compute_interconnect_attachment` pairing_key\n  * `admin_enableds`: an array of `google_compute_interconnect_attachment` admin_enabled\n  * `vlan_tag8021qs`: an array of `google_compute_interconnect_attachment` vlan_tag8021q\n  * `edge_availability_domains`: an array of `google_compute_interconnect_attachment` edge_availability_domain\n  * `candidate_subnets`: an array of `google_compute_interconnect_attachment` candidate_subnets\n  * `bandwidths`: an array of `google_compute_interconnect_attachment` bandwidth\n  * `partner_metadata`: an array of `google_compute_interconnect_attachment` partner_metadata\n  * `labels`: an array of `google_compute_interconnect_attachment` labels\n  * `label_fingerprints`: an array of `google_compute_interconnect_attachment` label_fingerprint\n  * `states`: an array of `google_compute_interconnect_attachment` state\n  * `partner_asns`: an array of `google_compute_interconnect_attachment` partner_asn\n  * `encryptions`: an array of `google_compute_interconnect_attachment` encryption\n  * `ipsec_internal_addresses`: an array of `google_compute_interconnect_attachment` ipsec_internal_addresses\n  * `dataplane_versions`: an array of `google_compute_interconnect_attachment` dataplane_version\n  * `satisfies_pzs`: an array of `google_compute_interconnect_attachment` satisfies_pzs\n  * `stack_types`: an array of `google_compute_interconnect_attachment` stack_type\n  * `cloud_router_ipv6_addresses`: an array of `google_compute_interconnect_attachment` cloud_router_ipv6_address\n  * `customer_router_ipv6_addresses`: an array of `google_compute_interconnect_attachment` customer_router_ipv6_address\n  * `candidate_ipv6_subnets`: an array of `google_compute_interconnect_attachment` candidate_ipv6_subnets\n  * `cloud_router_ipv6_interface_ids`: an array of `google_compute_interconnect_attachment` cloud_router_ipv6_interface_id\n  * `customer_router_ipv6_interface_ids`: an array of `google_compute_interconnect_attachment` customer_router_ipv6_interface_id\n  * `subnet_lengths`: an array of `google_compute_interconnect_attachment` subnet_length\n  * `remote_services`: an array of `google_compute_interconnect_attachment` remote_service\n  * `configuration_constraints`: an array of `google_compute_interconnect_attachment` configuration_constraints\n  * `multicast_enableds`: an array of `google_compute_interconnect_attachment` multicast_enabled\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnect_location.md",
    "content": "+++\ntitle = \"google_compute_interconnect_location resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnect_location\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnect_location resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnect_location` InSpec audit resource to to test a Google Cloud InterconnectLocation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_interconnect_location(project: 'chef-gcp-inspec', name: 'akl-zone1-1353') do\n  it { should exist }\n  its('facility_provider_facility_id') { should eq 'Auckland - Albany' }\n  its('facility_provider') { should eq 'Vocus' }\nend\n\ndescribe google_compute_interconnect_location(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnect_location` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `availability_zone`: Availability zone for this InterconnectLocation. Within a metropolitan area (metro), maintenance will not be simultaneously scheduled in more than one availability zone. Example: \"zone1\" or \"zone2\".\n\n  * `client_operation_id`: The value of requestId if you provided it in the request. Not present otherwise.\n\n  * `facility_provider`: The name of the provider for this facility (e.g., EQUINIX).\n\n  * `facility_provider_facility_id`: A provider-assigned Identifier for this facility (e.g., Ashburn-DC1).\n\n  * `status`: The status of this InterconnectLocation, which can take one of the following values: * CLOSED: The InterconnectLocation is closed and is unavailable for provisioning new Interconnects. * AVAILABLE: The InterconnectLocation is available for provisioning new Interconnects.\n  Possible values:\n    * CLOSED\n    * AVAILABLE\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnect_locations.md",
    "content": "+++\ntitle = \"google_compute_interconnect_locations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnect_locations\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnect_locations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnect_locations` InSpec audit resource to to test a Google Cloud InterconnectLocation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_interconnect_locations(project: 'chef-gcp-inspec') do\n  its('names') { should include 'akl-zone1-1353' }\n  its('facility_provider_facility_ids') { should include 'Auckland - Albany' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnect_locations` resource:\n\nSee [google_compute_interconnect_location](google_compute_interconnect_location) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_interconnect_location` creation_timestamp\n  * `descriptions`: an array of `google_compute_interconnect_location` description\n  * `ids`: an array of `google_compute_interconnect_location` id\n  * `names`: an array of `google_compute_interconnect_location` name\n  * `availability_zones`: an array of `google_compute_interconnect_location` availability_zone\n  * `client_operation_ids`: an array of `google_compute_interconnect_location` client_operation_id\n  * `facility_providers`: an array of `google_compute_interconnect_location` facility_provider\n  * `facility_provider_facility_ids`: an array of `google_compute_interconnect_location` facility_provider_facility_id\n  * `statuses`: an array of `google_compute_interconnect_location` status\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_interconnects.md",
    "content": "+++\ntitle = \"google_compute_interconnects resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_interconnects\"\nidentifier = \"inspec/resources/gcp/google_compute_interconnects resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_interconnects` InSpec audit resource to to test a Google Cloud Interconnect resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_interconnects(project: 'chef-gcp-inspec') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_interconnects` resource:\n\nSee [google_compute_interconnect](google_compute_interconnect) for more detailed information.\n\n  * `admin_enableds`: an array of `google_compute_interconnect` admin_enabled\n  * `creation_timestamps`: an array of `google_compute_interconnect` creation_timestamp\n  * `descriptions`: an array of `google_compute_interconnect` description\n  * `locations`: an array of `google_compute_interconnect` location\n  * `ids`: an array of `google_compute_interconnect` id\n  * `names`: an array of `google_compute_interconnect` name\n  * `noc_contact_emails`: an array of `google_compute_interconnect` noc_contact_email\n  * `peer_ip_addresses`: an array of `google_compute_interconnect` peer_ip_address\n  * `google_ip_addresses`: an array of `google_compute_interconnect` google_ip_address\n  * `client_operation_ids`: an array of `google_compute_interconnect` client_operation_id\n  * `google_reference_ids`: an array of `google_compute_interconnect` google_reference_id\n  * `provisioned_link_counts`: an array of `google_compute_interconnect` provisioned_link_count\n  * `customer_names`: an array of `google_compute_interconnect` customer_name\n  * `requested_link_counts`: an array of `google_compute_interconnect` requested_link_count\n  * `operational_statuses`: an array of `google_compute_interconnect` operational_status\n  * `link_types`: an array of `google_compute_interconnect` link_type\n  * `interconnect_types`: an array of `google_compute_interconnect` interconnect_type\n  * `interconnect_attachments`: an array of `google_compute_interconnect` interconnect_attachments\n  * `expected_outages`: an array of `google_compute_interconnect` expected_outages\n  * `circuit_infos`: an array of `google_compute_interconnect` circuit_infos\n  * `satisfies_pzs`: an array of `google_compute_interconnect` satisfies_pzs\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_license.md",
    "content": "\n+++\ntitle = \"google_compute_license resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_license\"\nidentifier = \"inspec/resources/gcp/google_compute_license resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_license` InSpec audit resource to to test a Google Cloud License resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_license(name: 'value_license_id', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('name') { should cmp 'value_name' }\n\tits('id') { should cmp 'value_id' }\n\tits('license_code') { should cmp 'value_licensecode' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\nend\ndescribe google_compute_license(name: 'value_license_id', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_license` resource:\n\n\n  * `kind`: [Output Only] Type of resource. Always compute#license for licenses.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long and comply with RFC1035.\n\n  * `charges_use_fee`: [Output Only] Deprecated. This field no longer reflects whether a license charges a usage fee.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `license_code`: [Output Only] The unique code used to attach this license to images, snapshots, and disks.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional textual description of the resource; provided by the client when the resource is created.\n\n  * `transferable`: If false, licenses will not be copied from the source resource when creating an image from a disk, disk from snapshot, or snapshot from disk.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `resource_requirements`:\n\n    * `min_guest_cpu_count`: Minimum number of guest cpus required to use the Instance. Enforced at Instance creation and Instance start.\n\n    * `min_memory_mb`: Minimum memory required to use the Instance. Enforced at Instance creation and Instance start.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_license_code.md",
    "content": "+++\ntitle = \"google_compute_license_code resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_license_code\"\nidentifier = \"inspec/resources/gcp/google_compute_license_code resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_license_code` InSpec audit resource to to test a Google Cloud LicenseCode resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_license_code(project: 'chef-gcp-inspec', name: 'akl-zone1-1353') do\n  it { should exist }\nend\n\ndescribe google_compute_license_code(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_license_code` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `transferable`: If true, the license will remain attached when creating images or snapshots from disks.Otherwise, the license is not transferred.\n\n  * `state`: Current state of this License Code.\n\n  * `license_alias`: URL and description aliases of Licenses with the same License Code.\n\n    * `self_link`: Server-defined, fully qualified URL for this resource.\n\n    * `description`: Description of this License Code.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_licenses.md",
    "content": "+++\ntitle = \"google_compute_licenses resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_licenses\"\nidentifier = \"inspec/resources/gcp/google_compute_licenses resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_licenses` InSpec audit resource to to test a Google Cloud License resource.\n\n## Examples\n\n```ruby\n  describe google_compute_licenses(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_licenses` resource:\n\nSee [google_compute_license](google_compute_license) for more detailed information.\n\n  * `kinds`: an array of `google_compute_license` kind\n  * `names`: an array of `google_compute_license` name\n  * `charges_use_fees`: an array of `google_compute_license` charges_use_fee\n  * `ids`: an array of `google_compute_license` id\n  * `license_codes`: an array of `google_compute_license` license_code\n  * `creation_timestamps`: an array of `google_compute_license` creation_timestamp\n  * `descriptions`: an array of `google_compute_license` description\n  * `transferables`: an array of `google_compute_license` transferable\n  * `self_links`: an array of `google_compute_license` self_link\n  * `resource_requirements`: an array of `google_compute_license` resource_requirements\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_machine_image.md",
    "content": "+++\ntitle = \"google_compute_machine_image resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_machine_image\"\nidentifier = \"inspec/resources/gcp/google_compute_machine_image resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_machine_image` InSpec audit resource to to test a Google Cloud MachineImage resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_machine_image(name: 'value_name', project: 'chef-gcp-inspec') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('source_instance') { should cmp 'value_sourceinstance' }\n\tits('status') { should cmp 'value_status' }\n\tits('total_storage_bytes') { should cmp 'value_totalstoragebytes' }\n\nend\n\ndescribe google_compute_machine_image(name: 'value_name', project: 'chef-gcp-inspec') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_machine_image` resource:\n\n\n  * `kind`: [Output Only] The resource type, which is always compute#machineImage for machine image.\n\n  * `id`: [Output Only] A unique identifier for this machine image. The server defines this identifier.\n\n  * `creation_timestamp`: [Output Only] The creation timestamp for this machine image in RFC3339 text format.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] The URL for this machine image. The server defines this URL.\n\n  * `source_instance`: The source instance used to create the machine image. You can provide this as a partial or full URL to the resource. For example, the following are valid values: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /instances/instance - projects/project/zones/zone/instances/instance\n\n  * `status`: [Output Only] The status of the machine image. One of the following values: INVALID, CREATING, READY, DELETING, and UPLOADING.\n  Possible values:\n    * CREATING\n    * DELETING\n    * INVALID\n    * READY\n    * UPLOADING\n\n  * `source_instance_properties`: DEPRECATED: Please use compute#instanceProperties instead. New properties will not be added to this field.\n\n    * `description`: An optional text description for the instances that are created from this machine image.\n\n    * `tags`: A set of instance tags.\n\n      * `items`: An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.\n\n      * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the tags' contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update tags. You must always provide an up-to-date fingerprint hash in order to update or change tags. To see the latest fingerprint, make get() request to the instance.\n\n    * `machine_type`: The machine type to use for instances that are created from this machine image.\n\n    * `can_ip_forward`: Enables instances created based on this machine image to send packets with source IP addresses other than their own and receive packets with destination IP addresses other than their own. If these instances will be used as an IP gateway or it will be set as the next-hop in a Route resource, specify true. If unsure, leave this set to false. See the Enable IP forwarding documentation for more information.\n\n    * `network_interfaces`: An array of network access configurations for this interface.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#networkInterface for network interfaces.\n\n      * `network`: URL of the VPC network resource for this instance. When creating an instance, if neither the network nor the subnetwork is specified, the default network global/networks/default is used. If the selected project doesn't have the default network, you must specify a network or subnet. If the network is not specified but the subnetwork is specified, the network is inferred. If you specify this property, you can specify the network as a full or partial URL. For example, the following are all valid URLs: - https://www.googleapis.com/compute/v1/projects/project/global/networks/ network - projects/project/global/networks/network - global/networks/default\n\n      * `subnetwork`: The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not specify this field. If the network is in auto subnet mode, specifying the subnetwork is optional. If the network is in custom subnet mode, specifying the subnetwork is required. If you specify this field, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs: - https://www.googleapis.com/compute/v1/projects/project/regions/region /subnetworks/subnetwork - regions/region/subnetworks/subnetwork\n\n      * `network_ip`: An IPv4 internal IP address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.\n\n      * `ipv6_address`: An IPv6 internal network address for this network interface. To use a static internal IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an internal IPv6 address from the instance's subnetwork.\n\n      * `internal_ipv6_prefix_length`: The prefix length of the primary internal IPv6 range.\n\n      * `name`: [Output Only] The name of the network interface, which is generated by the server. For a VM, the network interface uses the nicN naming format. Where N is a value between 0 and 7. The default interface value is nic0.\n\n      * `access_configs`: An array of configurations for this interface. Currently, only one access config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs specified, then this instance will have no external internet access.\n\n        * `kind`: [Output Only] Type of the resource. Always compute#accessConfig for access configs.\n\n        * `type`: The type of configuration. In accessConfigs (IPv4), the default and only option is ONE_TO_ONE_NAT. In ipv6AccessConfigs, the default and only option is DIRECT_IPV6.\n        Possible values:\n          * DIRECT_IPV6\n          * ONE_TO_ONE_NAT\n\n        * `name`: The name of this access configuration. In accessConfigs (IPv4), the default and recommended name is External NAT, but you can use any arbitrary string, such as My external IP or Network Access. In ipv6AccessConfigs, the recommend name is External IPv6.\n\n        * `nat_ip`: Applies to accessConfigs (IPv4) only. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n        * `external_ipv6`: Applies to ipv6AccessConfigs only. The first IPv6 address of the external IPv6 range associated with this instance, prefix length is stored in externalIpv6PrefixLength in ipv6AccessConfig. To use a static external IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an external IPv6 address from the instance's subnetwork.\n\n        * `external_ipv6_prefix_length`: Applies to ipv6AccessConfigs only. The prefix length of the external IPv6 range.\n\n        * `set_public_ptr`: Specifies whether a public DNS 'PTR' record should be created to map the external IP address of the instance to a DNS domain name. This field is not used in ipv6AccessConfig. A default PTR record will be created if the VM has external IPv6 range associated.\n\n        * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the `setPublicPtr` field is enabled in accessConfig. If this field is unspecified in ipv6AccessConfig, a default PTR record will be createc for first IP in associated external IPv6 range.\n\n        * `network_tier`: This signifies the networking tier used for configuring this access configuration and can only take the following values: PREMIUM, STANDARD. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n        Possible values:\n          * FIXED_STANDARD\n          * PREMIUM\n          * STANDARD\n          * STANDARD_OVERRIDES_FIXED_STANDARD\n\n        * `security_policy`: [Output Only] The resource URL for the security policy associated with this access config.\n\n      * `ipv6_access_configs`: An array of IPv6 access configurations for this interface. Currently, only one IPv6 access config, DIRECT_IPV6, is supported. If there is no ipv6AccessConfig specified, then this instance will have no external IPv6 Internet access.\n\n        * `kind`: [Output Only] Type of the resource. Always compute#accessConfig for access configs.\n\n        * `type`: The type of configuration. In accessConfigs (IPv4), the default and only option is ONE_TO_ONE_NAT. In ipv6AccessConfigs, the default and only option is DIRECT_IPV6.\n        Possible values:\n          * DIRECT_IPV6\n          * ONE_TO_ONE_NAT\n\n        * `name`: The name of this access configuration. In accessConfigs (IPv4), the default and recommended name is External NAT, but you can use any arbitrary string, such as My external IP or Network Access. In ipv6AccessConfigs, the recommend name is External IPv6.\n\n        * `nat_ip`: Applies to accessConfigs (IPv4) only. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n        * `external_ipv6`: Applies to ipv6AccessConfigs only. The first IPv6 address of the external IPv6 range associated with this instance, prefix length is stored in externalIpv6PrefixLength in ipv6AccessConfig. To use a static external IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an external IPv6 address from the instance's subnetwork.\n\n        * `external_ipv6_prefix_length`: Applies to ipv6AccessConfigs only. The prefix length of the external IPv6 range.\n\n        * `set_public_ptr`: Specifies whether a public DNS 'PTR' record should be created to map the external IP address of the instance to a DNS domain name. This field is not used in ipv6AccessConfig. A default PTR record will be created if the VM has external IPv6 range associated.\n\n        * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the `setPublicPtr` field is enabled in accessConfig. If this field is unspecified in ipv6AccessConfig, a default PTR record will be createc for first IP in associated external IPv6 range.\n\n        * `network_tier`: This signifies the networking tier used for configuring this access configuration and can only take the following values: PREMIUM, STANDARD. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n        Possible values:\n          * FIXED_STANDARD\n          * PREMIUM\n          * STANDARD\n          * STANDARD_OVERRIDES_FIXED_STANDARD\n\n        * `security_policy`: [Output Only] The resource URL for the security policy associated with this access config.\n\n      * `alias_ip_ranges`: An array of alias IP ranges for this network interface. You can only specify this field for network interfaces in VPC networks.\n\n        * `ip_cidr_range`: The IP alias ranges to allocate for this interface. This IP CIDR range must belong to the specified subnetwork and cannot contain IP addresses reserved by system or used by other network interfaces. This range may be a single IP address (such as 10.2.3.4), a netmask (such as /24) or a CIDR-formatted string (such as 10.1.2.0/24).\n\n        * `subnetwork_range_name`: The name of a subnetwork secondary IP range from which to allocate an IP alias range. If not specified, the primary range of the subnetwork is used.\n\n      * `fingerprint`: Fingerprint hash of contents stored in this network interface. This field will be ignored when inserting an Instance or adding a NetworkInterface. An up-to-date fingerprint must be provided in order to update the NetworkInterface. The request will fail with error 400 Bad Request if the fingerprint is not provided, or 412 Precondition Failed if the fingerprint is out of date.\n\n      * `stack_type`: The stack type for this network interface. To assign only IPv4 addresses, use IPV4_ONLY. To assign both IPv4 and IPv6 addresses, use IPV4_IPV6. If not specified, IPV4_ONLY is used. This field can be both set at instance creation and update network interface operations.\n      Possible values:\n        * IPV4_IPV6\n        * IPV4_ONLY\n\n      * `ipv6_access_type`: [Output Only] One of EXTERNAL, INTERNAL to indicate whether the IP can be accessed from the Internet. This field is always inherited from its subnetwork. Valid only if stackType is IPV4_IPV6.\n      Possible values:\n        * EXTERNAL\n        * INTERNAL\n\n      * `queue_count`: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It'll be empty if not specified by the users.\n\n      * `nic_type`: The type of vNIC to be used on this interface. This may be gVNIC or VirtioNet.\n      Possible values:\n        * GVNIC\n        * UNSPECIFIED_NIC_TYPE\n        * VIRTIO_NET\n\n      * `network_attachment`: The URL of the network attachment that this interface should connect to in the following format: projects/{project_number}/regions/{region_name}/networkAttachments/{network_attachment_name}.\n\n    * `disks`: An array of disks that are associated with the instances that are created from this machine image.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#attachedDisk for attached disks.\n\n      * `type`: Specifies the type of the attached disk, either SCRATCH or PERSISTENT.\n      Possible values:\n        * PERSISTENT\n        * SCRATCH\n\n      * `mode`: The mode in which this disk is attached to the source instance, either READ_WRITE or READ_ONLY.\n      Possible values:\n        * READ_ONLY\n        * READ_WRITE\n\n      * `source`: Specifies a URL of the disk attached to the source instance.\n\n      * `device_name`: Specifies the name of the disk attached to the source instance.\n\n      * `index`: Specifies zero-based index of the disk that is attached to the source instance.\n\n      * `boot`: Indicates that this is a boot disk. The virtual machine will use the first partition of the disk for its root filesystem.\n\n      * `auto_delete`: Specifies whether the disk will be auto-deleted when the instance is deleted (but not when the disk is detached from the instance).\n\n      * `licenses`: [Output Only] Any valid publicly visible licenses.\n\n      * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME.\n      Possible values:\n        * NVME\n        * SCSI\n\n      * `guest_os_features`: A list of features to enable on the guest operating system. Applicable only for bootable images. Read Enabling guest operating system features to see a list of available options.\n\n        * `type`: The ID of a supported feature. To add multiple values, use commas to separate values. Set to one or more of the following values: - VIRTIO_SCSI_MULTIQUEUE - WINDOWS - MULTI_IP_SUBNET - UEFI_COMPATIBLE - GVNIC - SEV_CAPABLE - SUSPEND_RESUME_COMPATIBLE - SEV_LIVE_MIGRATABLE - SEV_SNP_CAPABLE For more information, see Enabling guest operating system features.\n        Possible values:\n          * FEATURE_TYPE_UNSPECIFIED\n          * GVNIC\n          * MULTI_IP_SUBNET\n          * SECURE_BOOT\n          * SEV_CAPABLE\n          * SEV_LIVE_MIGRATABLE\n          * SEV_LIVE_MIGRATABLE_V2\n          * SEV_SNP_CAPABLE\n          * UEFI_COMPATIBLE\n          * VIRTIO_SCSI_MULTIQUEUE\n          * WINDOWS\n\n      * `disk_encryption_key`:\n\n        * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n        * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n        * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n        * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n        * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n      * `disk_size_gb`: The size of the disk in base-2 GB.\n\n      * `storage_bytes`: [Output Only] A size of the storage used by the disk's snapshot by this machine image.\n\n      * `storage_bytes_status`: [Output Only] An indicator whether storageBytes is in a stable state or it is being adjusted as a result of shared storage reallocation. This status can either be UPDATING, meaning the size of the snapshot is being updated, or UP_TO_DATE, meaning the size of the snapshot is up-to-date.\n      Possible values:\n        * UPDATING\n        * UP_TO_DATE\n\n      * `disk_type`: [Output Only] URL of the disk type resource. For example: projects/project /zones/zone/diskTypes/pd-standard or pd-ssd\n\n    * `metadata`: A metadata key/value entry.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#metadata for metadata.\n\n      * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the resource.\n\n      * `items`: Array of key/value pairs. The total size of all keys and values must be less than 512 KB.\n\n        * `key`: Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.\n\n        * `value`: Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 262144 bytes (256 KiB).\n\n    * `service_accounts`: A list of service accounts with specified scopes. Access tokens for these service accounts are available to the instances that are created from this machine image. Use metadata queries to obtain the access tokens for these instances.\n\n      * `email`: Email address of the service account.\n\n      * `scopes`: The list of scopes to be made available for this service account.\n\n    * `scheduling`: Sets the scheduling options for an Instance.\n\n      * `on_host_maintenance`: Defines the maintenance behavior for this instance. For standard instances, the default behavior is MIGRATE. For preemptible instances, the default and only possible behavior is TERMINATE. For more information, see Set VM host maintenance policy.\n      Possible values:\n        * MIGRATE\n        * TERMINATE\n\n      * `automatic_restart`: Specifies whether the instance should be automatically restarted if it is terminated by Compute Engine (not terminated by a user). You can only set the automatic restart option for standard instances. Preemptible instances cannot be automatically restarted. By default, this is set to true so an instance is automatically restarted if it is terminated by Compute Engine.\n\n      * `preemptible`: Defines whether the instance is preemptible. This can only be set during instance creation or while the instance is stopped and therefore, in a `TERMINATED` state. See Instance Life Cycle for more information on the possible instance states.\n\n      * `node_affinities`: A set of node affinity and anti-affinity configurations. Refer to Configuring node affinity for more information. Overrides reservationAffinity.\n\n        * `key`: Corresponds to the label key of Node resource.\n\n        * `operator`: Defines the operation of node selection. Valid operators are IN for affinity and NOT_IN for anti-affinity.\n        Possible values:\n          * IN\n          * NOT_IN\n          * OPERATOR_UNSPECIFIED\n\n        * `values`: Corresponds to the label values of Node resource.\n\n      * `min_node_cpus`: The minimum number of virtual CPUs this instance will consume when running on a sole-tenant node.\n\n      * `location_hint`: An opaque location hint used to place the instance close to other resources. This field is for use by internal tools that use the public API.\n\n      * `provisioning_model`: Specifies the provisioning model of the instance.\n      Possible values:\n        * SPOT\n        * STANDARD\n\n      * `instance_termination_action`: Specifies the termination action for the instance.\n      Possible values:\n        * DELETE\n        * INSTANCE_TERMINATION_ACTION_UNSPECIFIED\n        * STOP\n\n      * `local_ssd_recovery_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `labels`: Labels to apply to instances that are created from this machine image.\n\n      * `additional_properties`:\n\n    * `guest_accelerators`: A list of guest accelerator cards' type and count to use for instances created from this machine image.\n\n      * `accelerator_type`: Full or partial URL of the accelerator type resource to attach to this instance. For example: projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100 If you are creating an instance template, specify only the accelerator name. See GPUs on Compute Engine for a full list of accelerator types.\n\n      * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n    * `min_cpu_platform`: Minimum cpu/platform to be used by instances created from this machine image. The instance may be scheduled on the specified or newer cpu/platform. Applicable values are the friendly names of CPU platforms, such as minCpuPlatform: \"Intel Haswell\" or minCpuPlatform: \"Intel Sandy Bridge\". For more information, read Specifying a Minimum CPU Platform.\n\n    * `deletion_protection`: Whether the instance created from this machine image should be protected against deletion.\n\n    * `key_revocation_action_type`: KeyRevocationActionType of the instance. Supported options are \"STOP\" and \"NONE\". The default value is \"NONE\" if it is not specified.\n    Possible values:\n      * KEY_REVOCATION_ACTION_TYPE_UNSPECIFIED\n      * NONE\n      * STOP\n\n  * `instance_properties`:\n\n    * `description`: An optional text description for the instances that are created from these properties.\n\n    * `tags`: A set of instance tags.\n\n      * `items`: An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.\n\n      * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the tags' contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update tags. You must always provide an up-to-date fingerprint hash in order to update or change tags. To see the latest fingerprint, make get() request to the instance.\n\n    * `resource_manager_tags`: Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.\n\n      * `additional_properties`:\n\n    * `machine_type`: The machine type to use for instances that are created from these properties.\n\n    * `can_ip_forward`: Enables instances created based on these properties to send packets with source IP addresses other than their own and receive packets with destination IP addresses other than their own. If these instances will be used as an IP gateway or it will be set as the next-hop in a Route resource, specify true. If unsure, leave this set to false. See the Enable IP forwarding documentation for more information.\n\n    * `network_interfaces`: An array of network access configurations for this interface.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#networkInterface for network interfaces.\n\n      * `network`: URL of the VPC network resource for this instance. When creating an instance, if neither the network nor the subnetwork is specified, the default network global/networks/default is used. If the selected project doesn't have the default network, you must specify a network or subnet. If the network is not specified but the subnetwork is specified, the network is inferred. If you specify this property, you can specify the network as a full or partial URL. For example, the following are all valid URLs: - https://www.googleapis.com/compute/v1/projects/project/global/networks/ network - projects/project/global/networks/network - global/networks/default\n\n      * `subnetwork`: The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not specify this field. If the network is in auto subnet mode, specifying the subnetwork is optional. If the network is in custom subnet mode, specifying the subnetwork is required. If you specify this field, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs: - https://www.googleapis.com/compute/v1/projects/project/regions/region /subnetworks/subnetwork - regions/region/subnetworks/subnetwork\n\n      * `network_ip`: An IPv4 internal IP address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.\n\n      * `ipv6_address`: An IPv6 internal network address for this network interface. To use a static internal IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an internal IPv6 address from the instance's subnetwork.\n\n      * `internal_ipv6_prefix_length`: The prefix length of the primary internal IPv6 range.\n\n      * `name`: [Output Only] The name of the network interface, which is generated by the server. For a VM, the network interface uses the nicN naming format. Where N is a value between 0 and 7. The default interface value is nic0.\n\n      * `access_configs`: An array of configurations for this interface. Currently, only one access config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs specified, then this instance will have no external internet access.\n\n        * `kind`: [Output Only] Type of the resource. Always compute#accessConfig for access configs.\n\n        * `type`: The type of configuration. In accessConfigs (IPv4), the default and only option is ONE_TO_ONE_NAT. In ipv6AccessConfigs, the default and only option is DIRECT_IPV6.\n        Possible values:\n          * DIRECT_IPV6\n          * ONE_TO_ONE_NAT\n\n        * `name`: The name of this access configuration. In accessConfigs (IPv4), the default and recommended name is External NAT, but you can use any arbitrary string, such as My external IP or Network Access. In ipv6AccessConfigs, the recommend name is External IPv6.\n\n        * `nat_ip`: Applies to accessConfigs (IPv4) only. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n        * `external_ipv6`: Applies to ipv6AccessConfigs only. The first IPv6 address of the external IPv6 range associated with this instance, prefix length is stored in externalIpv6PrefixLength in ipv6AccessConfig. To use a static external IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an external IPv6 address from the instance's subnetwork.\n\n        * `external_ipv6_prefix_length`: Applies to ipv6AccessConfigs only. The prefix length of the external IPv6 range.\n\n        * `set_public_ptr`: Specifies whether a public DNS 'PTR' record should be created to map the external IP address of the instance to a DNS domain name. This field is not used in ipv6AccessConfig. A default PTR record will be created if the VM has external IPv6 range associated.\n\n        * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the `setPublicPtr` field is enabled in accessConfig. If this field is unspecified in ipv6AccessConfig, a default PTR record will be createc for first IP in associated external IPv6 range.\n\n        * `network_tier`: This signifies the networking tier used for configuring this access configuration and can only take the following values: PREMIUM, STANDARD. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n        Possible values:\n          * FIXED_STANDARD\n          * PREMIUM\n          * STANDARD\n          * STANDARD_OVERRIDES_FIXED_STANDARD\n\n        * `security_policy`: [Output Only] The resource URL for the security policy associated with this access config.\n\n      * `ipv6_access_configs`: An array of IPv6 access configurations for this interface. Currently, only one IPv6 access config, DIRECT_IPV6, is supported. If there is no ipv6AccessConfig specified, then this instance will have no external IPv6 Internet access.\n\n        * `kind`: [Output Only] Type of the resource. Always compute#accessConfig for access configs.\n\n        * `type`: The type of configuration. In accessConfigs (IPv4), the default and only option is ONE_TO_ONE_NAT. In ipv6AccessConfigs, the default and only option is DIRECT_IPV6.\n        Possible values:\n          * DIRECT_IPV6\n          * ONE_TO_ONE_NAT\n\n        * `name`: The name of this access configuration. In accessConfigs (IPv4), the default and recommended name is External NAT, but you can use any arbitrary string, such as My external IP or Network Access. In ipv6AccessConfigs, the recommend name is External IPv6.\n\n        * `nat_ip`: Applies to accessConfigs (IPv4) only. An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.\n\n        * `external_ipv6`: Applies to ipv6AccessConfigs only. The first IPv6 address of the external IPv6 range associated with this instance, prefix length is stored in externalIpv6PrefixLength in ipv6AccessConfig. To use a static external IP address, it must be unused and in the same region as the instance's zone. If not specified, Google Cloud will automatically assign an external IPv6 address from the instance's subnetwork.\n\n        * `external_ipv6_prefix_length`: Applies to ipv6AccessConfigs only. The prefix length of the external IPv6 range.\n\n        * `set_public_ptr`: Specifies whether a public DNS 'PTR' record should be created to map the external IP address of the instance to a DNS domain name. This field is not used in ipv6AccessConfig. A default PTR record will be created if the VM has external IPv6 range associated.\n\n        * `public_ptr_domain_name`: The DNS domain name for the public PTR record. You can set this field only if the `setPublicPtr` field is enabled in accessConfig. If this field is unspecified in ipv6AccessConfig, a default PTR record will be createc for first IP in associated external IPv6 range.\n\n        * `network_tier`: This signifies the networking tier used for configuring this access configuration and can only take the following values: PREMIUM, STANDARD. If an AccessConfig is specified without a valid external IP address, an ephemeral IP will be created with this networkTier. If an AccessConfig with a valid external IP address is specified, it must match that of the networkTier associated with the Address resource owning that IP.\n        Possible values:\n          * FIXED_STANDARD\n          * PREMIUM\n          * STANDARD\n          * STANDARD_OVERRIDES_FIXED_STANDARD\n\n        * `security_policy`: [Output Only] The resource URL for the security policy associated with this access config.\n\n      * `alias_ip_ranges`: An array of alias IP ranges for this network interface. You can only specify this field for network interfaces in VPC networks.\n\n        * `ip_cidr_range`: The IP alias ranges to allocate for this interface. This IP CIDR range must belong to the specified subnetwork and cannot contain IP addresses reserved by system or used by other network interfaces. This range may be a single IP address (such as 10.2.3.4), a netmask (such as /24) or a CIDR-formatted string (such as 10.1.2.0/24).\n\n        * `subnetwork_range_name`: The name of a subnetwork secondary IP range from which to allocate an IP alias range. If not specified, the primary range of the subnetwork is used.\n\n      * `fingerprint`: Fingerprint hash of contents stored in this network interface. This field will be ignored when inserting an Instance or adding a NetworkInterface. An up-to-date fingerprint must be provided in order to update the NetworkInterface. The request will fail with error 400 Bad Request if the fingerprint is not provided, or 412 Precondition Failed if the fingerprint is out of date.\n\n      * `stack_type`: The stack type for this network interface. To assign only IPv4 addresses, use IPV4_ONLY. To assign both IPv4 and IPv6 addresses, use IPV4_IPV6. If not specified, IPV4_ONLY is used. This field can be both set at instance creation and update network interface operations.\n      Possible values:\n        * IPV4_IPV6\n        * IPV4_ONLY\n\n      * `ipv6_access_type`: [Output Only] One of EXTERNAL, INTERNAL to indicate whether the IP can be accessed from the Internet. This field is always inherited from its subnetwork. Valid only if stackType is IPV4_IPV6.\n      Possible values:\n        * EXTERNAL\n        * INTERNAL\n\n      * `queue_count`: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It'll be empty if not specified by the users.\n\n      * `nic_type`: The type of vNIC to be used on this interface. This may be gVNIC or VirtioNet.\n      Possible values:\n        * GVNIC\n        * UNSPECIFIED_NIC_TYPE\n        * VIRTIO_NET\n\n      * `network_attachment`: The URL of the network attachment that this interface should connect to in the following format: projects/{project_number}/regions/{region_name}/networkAttachments/{network_attachment_name}.\n\n    * `disks`: An array of disks that are associated with the instances that are created from these properties.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#attachedDisk for attached disks.\n\n      * `type`: Specifies the type of the disk, either SCRATCH or PERSISTENT. If not specified, the default is PERSISTENT.\n      Possible values:\n        * PERSISTENT\n        * SCRATCH\n\n      * `mode`: The mode in which to attach this disk, either READ_WRITE or READ_ONLY. If not specified, the default is to attach the disk in READ_WRITE mode.\n      Possible values:\n        * READ_ONLY\n        * READ_WRITE\n\n      * `saved_state`: For LocalSSD disks on VM Instances in STOPPED or SUSPENDED state, this field is set to PRESERVED if the LocalSSD data has been saved to a persistent location by customer request. (see the discard_local_ssd option on Stop/Suspend). Read-only in the api.\n      Possible values:\n        * DISK_SAVED_STATE_UNSPECIFIED\n        * PRESERVED\n\n      * `source`: Specifies a valid partial or full URL to an existing Persistent Disk resource. When creating a new instance, one of initializeParams.sourceImage or initializeParams.sourceSnapshot or disks.source is required except for local SSD. If desired, you can also attach existing non-root persistent disks using this property. This field is only applicable for persistent disks. Note that for InstanceTemplate, specify the disk name for zonal disk, and the URL for regional disk.\n\n      * `device_name`: Specifies a unique device name of your choice that is reflected into the /dev/disk/by-id/google-* tree of a Linux operating system running within the instance. This name can be used to reference the device for mounting, resizing, and so on, from within the instance. If not specified, the server chooses a default device name to apply to this disk, in the form persistent-disk-x, where x is a number assigned by Google Compute Engine. This field is only applicable for persistent disks.\n\n      * `index`: [Output Only] A zero-based index to this disk, where 0 is reserved for the boot disk. If you have many disks attached to an instance, each disk would have a unique index number.\n\n      * `boot`: Indicates that this is a boot disk. The virtual machine will use the first partition of the disk for its root filesystem.\n\n      * `initialize_params`: [Input Only] Specifies the parameters for a new disk that will be created alongside the new instance. Use initialization parameters to create boot disks or local SSDs attached to the new instance. This field is persisted and returned for instanceTemplate and not returned in the context of instance. This property is mutually exclusive with the source property; you can only define one or the other, but not both.\n\n        * `disk_name`: Specifies the disk name. If not specified, the default is to use the name of the instance. If a disk with the same name already exists in the given region, the existing disk is attached to the new instance and the new disk is not created.\n\n        * `source_image`: The source image to create this disk. When creating a new instance, one of initializeParams.sourceImage or initializeParams.sourceSnapshot or disks.source is required except for local SSD. To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-9 to use the latest Debian 9 image: projects/debian-cloud/global/images/family/debian-9 Alternatively, use a specific version of a public operating system image: projects/debian-cloud/global/images/debian-9-stretch-vYYYYMMDD To create a disk with a custom image that you created, specify the image name in the following format: global/images/my-custom-image You can also specify a custom image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name: global/images/family/my-image-family If the source image is deleted later, this field will not be set.\n\n        * `disk_size_gb`: Specifies the size of the disk in base-2 GB. The size must be at least 10 GB. If you specify a sourceImage, which is required for boot disks, the default size is the size of the sourceImage. If you do not specify a sourceImage, the default disk size is 500 GB.\n\n        * `disk_type`: Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example: https://www.googleapis.com/compute/v1/projects/project/zones/zone /diskTypes/pd-standard For a full list of acceptable values, see Persistent disk types. If you specify this field when creating a VM, you can provide either the full or partial URL. For example, the following values are valid: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /diskTypes/diskType - projects/project/zones/zone/diskTypes/diskType - zones/zone/diskTypes/diskType If you specify this field when creating or updating an instance template or all-instances configuration, specify the type of the disk, not the URL. For example: pd-standard.\n\n        * `source_image_encryption_key`:\n\n          * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n          * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n          * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n          * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n          * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n        * `labels`: Labels to apply to this disk. These can be later modified by the disks.setLabels method. This field is only applicable for persistent disks.\n\n          * `additional_properties`:\n\n        * `source_snapshot`: The source snapshot to create this disk. When creating a new instance, one of initializeParams.sourceSnapshot or initializeParams.sourceImage or disks.source is required except for local SSD. To create a disk with a snapshot that you created, specify the snapshot name in the following format: global/snapshots/my-backup If the source snapshot is deleted later, this field will not be set.\n\n        * `source_snapshot_encryption_key`:\n\n          * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n          * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n          * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n          * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n          * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n        * `description`: An optional description. Provide this property when creating the disk.\n\n        * `replica_zones`: Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.\n\n        * `resource_policies`: Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.\n\n        * `on_update_action`: Specifies which action to take on instance update with this disk. Default is to use the existing disk.\n        Possible values:\n          * RECREATE_DISK\n          * RECREATE_DISK_IF_SOURCE_CHANGED\n          * USE_EXISTING_DISK\n\n        * `provisioned_iops`: Indicates how many IOPS to provision for the disk. This sets the number of I/O operations per second that the disk can handle. Values must be between 10,000 and 120,000. For more details, see the Extreme persistent disk documentation.\n\n        * `licenses`: A list of publicly visible licenses. Reserved for Google's use.\n\n        * `architecture`: The architecture of the attached disk. Valid values are arm64 or x86_64.\n        Possible values:\n          * ARCHITECTURE_UNSPECIFIED\n          * ARM64\n          * X86_64\n\n        * `resource_manager_tags`: Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.\n\n          * `additional_properties`:\n\n        * `provisioned_throughput`: Indicates how much throughput to provision for the disk. This sets the number of throughput mb per second that the disk can handle. Values must be between 1 and 7,124.\n\n      * `auto_delete`: Specifies whether the disk will be auto-deleted when the instance is deleted (but not when the disk is detached from the instance).\n\n      * `licenses`: [Output Only] Any valid publicly visible licenses.\n\n      * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. For most machine types, the default is SCSI. Local SSDs can use either NVME or SCSI. In certain configurations, persistent disks can use NVMe. For more information, see About persistent disks.\n      Possible values:\n        * NVME\n        * SCSI\n\n      * `guest_os_features`: A list of features to enable on the guest operating system. Applicable only for bootable images. Read Enabling guest operating system features to see a list of available options.\n\n        * `type`: The ID of a supported feature. To add multiple values, use commas to separate values. Set to one or more of the following values: - VIRTIO_SCSI_MULTIQUEUE - WINDOWS - MULTI_IP_SUBNET - UEFI_COMPATIBLE - GVNIC - SEV_CAPABLE - SUSPEND_RESUME_COMPATIBLE - SEV_LIVE_MIGRATABLE - SEV_SNP_CAPABLE For more information, see Enabling guest operating system features.\n        Possible values:\n          * FEATURE_TYPE_UNSPECIFIED\n          * GVNIC\n          * MULTI_IP_SUBNET\n          * SECURE_BOOT\n          * SEV_CAPABLE\n          * SEV_LIVE_MIGRATABLE\n          * SEV_LIVE_MIGRATABLE_V2\n          * SEV_SNP_CAPABLE\n          * UEFI_COMPATIBLE\n          * VIRTIO_SCSI_MULTIQUEUE\n          * WINDOWS\n\n      * `disk_encryption_key`:\n\n        * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n        * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n        * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n        * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n        * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n      * `disk_size_gb`: The size of the disk in GB.\n\n      * `shielded_instance_initial_state`: Initial State for shielded instance, these are public keys which are safe to store in public\n\n        * `pk`:\n\n          * `content`: The raw content in the secure keys file.\n\n          * `file_type`: The file type of source file.\n          Possible values:\n            * BIN\n            * UNDEFINED\n            * X509\n\n        * `keks`: The Key Exchange Key (KEK).\n\n          * `content`: The raw content in the secure keys file.\n\n          * `file_type`: The file type of source file.\n          Possible values:\n            * BIN\n            * UNDEFINED\n            * X509\n\n        * `dbs`: The Key Database (db).\n\n          * `content`: The raw content in the secure keys file.\n\n          * `file_type`: The file type of source file.\n          Possible values:\n            * BIN\n            * UNDEFINED\n            * X509\n\n        * `dbxs`: The forbidden key database (dbx).\n\n          * `content`: The raw content in the secure keys file.\n\n          * `file_type`: The file type of source file.\n          Possible values:\n            * BIN\n            * UNDEFINED\n            * X509\n\n      * `force_attach`: [Input Only] Whether to force attach the regional disk even if it's currently attached to another instance. If you try to force attach a zonal disk to an instance, you will receive an error.\n\n      * `architecture`: [Output Only] The architecture of the attached disk. Valid values are ARM64 or X86_64.\n      Possible values:\n        * ARCHITECTURE_UNSPECIFIED\n        * ARM64\n        * X86_64\n\n    * `metadata`: A metadata key/value entry.\n\n      * `kind`: [Output Only] Type of the resource. Always compute#metadata for metadata.\n\n      * `fingerprint`: Specifies a fingerprint for this request, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the resource.\n\n      * `items`: Array of key/value pairs. The total size of all keys and values must be less than 512 KB.\n\n        * `key`: Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.\n\n        * `value`: Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 262144 bytes (256 KiB).\n\n    * `service_accounts`: A list of service accounts with specified scopes. Access tokens for these service accounts are available to the instances that are created from these properties. Use metadata queries to obtain the access tokens for these instances.\n\n      * `email`: Email address of the service account.\n\n      * `scopes`: The list of scopes to be made available for this service account.\n\n    * `scheduling`: Sets the scheduling options for an Instance.\n\n      * `on_host_maintenance`: Defines the maintenance behavior for this instance. For standard instances, the default behavior is MIGRATE. For preemptible instances, the default and only possible behavior is TERMINATE. For more information, see Set VM host maintenance policy.\n      Possible values:\n        * MIGRATE\n        * TERMINATE\n\n      * `automatic_restart`: Specifies whether the instance should be automatically restarted if it is terminated by Compute Engine (not terminated by a user). You can only set the automatic restart option for standard instances. Preemptible instances cannot be automatically restarted. By default, this is set to true so an instance is automatically restarted if it is terminated by Compute Engine.\n\n      * `preemptible`: Defines whether the instance is preemptible. This can only be set during instance creation or while the instance is stopped and therefore, in a `TERMINATED` state. See Instance Life Cycle for more information on the possible instance states.\n\n      * `node_affinities`: A set of node affinity and anti-affinity configurations. Refer to Configuring node affinity for more information. Overrides reservationAffinity.\n\n        * `key`: Corresponds to the label key of Node resource.\n\n        * `operator`: Defines the operation of node selection. Valid operators are IN for affinity and NOT_IN for anti-affinity.\n        Possible values:\n          * IN\n          * NOT_IN\n          * OPERATOR_UNSPECIFIED\n\n        * `values`: Corresponds to the label values of Node resource.\n\n      * `min_node_cpus`: The minimum number of virtual CPUs this instance will consume when running on a sole-tenant node.\n\n      * `location_hint`: An opaque location hint used to place the instance close to other resources. This field is for use by internal tools that use the public API.\n\n      * `provisioning_model`: Specifies the provisioning model of the instance.\n      Possible values:\n        * SPOT\n        * STANDARD\n\n      * `instance_termination_action`: Specifies the termination action for the instance.\n      Possible values:\n        * DELETE\n        * INSTANCE_TERMINATION_ACTION_UNSPECIFIED\n        * STOP\n\n      * `local_ssd_recovery_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `labels`: Labels to apply to instances that are created from these properties.\n\n      * `additional_properties`:\n\n    * `guest_accelerators`: A list of guest accelerator cards' type and count to use for instances created from these properties.\n\n      * `accelerator_type`: Full or partial URL of the accelerator type resource to attach to this instance. For example: projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100 If you are creating an instance template, specify only the accelerator name. See GPUs on Compute Engine for a full list of accelerator types.\n\n      * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n    * `min_cpu_platform`: Minimum cpu/platform to be used by instances. The instance may be scheduled on the specified or newer cpu/platform. Applicable values are the friendly names of CPU platforms, such as minCpuPlatform: \"Intel Haswell\" or minCpuPlatform: \"Intel Sandy Bridge\". For more information, read Specifying a Minimum CPU Platform.\n\n    * `reservation_affinity`: Specifies the reservations that this instance can consume from.\n\n      * `consume_reservation_type`: Specifies the type of reservation from which this instance can consume resources: ANY_RESERVATION (default), SPECIFIC_RESERVATION, or NO_RESERVATION. See Consuming reserved instances for examples.\n      Possible values:\n        * ANY_RESERVATION\n        * NO_RESERVATION\n        * SPECIFIC_RESERVATION\n        * UNSPECIFIED\n\n      * `key`: Corresponds to the label key of a reservation resource. To target a SPECIFIC_RESERVATION by name, specify googleapis.com/reservation-name as the key and specify the name of your reservation as its value.\n\n      * `values`: Corresponds to the label values of a reservation resource. This can be either a name to a reservation in the same project or \"projects/different-project/reservations/some-reservation-name\" to target a shared reservation in the same zone but in a different project.\n\n    * `shielded_instance_config`: A set of Shielded Instance options.\n\n      * `enable_secure_boot`: Defines whether the instance has Secure Boot enabled. Disabled by default.\n\n      * `enable_vtpm`: Defines whether the instance has the vTPM enabled. Enabled by default.\n\n      * `enable_integrity_monitoring`: Defines whether the instance has integrity monitoring enabled. Enabled by default.\n\n    * `resource_policies`: Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.\n\n    * `confidential_instance_config`: A set of Confidential Instance options.\n\n      * `enable_confidential_compute`: Defines whether the instance should have confidential compute enabled.\n\n    * `private_ipv6_google_access`: The private IPv6 google access type for VMs. If not specified, use INHERIT_FROM_SUBNETWORK as default. Note that for MachineImage, this is not supported yet.\n    Possible values:\n      * ENABLE_BIDIRECTIONAL_ACCESS_TO_GOOGLE\n      * ENABLE_OUTBOUND_VM_ACCESS_TO_GOOGLE\n      * INHERIT_FROM_SUBNETWORK\n\n    * `advanced_machine_features`: Specifies options for controlling advanced machine features. Options that would traditionally be configured in a BIOS belong here. Features that require operating system support may have corresponding entries in the GuestOsFeatures of an Image (e.g., whether or not the OS in the Image supports nested virtualization being enabled or disabled).\n\n      * `enable_nested_virtualization`: Whether to enable nested virtualization or not (default is false).\n\n      * `threads_per_core`: The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n\n      * `visible_core_count`: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance's nominal CPU count and the underlying platform's SMT width.\n\n      * `enable_uefi_networking`: Whether to enable UEFI networking for instance creation.\n\n    * `network_performance_config`:\n\n      * `total_egress_bandwidth_tier`:\n      Possible values:\n        * DEFAULT\n        * TIER_1\n\n    * `key_revocation_action_type`: KeyRevocationActionType of the instance. Supported options are \"STOP\" and \"NONE\". The default value is \"NONE\" if it is not specified.\n    Possible values:\n      * KEY_REVOCATION_ACTION_TYPE_UNSPECIFIED\n      * NONE\n      * STOP\n\n  * `saved_disks`: An array of Machine Image specific properties for disks attached to the source instance\n\n    * `kind`: [Output Only] Type of the resource. Always compute#savedDisk for attached disks.\n\n    * `source_disk`: Specifies a URL of the disk attached to the source instance.\n\n    * `storage_bytes`: [Output Only] Size of the individual disk snapshot used by this machine image.\n\n    * `storage_bytes_status`: [Output Only] An indicator whether storageBytes is in a stable state or it is being adjusted as a result of shared storage reallocation. This status can either be UPDATING, meaning the size of the snapshot is being updated, or UP_TO_DATE, meaning the size of the snapshot is up-to-date.\n    Possible values:\n      * UPDATING\n      * UP_TO_DATE\n\n    * `architecture`: [Output Only] The architecture of the attached disk.\n    Possible values:\n      * ARCHITECTURE_UNSPECIFIED\n      * ARM64\n      * X86_64\n\n  * `storage_locations`: The regional or multi-regional Cloud Storage bucket location where the machine image is stored.\n\n  * `machine_image_encryption_key`:\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n    * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n    * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n  * `guest_flush`: [Input Only] Whether to attempt an application consistent machine image by informing the OS to prepare for the snapshot process.\n\n  * `source_disk_encryption_keys`: [Input Only] The customer-supplied encryption key of the disks attached to the source instance. Required if the source disk is protected by a customer-supplied encryption key.\n\n    * `source_disk`: URL of the disk attached to the source instance. This can be a full or valid partial URL. For example, the following are valid values: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /disks/disk - projects/project/zones/zone/disks/disk - zones/zone/disks/disk\n\n    * `disk_encryption_key`:\n\n      * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rawKey\": \"SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=\"\n\n      * `rsa_encrypted_key`: Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied encryption key to either encrypt or decrypt this resource. You can provide either the rawKey or the rsaEncryptedKey. For example: \"rsaEncryptedKey\": \"ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe==\" The key must meet the following requirements before you can provide it to Compute Engine: 1. The key is wrapped using a RSA public key certificate provided by Google. 2. After being wrapped, the key must be encoded in RFC 4648 base64 encoding. Gets the RSA public key certificate provided by Google at: https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem\n\n      * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key The fully-qualifed key name may be returned for resource GET requests. For example: \"kmsKeyName\": \"projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeyVersions/1\n\n      * `sha256`: [Output only] The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n      * `kms_key_service_account`: The service account being used for the encryption request for the given KMS key. If absent, the Compute Engine default service account is used. For example: \"kmsKeyServiceAccount\": \"name@project_id.iam.gserviceaccount.com/\n\n  * `total_storage_bytes`: [Output Only] Total size of the storage used by the machine image.\n\n  * `satisfies_pzs`: [Output Only] Reserved for future use.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_machine_images.md",
    "content": "+++\ntitle = \"google_compute_machine_images resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_machine_images\"\nidentifier = \"inspec/resources/gcp/google_compute_machine_images resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_machine_images` InSpec audit resource to to test a Google Cloud MachineImage resource.\n\n## Examples\n\n```ruby\n  describe google_compute_machine_images(project: 'chef-gcp-inspec') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_machine_images` resource:\n\nSee [google_compute_machine_image](google_compute_machine_image) for more detailed information.\n\n  * `kinds`: an array of `google_compute_machine_image` kind\n  * `ids`: an array of `google_compute_machine_image` id\n  * `creation_timestamps`: an array of `google_compute_machine_image` creation_timestamp\n  * `names`: an array of `google_compute_machine_image` name\n  * `descriptions`: an array of `google_compute_machine_image` description\n  * `self_links`: an array of `google_compute_machine_image` self_link\n  * `source_instances`: an array of `google_compute_machine_image` source_instance\n  * `statuses`: an array of `google_compute_machine_image` status\n  * `source_instance_properties`: an array of `google_compute_machine_image` source_instance_properties\n  * `instance_properties`: an array of `google_compute_machine_image` instance_properties\n  * `saved_disks`: an array of `google_compute_machine_image` saved_disks\n  * `storage_locations`: an array of `google_compute_machine_image` storage_locations\n  * `machine_image_encryption_keys`: an array of `google_compute_machine_image` machine_image_encryption_key\n  * `guest_flushes`: an array of `google_compute_machine_image` guest_flush\n  * `source_disk_encryption_keys`: an array of `google_compute_machine_image` source_disk_encryption_keys\n  * `total_storage_bytes`: an array of `google_compute_machine_image` total_storage_bytes\n  * `satisfies_pzs`: an array of `google_compute_machine_image` satisfies_pzs\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_machine_type.md",
    "content": "+++\ntitle = \"google_compute_machine_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_machine_type\"\nidentifier = \"inspec/resources/gcp/google_compute_machine_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_machine_type` InSpec audit resource to to test a Google Cloud MachineType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_machine_type(name: 'value_name', project: 'chef-gcp-inspec', zone: ' value_zone') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('maximum_persistent_disks_size_gb') { should cmp 'value_maximumpersistentdiskssizegb' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('self_link') { should cmp 'value_selflink' }\n\nend\n\ndescribe google_compute_machine_type(name: 'value_name', project: 'chef-gcp-inspec', zone: ' value_zone') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_machine_type` resource:\n\n\n  * `kind`: [Output Only] The type of the resource. Always compute#machineType for machine types.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: [Output Only] Name of the resource.\n\n  * `description`: [Output Only] An optional textual description of the resource.\n\n  * `guest_cpus`: [Output Only] The number of virtual CPUs that are available to the instance.\n\n  * `memory_mb`: [Output Only] The amount of physical memory available to the instance, defined in MB.\n\n  * `image_space_gb`: [Deprecated] This property is deprecated and will never be populated with any relevant values.\n\n  * `scratch_disks`: [Output Only] A list of extended scratch disks assigned to the instance.\n\n    * `disk_gb`: Size of the scratch disk, defined in GB.\n\n  * `maximum_persistent_disks`: [Output Only] Maximum persistent disks allowed.\n\n  * `maximum_persistent_disks_size_gb`: [Output Only] Maximum total persistent disks size (GB) allowed.\n\n  * `deprecated`: Deprecation status for a public resource.\n\n    * `state`: The deprecation state of this resource. This can be ACTIVE, DEPRECATED, OBSOLETE, or DELETED. Operations which communicate the end of life date for an image, can use ACTIVE. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * ACTIVE\n      * DELETED\n      * DEPRECATED\n      * OBSOLETE\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n  * `zone`: [Output Only] The name of the zone where the machine type resides, such as us-central1-a.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `is_shared_cpu`: [Output Only] Whether this machine type has a shared CPU. See Shared-core machine types for more information.\n\n  * `accelerators`: [Output Only] A list of accelerator configurations assigned to this machine type.\n\n    * `guest_accelerator_type`: The accelerator type resource name, not a full URL, e.g. nvidia-tesla-t4.\n\n    * `guest_accelerator_count`: Number of accelerator cards exposed to the guest.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_machine_types.md",
    "content": "+++\ntitle = \"google_compute_machine_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_machine_types\"\nidentifier = \"inspec/resources/gcp/google_compute_machine_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_machine_types` InSpec audit resource to to test a Google Cloud MachineType resource.\n\n## Examples\n\n```ruby\n  describe google_compute_machine_types(project: 'chef-gcp-inspec', zone: ' value_zone') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_machine_types` resource:\n\nSee [google_compute_machine_type](google_compute_machine_type) for more detailed information.\n\n  * `kinds`: an array of `google_compute_machine_type` kind\n  * `ids`: an array of `google_compute_machine_type` id\n  * `creation_timestamps`: an array of `google_compute_machine_type` creation_timestamp\n  * `names`: an array of `google_compute_machine_type` name\n  * `descriptions`: an array of `google_compute_machine_type` description\n  * `guest_cpus`: an array of `google_compute_machine_type` guest_cpus\n  * `memory_mbs`: an array of `google_compute_machine_type` memory_mb\n  * `image_space_gbs`: an array of `google_compute_machine_type` image_space_gb\n  * `scratch_disks`: an array of `google_compute_machine_type` scratch_disks\n  * `maximum_persistent_disks`: an array of `google_compute_machine_type` maximum_persistent_disks\n  * `maximum_persistent_disks_size_gbs`: an array of `google_compute_machine_type` maximum_persistent_disks_size_gb\n  * `deprecateds`: an array of `google_compute_machine_type` deprecated\n  * `zones`: an array of `google_compute_machine_type` zone\n  * `self_links`: an array of `google_compute_machine_type` self_link\n  * `is_shared_cpus`: an array of `google_compute_machine_type` is_shared_cpu\n  * `accelerators`: an array of `google_compute_machine_type` accelerators\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network.md",
    "content": "+++\ntitle = \"google_compute_network resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network\"\nidentifier = \"inspec/resources/gcp/google_compute_network resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_network` is used to test a Google Network resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network(project: 'chef-gcp-inspec', name: 'inspec-network') do\n  it { should exist }\n  its('routing_config.routing_mode') { should cmp 'REGIONAL' }\nend\n\ndescribe google_compute_network(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute network exists\n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      it { should exist }\n    end\n\n### Test when a GCP compute network was created\n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      its('creation_timestamp_date') { should be > Time.now - 365*60*60*24*10 }\n    end    \n    \n### Test for an expected network identifier \n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      its('id') { should eq 12345567789 }\n    end    \n\n\n### Test whether a single attached subnetwork name is correct \n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      its ('subnetworks.count') { should eq 1 }\n      its ('subnetworks.first') { should match \"subnetwork-name\"}\n    end    \n    \n### Test whether the network is configured to automatically create subnetworks or not\n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      its ('auto_create_subnetworks'){ should be false }\n    end    \n\n\n### Check the network routing configuration routing mode \n\n    describe google_compute_network(project: 'chef-inspec-gcp',  name: 'gcp-inspec-network') do\n      its ('routing_config.routing_mode') { should eq \"REGIONAL\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network` resource:\n\n\n  * `description`: An optional description of this resource. The resource must be recreated to modify this field.\n\n  * `gateway_ipv4`: The gateway address for default routing out of the network. This value is selected by GCP.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `subnetworks`: Server-defined fully-qualified URLs for all subnetworks in this network.\n\n  * `auto_create_subnetworks`: When set to `true`, the network is created in \"auto subnet mode\" and it will create a subnet for each region automatically across the `10.128.0.0/9` address range.  When set to `false`, the network is created in \"custom subnet mode\" so the user can explicitly connect subnetwork resources.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `routing_config`: The network-level routing configuration for this network. Used by Cloud Router to determine what type of network-wide routing behavior to enforce.\n\n    * `routing_mode`: The network-wide routing mode to use. If set to `REGIONAL`, this network's cloud routers will only advertise routes with subnetworks of this network in the same region as the router. If set to `GLOBAL`, this network's cloud routers will advertise routes with all subnetworks of this network, across regions.\n    Possible values:\n      * REGIONAL\n      * GLOBAL\n\n  * `peerings`: Peerings for a network\n\n    * `name`: Name of the peering.\n\n    * `state`: State of the peering.\n\n    * `state_details`: Details about the current state of the peering.\n\n    * `network`: URL of the peer network\n\n    * `export_custom_routes`: Whether to export the custom routes to the peer network.\n\n    * `import_custom_routes`: Whether to import the custom routes to the peer network.\n\n    * `peer_mtu`: Maximum Transmission Unit in bytes.\n\n  * `mtu`: Maximum Transmission Unit in bytes. The minimum value for this field is 1460 and the maximum value is 1500 bytes.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_attachment.md",
    "content": "+++\ntitle = \"google_compute_network_attachment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_attachment\"\nidentifier = \"inspec/resources/gcp/google_compute_network_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_network_attachment` InSpec audit resource to to test a Google Cloud NetworkAttachment resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network_attachment(name: 'value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('region') { should cmp 'value_region' }\n\tits('connection_preference') { should cmp 'value_connectionpreference' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('network') { should cmp 'value_network' }\n\nend\n\ndescribe google_compute_network_attachment(name: 'value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_attachment` resource:\n\n\n  * `kind`: [Output Only] Type of the resource.\n\n  * `id`: [Output Only] The unique identifier for the resource type. The server generates this identifier.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource's resource id.\n\n  * `region`: [Output Only] URL of the region where the network attachment resides. This field applies only to the region resource. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `connection_preference`:\n  Possible values:\n    * ACCEPT_AUTOMATIC\n    * ACCEPT_MANUAL\n    * INVALID\n\n  * `connection_endpoints`: [Output Only] An array of connections for all the producers connected to this network attachment.\n\n    * `status`: The status of a connected endpoint to this network attachment.\n    Possible values:\n      * ACCEPTED\n      * CLOSED\n      * NEEDS_ATTENTION\n      * PENDING\n      * REJECTED\n      * STATUS_UNSPECIFIED\n\n    * `project_id_or_num`: The project id or number of the interface to which the IP was assigned.\n\n    * `subnetwork`: The subnetwork used to assign the IP to the producer instance network interface.\n\n    * `ip_address`: The IPv4 address assigned to the producer instance network interface. This value will be a range in case of Serverless.\n\n    * `ipv6_address`: The IPv6 address assigned to the producer instance network interface. This is only assigned when the stack types of both the instance network interface and the consumer subnet are IPv4_IPv6.\n\n    * `secondary_ip_cidr_ranges`: Alias IP ranges from the same subnetwork.\n\n    * `subnetwork_cidr_range`: [Output Only] The CIDR range of the subnet from which the IPv4 internal IP was allocated from.\n\n  * `subnetworks`: An array of URLs where each entry is the URL of a subnet provided by the service consumer to use for endpoints in the producers that connect to this network attachment.\n\n  * `producer_reject_lists`: Projects that are not allowed to connect to this network attachment. The project can be specified using its id or number.\n\n  * `producer_accept_lists`: Projects that are allowed to connect to this network attachment. The project can be specified using its id or number.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. An up-to-date fingerprint must be provided in order to patch.\n\n  * `network`: [Output Only] The URL of the network which the Network Attachment belongs to. Practically it is inferred by fetching the network of the first subnetwork associated. Because it is required that all the subnetworks must be from the same network, it is assured that the Network Attachment belongs to the same network as all the subnetworks.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_attachments.md",
    "content": "+++\ntitle = \"google_compute_network_attachments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_attachments\"\nidentifier = \"inspec/resources/gcp/google_compute_network_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_network_attachments` InSpec audit resource to to test a Google Cloud NetworkAttachment resource.\n\n## Examples\n\n```ruby\n    describe google_compute_network_attachments(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_attachments` resource:\n\nSee [google_compute_network_attachment](google_compute_network_attachment) for more detailed information.\n\n  * `kinds`: an array of `google_compute_network_attachment` kind\n  * `ids`: an array of `google_compute_network_attachment` id\n  * `creation_timestamps`: an array of `google_compute_network_attachment` creation_timestamp\n  * `names`: an array of `google_compute_network_attachment` name\n  * `descriptions`: an array of `google_compute_network_attachment` description\n  * `self_links`: an array of `google_compute_network_attachment` self_link\n  * `self_link_with_ids`: an array of `google_compute_network_attachment` self_link_with_id\n  * `regions`: an array of `google_compute_network_attachment` region\n  * `connection_preferences`: an array of `google_compute_network_attachment` connection_preference\n  * `connection_endpoints`: an array of `google_compute_network_attachment` connection_endpoints\n  * `subnetworks`: an array of `google_compute_network_attachment` subnetworks\n  * `producer_reject_lists`: an array of `google_compute_network_attachment` producer_reject_lists\n  * `producer_accept_lists`: an array of `google_compute_network_attachment` producer_accept_lists\n  * `fingerprints`: an array of `google_compute_network_attachment` fingerprint\n  * `networks`: an array of `google_compute_network_attachment` network\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_edge_security_service.md",
    "content": "+++\ntitle = \"google_compute_network_edge_security_service resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_edge_security_service\"\nidentifier = \"inspec/resources/gcp/google_compute_network_edge_security_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_network_edge_security_service` InSpec audit resource to to test a Google Cloud NetworkEdgeSecurityService resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network_edge_security_service(name: 'value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('region') { should cmp 'value_region' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('security_policy') { should cmp 'value_securitypolicy' }\n\nend\n\ndescribe google_compute_network_edge_security_service(name: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_edge_security_service` resource:\n\n\n  * `kind`: [Output only] Type of the resource. Always compute#networkEdgeSecurityService for NetworkEdgeSecurityServices\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `region`: [Output Only] URL of the region where the resource resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a NetworkEdgeSecurityService. An up-to-date fingerprint must be provided in order to update the NetworkEdgeSecurityService, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a NetworkEdgeSecurityService.\n\n  * `security_policy`: The resource URL for the network edge security service associated with this network edge security service.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_endpoint_group.md",
    "content": "+++\ntitle = \"google_compute_network_endpoint_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_endpoint_group\"\nidentifier = \"inspec/resources/gcp/google_compute_network_endpoint_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_network_endpoint_group` is used to test a Google NetworkEndpointGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network_endpoint_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-gcp-endpoint-group') do\n  it { should exist }\n  its('default_port') { should cmp '90' }\nend\n\ndescribe google_compute_network_endpoint_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_endpoint_group` resource:\n\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `network_endpoint_type`: Type of network endpoints in this network endpoint group.\n  Possible values:\n    * GCE_VM_IP_PORT\n\n  * `size`: Number of network endpoints in the network endpoint group.\n\n  * `network`: The network to which all network endpoints in the NEG belong. Uses \"default\" project network if unspecified.\n\n  * `subnetwork`: Optional subnetwork to which all network endpoints in the NEG belong.\n\n  * `default_port`: The default port used if the port number is not specified in the network endpoint.\n\n  * `zone`: Zone where the network endpoint group is located.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_endpoint_groups.md",
    "content": "+++\ntitle = \"google_compute_network_endpoint_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_endpoint_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_network_endpoint_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_network_endpoint_groups` is used to test a Google NetworkEndpointGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network_endpoint_groups(project: 'chef-gcp-inspec', zone: 'zone') do\n  its('default_ports') { should include '90' }\n  its('names') { should include 'inspec-gcp-endpoint-group' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_endpoint_groups` resource:\n\nSee [google_compute_network_endpoint_group](google_compute_network_endpoint_group) for more detailed information.\n\n  * `ids`: an array of `google_compute_network_endpoint_group` id\n  * `names`: an array of `google_compute_network_endpoint_group` name\n  * `descriptions`: an array of `google_compute_network_endpoint_group` description\n  * `network_endpoint_types`: an array of `google_compute_network_endpoint_group` network_endpoint_type\n  * `sizes`: an array of `google_compute_network_endpoint_group` size\n  * `networks`: an array of `google_compute_network_endpoint_group` network\n  * `subnetworks`: an array of `google_compute_network_endpoint_group` subnetwork\n  * `default_ports`: an array of `google_compute_network_endpoint_group` default_port\n  * `zones`: an array of `google_compute_network_endpoint_group` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_firewall_policies.md",
    "content": "+++\ntitle = \"google_compute_network_firewall_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_firewall_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_network_firewall_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_network_firewall_policies` InSpec audit resource to to test a Google Cloud NetworkFirewallPolicy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_network_firewall_policies(project: 'chef-gcp-inspec') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_firewall_policies` resource:\n\nSee [google_compute_network_firewall_policy](google_compute_network_firewall_policy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_network_firewall_policy` kind\n  * `ids`: an array of `google_compute_network_firewall_policy` id\n  * `creation_timestamps`: an array of `google_compute_network_firewall_policy` creation_timestamp\n  * `names`: an array of `google_compute_network_firewall_policy` name\n  * `descriptions`: an array of `google_compute_network_firewall_policy` description\n  * `rules`: an array of `google_compute_network_firewall_policy` rules\n  * `fingerprints`: an array of `google_compute_network_firewall_policy` fingerprint\n  * `self_links`: an array of `google_compute_network_firewall_policy` self_link\n  * `self_link_with_ids`: an array of `google_compute_network_firewall_policy` self_link_with_id\n  * `associations`: an array of `google_compute_network_firewall_policy` associations\n  * `rule_tuple_counts`: an array of `google_compute_network_firewall_policy` rule_tuple_count\n  * `short_names`: an array of `google_compute_network_firewall_policy` short_name\n  * `display_names`: an array of `google_compute_network_firewall_policy` display_name\n  * `parents`: an array of `google_compute_network_firewall_policy` parent\n  * `regions`: an array of `google_compute_network_firewall_policy` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_network_firewall_policy.md",
    "content": "+++\ntitle = \"google_compute_network_firewall_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_network_firewall_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_network_firewall_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_network_firewall_policy` InSpec audit resource to to test a Google Cloud NetworkFirewallPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_network_firewall_policy(name: 'value_name', project: 'chef-gcp-inspec') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('short_name') { should cmp 'value_shortname' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('parent') { should cmp 'value_parent' }\n\tits('region') { should cmp 'value_region' }\n\nend\n\ndescribe google_compute_network_firewall_policy(name: 'value_name', project: 'chef-gcp-inspec') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_network_firewall_policy` resource:\n\n\n  * `kind`: [Output only] Type of the resource. Always compute#firewallPolicyfor firewall policies\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. For Organization Firewall Policies it's a [Output Only] numeric ID allocated by Google Cloud which uniquely identifies the Organization Firewall Policy.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `rules`: A list of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match \"*\"). If no rules are provided when creating a firewall policy, a default rule with action \"allow\" will be added.\n\n    * `kind`: [Output only] Type of the resource. Always compute#firewallPolicyRule for firewall policy rules\n\n    * `rule_name`: An optional name for the rule. This field is not a unique identifier and can be updated.\n\n    * `description`: An optional description for this resource.\n\n    * `priority`: An integer indicating the priority of a rule in the list. The priority must be a positive value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n\n    * `match`: Represents a match condition that incoming traffic is evaluated against. Exactly one field must be specified.\n\n      * `src_ip_ranges`: CIDR IP address range. Maximum number of source CIDR IP ranges allowed is 5000.\n\n      * `dest_ip_ranges`: CIDR IP address range. Maximum number of destination CIDR IP ranges allowed is 5000.\n\n      * `layer4_configs`: Pairs of IP protocols and ports that the rule should match.\n\n        * `ip_protocol`: The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, ipip, sctp), or the IP protocol number.\n\n        * `ports`: An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port. Example inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"].\n\n      * `src_secure_tags`: List of secure tag values, which should be matched at the source of the traffic. For INGRESS rule, if all the srcSecureTag are INEFFECTIVE, and there is no srcIpRange, this rule will be ignored. Maximum number of source tag values allowed is 256.\n\n        * `name`: Name of the secure tag, created with TagManager's TagValue API.\n\n        * `state`: [Output Only] State of the secure tag, either `EFFECTIVE` or `INEFFECTIVE`. A secure tag is `INEFFECTIVE` when it is deleted or its network is deleted.\n        Possible values:\n          * EFFECTIVE\n          * INEFFECTIVE\n\n      * `dest_address_groups`: Address groups which should be matched against the traffic destination. Maximum number of destination address groups is 10.\n\n      * `src_address_groups`: Address groups which should be matched against the traffic source. Maximum number of source address groups is 10.\n\n      * `src_fqdns`: Fully Qualified Domain Name (FQDN) which should be matched against traffic source. Maximum number of source fqdn allowed is 100.\n\n      * `dest_fqdns`: Fully Qualified Domain Name (FQDN) which should be matched against traffic destination. Maximum number of destination fqdn allowed is 100.\n\n      * `src_region_codes`: Region codes whose IP addresses will be used to match for source of traffic. Should be specified as 2 letter country code defined as per ISO 3166 alpha-2 country codes. ex.\"US\" Maximum number of source region codes allowed is 5000.\n\n      * `dest_region_codes`: Region codes whose IP addresses will be used to match for destination of traffic. Should be specified as 2 letter country code defined as per ISO 3166 alpha-2 country codes. ex.\"US\" Maximum number of dest region codes allowed is 5000.\n\n      * `dest_threat_intelligences`: Names of Network Threat Intelligence lists. The IPs in these lists will be matched against traffic destination.\n\n      * `src_threat_intelligences`: Names of Network Threat Intelligence lists. The IPs in these lists will be matched against traffic source.\n\n    * `action`: The Action to perform when the client connection triggers the rule. Valid actions are \"allow\", \"deny\" and \"goto_next\".\n\n    * `direction`: The direction in which this rule applies.\n    Possible values:\n      * EGRESS\n      * INGRESS\n\n    * `target_resources`: A list of network resource URLs to which this rule applies. This field allows you to control which network's VMs get this rule. If this field is left blank, all VMs within the organization will receive the rule.\n\n    * `enable_logging`: Denotes whether to enable logging for a particular rule. If logging is enabled, logs will be exported to the configured export destination in Stackdriver. Logs may be exported to BigQuery or Pub/Sub. Note: you cannot enable logging on \"goto_next\" rules.\n\n    * `rule_tuple_count`: [Output Only] Calculation of the complexity of a single firewall policy rule.\n\n    * `target_service_accounts`: A list of service accounts indicating the sets of instances that are applied with this rule.\n\n    * `target_secure_tags`: A list of secure tags that controls which instances the firewall rule applies to. If targetSecureTag are specified, then the firewall rule applies only to instances in the VPC network that have one of those EFFECTIVE secure tags, if all the target_secure_tag are in INEFFECTIVE state, then this rule will be ignored. targetSecureTag may not be set at the same time as targetServiceAccounts. If neither targetServiceAccounts nor targetSecureTag are specified, the firewall rule applies to all instances on the specified network. Maximum number of target label tags allowed is 256.\n\n      * `name`: Name of the secure tag, created with TagManager's TagValue API.\n\n      * `state`: [Output Only] State of the secure tag, either `EFFECTIVE` or `INEFFECTIVE`. A secure tag is `INEFFECTIVE` when it is deleted or its network is deleted.\n      Possible values:\n        * EFFECTIVE\n        * INEFFECTIVE\n\n    * `disabled`: Denotes whether the firewall policy rule is disabled. When set to true, the firewall policy rule is not enforced and traffic behaves as if it did not exist. If this is unspecified, the firewall policy rule will be enabled.\n\n  * `fingerprint`: Specifies a fingerprint for this resource, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make get() request to the firewall policy.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `associations`: A list of associations that belong to this firewall policy.\n\n    * `name`: The name for an association.\n\n    * `attachment_target`: The target that the firewall policy is attached to.\n\n    * `firewall_policy_id`: [Output Only] The firewall policy ID of the association.\n\n    * `short_name`: [Output Only] The short name of the firewall policy of the association.\n\n    * `display_name`: [Output Only] Deprecated, please use short name instead. The display name of the firewall policy of the association.\n\n  * `rule_tuple_count`: [Output Only] Total count of all firewall policy rule tuples. A firewall policy can not exceed a set number of tuples.\n\n  * `short_name`: User-provided name of the Organization firewall policy. The name should be unique in the organization in which the firewall policy is created. This field is not applicable to network firewall policies. This name must be set on creation and cannot be changed. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `display_name`: Deprecated, please use short name instead. User-provided name of the Organization firewall policy. The name should be unique in the organization in which the firewall policy is created. This field is not applicable to network firewall policies. This name must be set on creation and cannot be changed. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `parent`: [Output Only] The parent of the firewall policy. This field is not applicable to network firewall policies.\n\n  * `region`: [Output Only] URL of the region where the regional firewall policy resides. This field is not applicable to global firewall policies. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_networks.md",
    "content": "+++\ntitle = \"google_compute_networks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_networks\"\nidentifier = \"inspec/resources/gcp/google_compute_networks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_networks` is used to test a Google Network resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_networks(project: 'chef-gcp-inspec') do\n\tits('network_names') { should include 'inspec-network' }\nend\n```\n\n### Test that there are no more than a specified number of networks available for the project\n\n    describe google_compute_networks(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected network identifier is present in the project \n\n    describe google_compute_networks(project: 'chef-inspec-gcp') do\n      its('network_ids') { should include 12345678975432 }\n    end\n\n### Test that an expected network name is available for the project\n\n    describe google_compute_networks(project: 'chef-inspec-gcp') do\n      its('network_names') { should include \"network-name\" }\n    end\n\n\n## Properties\n\nProperties that can be accessed from the `google_compute_networks` resource:\n\nSee [google_compute_network](google_compute_network) for more detailed information.\n\n  * `descriptions`: an array of `google_compute_network` description\n  * `gateway_ipv4s`: an array of `google_compute_network` gateway_ipv4\n  * `network_ids`: an array of `google_compute_network` id\n  * `network_names`: an array of `google_compute_network` name\n  * `subnetworks`: an array of `google_compute_network` subnetworks\n  * `auto_create_subnetworks`: an array of `google_compute_network` auto_create_subnetworks\n  * `creation_timestamps`: an array of `google_compute_network` creation_timestamp\n  * `routing_configs`: an array of `google_compute_network` routing_config\n  * `peerings`: an array of `google_compute_network` peerings\n  * `mtus`: an array of `google_compute_network` mtu\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_group.md",
    "content": "+++\ntitle = \"google_compute_node_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_group\"\nidentifier = \"inspec/resources/gcp/google_compute_node_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_node_group` is used to test a Google NodeGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_node_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'inspec-node-group') do\n  it { should exist }\n  its('description') { should cmp 'A description of the node group' }\n  its('size') { should cmp '0' }\nend\n\ndescribe google_compute_node_group(project: 'chef-gcp-inspec', zone: 'zone', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_group` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional textual description of the resource.\n\n  * `name`: Name of the resource.\n\n  * `node_template`: The URL of the node template to which this node group belongs.\n\n  * `size`: The total number of nodes in the node group.\n\n  * `maintenance_policy`: Specifies how to handle instances when a node in the group undergoes maintenance. Set to one of: DEFAULT, RESTART_IN_PLACE, or MIGRATE_WITHIN_NODE_GROUP. The default value is DEFAULT.\n\n  * `autoscaling_policy`: If you use sole-tenant nodes for your workloads, you can use the node group autoscaler to automatically manage the sizes of your node groups.\n\n    * `mode`: The autoscaling mode. Set to one of the following:   - OFF: Disables the autoscaler.   - ON: Enables scaling in and scaling out.   - ONLY_SCALE_OUT: Enables only scaling out.   You must use this mode if your node groups are configured to   restart their hosted VMs on minimal servers.\n    Possible values:\n      * OFF\n      * ON\n      * ONLY_SCALE_OUT\n\n    * `min_nodes`: Minimum size of the node group. Must be less than or equal to max-nodes. The default value is 0.\n\n    * `max_nodes`: Maximum size of the node group. Set to a value less than or equal to 100 and greater than or equal to min-nodes.\n\n  * `zone`: Zone where this node group is located\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_groups.md",
    "content": "+++\ntitle = \"google_compute_node_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_node_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_node_groups` is used to test a Google NodeGroup resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_node_groups(project: 'chef-gcp-inspec', zone: 'zone') do\n  it { should exist }\n  its('descriptions') { should include 'A description of the node group' }\n  its('sizes') { should include '0' }\n  its('names') { should include 'inspec-node-group' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_groups` resource:\n\nSee [google_compute_node_group](google_compute_node_group) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_node_group` creation_timestamp\n  * `descriptions`: an array of `google_compute_node_group` description\n  * `names`: an array of `google_compute_node_group` name\n  * `node_templates`: an array of `google_compute_node_group` node_template\n  * `sizes`: an array of `google_compute_node_group` size\n  * `maintenance_policies`: an array of `google_compute_node_group` maintenance_policy\n  * `autoscaling_policies`: an array of `google_compute_node_group` autoscaling_policy\n  * `zones`: an array of `google_compute_node_group` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_template.md",
    "content": "+++\ntitle = \"google_compute_node_template resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_template\"\nidentifier = \"inspec/resources/gcp/google_compute_node_template resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_node_template` is used to test a Google NodeTemplate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_node_template(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-node-template') do\n  it { should exist }\n  its('node_affinity_labels') { should include('key' => 'value') }\nend\n\ndescribe google_compute_node_template(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_template` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional textual description of the resource.\n\n  * `name`: Name of the resource.\n\n  * `node_affinity_labels`: Labels to use for node affinity, which will be used in instance scheduling.\n\n  * `node_type`: Node type to use for nodes group that are created from this template. Only one of nodeTypeFlexibility and nodeType can be specified.\n\n  * `node_type_flexibility`: Flexible properties for the desired node type. Node groups that use this node template will create nodes of a type that matches these properties. Only one of nodeTypeFlexibility and nodeType can be specified.\n\n    * `cpus`: Number of virtual CPUs to use.\n\n    * `memory`: Physical memory available to the node, defined in MB.\n\n    * `local_ssd`: Use local SSD\n\n  * `server_binding`: (Beta only) The server binding policy for nodes using this template. Determines where the nodes should restart following a maintenance event.\n\n    * `type`: Type of server binding policy. If `RESTART_NODE_ON_ANY_SERVER`, nodes using this template will restart on any physical server following a maintenance event.  If `RESTART_NODE_ON_MINIMAL_SERVER`, nodes using this template will restart on the same physical server following a maintenance event, instead of being live migrated to or restarted on a new physical server. This option may be useful if you are using software licenses tied to the underlying server characteristics such as physical sockets or cores, to avoid the need for additional licenses when maintenance occurs. However, VMs on such nodes will experience outages while maintenance is applied.\n    Possible values:\n      * RESTART_NODE_ON_ANY_SERVER\n      * RESTART_NODE_ON_MINIMAL_SERVERS\n\n  * `cpu_overcommit_type`: (Beta only) CPU overcommit.\n  Possible values:\n    * ENABLED\n    * NONE\n\n  * `region`: Region where nodes using the node template will be created\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_templates.md",
    "content": "+++\ntitle = \"google_compute_node_templates resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_templates\"\nidentifier = \"inspec/resources/gcp/google_compute_node_templates resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_node_templates` is used to test a Google NodeTemplate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_node_templates(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('names') { should include 'inspec-node-template' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_templates` resource:\n\nSee [google_compute_node_template](google_compute_node_template) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_node_template` creation_timestamp\n  * `descriptions`: an array of `google_compute_node_template` description\n  * `names`: an array of `google_compute_node_template` name\n  * `node_affinity_labels`: an array of `google_compute_node_template` node_affinity_labels\n  * `node_types`: an array of `google_compute_node_template` node_type\n  * `node_type_flexibilities`: an array of `google_compute_node_template` node_type_flexibility\n  * `server_bindings`: (Beta only) an array of `google_compute_node_template` server_binding\n  * `cpu_overcommit_types`: (Beta only) an array of `google_compute_node_template` cpu_overcommit_type\n  * `regions`: an array of `google_compute_node_template` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_type.md",
    "content": "+++\ntitle = \"google_compute_node_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_type\"\nidentifier = \"inspec/resources/gcp/google_compute_node_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_node_type` InSpec audit resource to to test a Google Cloud NodeType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_v1_node_type(nodeType: ' ', project: 'chef-gcp-inspec', zone: ' value_zone') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('cpu_platform') { should cmp 'value_cpuplatform' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('self_link') { should cmp 'value_selflink' }\n\nend\n\ndescribe google_compute_v1_node_type(nodeType: ' ', project: 'chef-gcp-inspec', zone: ' value_zone') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_type` resource:\n\n\n  * `kind`: [Output Only] The type of the resource. Always compute#nodeType for node types.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: [Output Only] Name of the resource.\n\n  * `description`: [Output Only] An optional textual description of the resource.\n\n  * `cpu_platform`: [Output Only] The CPU platform used by this node type.\n\n  * `guest_cpus`: [Output Only] The number of virtual CPUs that are available to the node type.\n\n  * `memory_mb`: [Output Only] The amount of physical memory available to the node type, defined in MB.\n\n  * `local_ssd_gb`: [Output Only] Local SSD available to the node type, defined in GB.\n\n  * `deprecated`: Deprecation status for a public resource.\n\n    * `state`: The deprecation state of this resource. This can be ACTIVE, DEPRECATED, OBSOLETE, or DELETED. Operations which communicate the end of life date for an image, can use ACTIVE. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * ACTIVE\n      * DELETED\n      * DEPRECATED\n      * OBSOLETE\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n  * `zone`: [Output Only] The name of the zone where the node type resides, such as us-central1-a.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_node_types.md",
    "content": "+++\ntitle = \"google_compute_node_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_node_types\"\nidentifier = \"inspec/resources/gcp/google_compute_node_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_node_types` InSpec audit resource to to test a Google Cloud NodeType resource.\n\n## Examples\n\n```ruby\n    describe google_compute_v1_node_types(project: 'chef-gcp-inspec', zone: ' value_zone') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_node_types` resource:\n\nSee [google_compute_node_type](google_compute_node_type) for more detailed information.\n\n  * `kinds`: an array of `google_compute_node_type` kind\n  * `ids`: an array of `google_compute_node_type` id\n  * `creation_timestamps`: an array of `google_compute_node_type` creation_timestamp\n  * `names`: an array of `google_compute_node_type` name\n  * `descriptions`: an array of `google_compute_node_type` description\n  * `cpu_platforms`: an array of `google_compute_node_type` cpu_platform\n  * `guest_cpus`: an array of `google_compute_node_type` guest_cpus\n  * `memory_mbs`: an array of `google_compute_node_type` memory_mb\n  * `local_ssd_gbs`: an array of `google_compute_node_type` local_ssd_gb\n  * `deprecateds`: an array of `google_compute_node_type` deprecated\n  * `zones`: an array of `google_compute_node_type` zone\n  * `self_links`: an array of `google_compute_node_type` self_link\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_packet_mirroring.md",
    "content": "+++\ntitle = \"google_compute_packet_mirroring resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_packet_mirroring\"\nidentifier = \"inspec/resources/gcp/google_compute_packet_mirroring resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_packet_mirroring` InSpec audit resource to to test a Google Cloud PacketMirroring resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_packet_mirroring(name: 'value_name', project: 'chef-gcp-inspec', region: 'value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('region') { should cmp 'value_region' }\n\tits('enable') { should cmp 'value_enable' }\n\nend\n\ndescribe google_compute_packet_mirroring(name: 'value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_packet_mirroring` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#packetMirroring for packet mirrorings.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `region`: [Output Only] URI of the region where the packetMirroring resides.\n\n  * `network`:\n\n    * `url`: URL of the network resource.\n\n    * `canonical_url`: [Output Only] Unique identifier for the network; defined by the server.\n\n  * `priority`: The priority of applying this configuration. Priority is used to break ties in cases where there is more than one matching rule. In the case of two rules that apply for a given Instance, the one with the lowest-numbered priority value wins. Default value is 1000. Valid range is 0 through 65535.\n\n  * `collector_ilb`:\n\n    * `url`: Resource URL to the forwarding rule representing the ILB configured as destination of the mirrored traffic.\n\n    * `canonical_url`: [Output Only] Unique identifier for the forwarding rule; defined by the server.\n\n  * `mirrored_resources`:\n\n    * `subnetworks`: A set of subnetworks for which traffic from/to all VM instances will be mirrored. They must live in the same region as this packetMirroring. You may specify a maximum of 5 subnetworks.\n\n      * `url`: Resource URL to the subnetwork for which traffic from/to all VM instances will be mirrored.\n\n      * `canonical_url`: [Output Only] Unique identifier for the subnetwork; defined by the server.\n\n    * `instances`: A set of virtual machine instances that are being mirrored. They must live in zones contained in the same region as this packetMirroring. Note that this config will apply only to those network interfaces of the Instances that belong to the network specified in this packetMirroring. You may specify a maximum of 50 Instances.\n\n      * `url`: Resource URL to the virtual machine instance which is being mirrored.\n\n      * `canonical_url`: [Output Only] Unique identifier for the instance; defined by the server.\n\n    * `tags`: A set of mirrored tags. Traffic from/to all VM instances that have one or more of these tags will be mirrored.\n\n  * `filter`:\n\n    * `cidr_ranges`: One or more IPv4 or IPv6 CIDR ranges that apply as filter on the source (ingress) or destination (egress) IP in the IP header. If no ranges are specified, all IPv4 traffic that matches the specified IPProtocols is mirrored. If neither cidrRanges nor IPProtocols is specified, all IPv4 traffic is mirrored. To mirror all IPv4 and IPv6 traffic, use \"0.0.0.0/0,::/0\". Note: Support for IPv6 traffic is in preview.\n\n    * `ip_protocols`: Protocols that apply as filter on mirrored traffic. If no protocols are specified, all traffic that matches the specified CIDR ranges is mirrored. If neither cidrRanges nor IPProtocols is specified, all IPv4 traffic is mirrored.\n\n    * `direction`: Direction of traffic to mirror, either INGRESS, EGRESS, or BOTH. The default is BOTH.\n    Possible values:\n      * BOTH\n      * EGRESS\n      * INGRESS\n\n  * `enable`: Indicates whether or not this packet mirroring takes effect. If set to FALSE, this packet mirroring policy will not be enforced on the network. The default is TRUE.\n  Possible values:\n    * FALSE\n    * TRUE\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_packet_mirrorings.md",
    "content": "+++\ntitle = \"google_compute_packet_mirrorings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_packet_mirrorings\"\nidentifier = \"inspec/resources/gcp/google_compute_packet_mirrorings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_packet_mirrorings` InSpec audit resource to to test a Google Cloud PacketMirroring resource.\n\n## Examples\n\n```ruby\n  describe google_compute_packet_mirrorings(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_packet_mirrorings` resource:\n\nSee [google_compute_packet_mirroring](google_compute_packet_mirroring) for more detailed information.\n\n  * `kinds`: an array of `google_compute_packet_mirroring` kind\n  * `ids`: an array of `google_compute_packet_mirroring` id\n  * `creation_timestamps`: an array of `google_compute_packet_mirroring` creation_timestamp\n  * `self_links`: an array of `google_compute_packet_mirroring` self_link\n  * `self_link_with_ids`: an array of `google_compute_packet_mirroring` self_link_with_id\n  * `names`: an array of `google_compute_packet_mirroring` name\n  * `descriptions`: an array of `google_compute_packet_mirroring` description\n  * `regions`: an array of `google_compute_packet_mirroring` region\n  * `networks`: an array of `google_compute_packet_mirroring` network\n  * `priorities`: an array of `google_compute_packet_mirroring` priority\n  * `collector_ilbs`: an array of `google_compute_packet_mirroring` collector_ilb\n  * `mirrored_resources`: an array of `google_compute_packet_mirroring` mirrored_resources\n  * `filters`: an array of `google_compute_packet_mirroring` filter\n  * `enables`: an array of `google_compute_packet_mirroring` enable\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_project_info.md",
    "content": "+++\ntitle = \"google_compute_project_info resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_project_info\"\nidentifier = \"inspec/resources/gcp/google_compute_project_info resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_project_info` is used to test a Google ProjectInfo resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_project_info(project: 'chef-gcp-inspec') do\n\tit { should exist }\n\tits('default_service_account') { should match \"developer.gserviceaccount.com\" }\nend\n```\n\n### Test that GCP compute project information exists\n\n    describe google_compute_project_info(project: 'chef-inspec-gcp') do\n      it { should exist }\n    end\n\n### Test that GCP compute project default service account is as expected\n\n    describe google_compute_project_info(project: 'chef-inspec-gcp') do\n      its('default_service_account') { should eq '12345-compute@developer.gserviceaccount.com' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_project_info` resource:\n\n\n  * `name`: The name of this project\n\n  * `common_instance_metadata`: Metadata shared for all instances in this project\n\n    * `items`: Array of key/values\n\n      * `key`: Key of the metadata key/value pair\n\n      * `value`: Value of the metadata key/value pair\n\n  * `enabled_features`: Restricted features enabled for use on this project\n\n  * `default_service_account`: Default service account used by VMs in this project\n\n  * `xpn_project_status`: The role this project has in a shared VPC configuration.\n\n  * `default_network_tier`: The default network tier used for configuring resources in this project\n\n  * `quotas`: Quotas applied to this project\n\n    * `metric`: Name of the quota metric\n\n    * `limit`: Quota limit for this metric\n\n    * `usage`: Current usage of this metric\n\n    * `owner`: Owning resource. This is the resource on which this quota is applied.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_public_delegated_prefix.md",
    "content": "+++\ntitle = \"google_compute_public_delegated_prefix resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_public_delegated_prefix\"\nidentifier = \"inspec/resources/gcp/google_compute_public_delegated_prefix resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_public_delegated_prefix` InSpec audit resource to to test a Google Cloud PublicDelegatedPrefix resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_public_delegated_prefix(project: 'chef-gcp-inspec', region: 'us-east1-b', name: 'test') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_public_delegated_prefix` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `ip_cidr_range`: The IPv4 address range, in CIDR format, represented by this public delegated prefix.\n\n  * `parent_prefix`: The value of requestId if you provided it in the request. Not present otherwise.\n\n  * `is_live_migration`: If true, the prefix will be live migrated.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a new PublicDelegatedPrefix. An up-to-date fingerprint must be provided in order to update the PublicDelegatedPrefix, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a PublicDelegatedPrefix. A base64-encoded string.\n\n  * `status`: The status of the public delegated prefix, which can be one of following values: * INITIALIZING The public delegated prefix is being initialized and addresses cannot be created yet. * READY_TO_ANNOUNCE The public delegated prefix is a live migration prefix and is active. * ANNOUNCED The public delegated prefix is active. * DELETING The public delegated prefix is being deprovsioned.\n  Possible values:\n    * INITIALIZING\n    * READY_TO_ANNOUNCE\n    * ANNOUNCED\n    * DELETING\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_public_delegated_prefixes.md",
    "content": "+++\ntitle = \"google_compute_public_delegated_prefixes resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_public_delegated_prefixes\"\nidentifier = \"inspec/resources/gcp/google_compute_public_delegated_prefixes resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_public_delegated_prefixes` InSpec audit resource to to test a Google Cloud PublicDelegatedPrefix resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_public_delegated_prefixes(project: 'chef-gcp-inspec', region: 'us-east1-b') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_public_delegated_prefixes` resource:\n\nSee [google_compute_public_delegated_prefix](google_compute_public_delegated_prefix) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_public_delegated_prefix` creation_timestamp\n  * `descriptions`: an array of `google_compute_public_delegated_prefix` description\n  * `ids`: an array of `google_compute_public_delegated_prefix` id\n  * `names`: an array of `google_compute_public_delegated_prefix` name\n  * `ip_cidr_ranges`: an array of `google_compute_public_delegated_prefix` ip_cidr_range\n  * `parent_prefixes`: an array of `google_compute_public_delegated_prefix` parent_prefix\n  * `is_live_migrations`: an array of `google_compute_public_delegated_prefix` is_live_migration\n  * `fingerprints`: an array of `google_compute_public_delegated_prefix` fingerprint\n  * `statuses`: an array of `google_compute_public_delegated_prefix` status\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region.md",
    "content": "+++\ntitle = \"google_compute_region resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region\"\nidentifier = \"inspec/resources/gcp/google_compute_region resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_region` is used to test a Google Region resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region(project: 'chef-gcp-inspec', name: 'europe-west2') do\n  it { should exist }\n  it { should be_up }\n  its('zone_names') { should include \"#{gcp_location}-a\" }\nend\n\ndescribe google_compute_region(project: 'chef-gcp-inspec', name: 'notthere') do\n  it { should_not exist }\nend\n\n```\n  ### Test that a GCP compute region exists\n```\n  describe google_compute_region(project: 'chef-inspec-gcp',  region: 'europe-west2') do\n    it { should exist }\n  end\n```\n  ### Test that a GCP compute region is in the expected state\n```\n  describe google_compute_region(project: 'chef-inspec-gcp',  region: 'europe-west2') do\n    its('status') { should eq 'UP' }\n    # or equivalently\n    it { should be_up }\n  end\n```\n  ### Test a GCP compute region identifier\n```\n  describe google_compute_region(project: 'chef-inspec-gcp',  region: \"asia-east1\") do\n    its('id') { should eq \"1220\" }\n  end\n```\n  ### Check that a region is associated with the expected zone fully qualified name\n```\n  describe google_compute_region(project: 'chef-inspec-gcp',  region: \"asia-east1\") do\n    its('zones') { should include \"https://www.googleapis.com/compute/v1/projects/spaterson-project/zones/asia-east1-a\" }\n  end\n```\n  ### Check that a region is associated with the expected zone short name\n```\n  describe google_compute_region(project: 'chef-inspec-gcp',  region: \"asia-east1\") do\n    its('zone_names') { should include \"asia-east1-a\" }\n  end\n```\n\n  The `zone_names` property is also useful for subsequently looping over associated `google_compute_zone` resources.  For example:\n```\n  google_compute_region(project: 'chef-inspec-gcp',  region: \"asia-east1\").zone_names.each do |zone_name|\n    describe google_compute_zone(project: 'chef-inspec-gcp', name: zone_name) do\n      it { should be_up }\n    end\n  end\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `deprecated`: The deprecation state of this resource.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * DEPRECATED\n      * OBSOLETE\n      * DELETED\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `quotas`: Quotas assigned to this region.\n\n    * `metric`: Name of the quota metric.\n\n    * `limit`: Quota limit for this metric.\n\n    * `usage`: Current usage of this metric.\n\n    * `owner`: Owning resource. This is the resource on which this quota is applied.\n\n  * `status`: Status of the region, either UP or DOWN.\n  Possible values:\n    * UP\n    * DOWN\n\n  * `zones`: List of zones within the region\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_autoscaler.md",
    "content": "+++\ntitle = \"google_compute_region_autoscaler resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_autoscaler\"\nidentifier = \"inspec/resources/gcp/google_compute_region_autoscaler resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_autoscaler` InSpec audit resource to to test a Google Cloud RegionAutoscaler resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_autoscaler(name: 'value_name', project: 'chef-gcp-inspec', region: 'value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('target') { should cmp 'value_target' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('region') { should cmp 'value_region' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('status') { should cmp 'value_status' }\n\nend\n\ndescribe google_compute_region_autoscaler(name: 'value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_autoscaler` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `target`: URL of the managed instance group that this autoscaler will scale. This field is required when creating an autoscaler.\n\n  * `autoscaling_policy`: Cloud Autoscaler policy.\n\n    * `min_num_replicas`: The minimum number of replicas that the autoscaler can scale in to. This cannot be less than 0. If not provided, autoscaler chooses a default value depending on maximum number of instances allowed.\n\n    * `max_num_replicas`: The maximum number of instances that the autoscaler can scale out to. This is required when creating or updating an autoscaler. The maximum number of replicas must not be lower than minimal number of replicas.\n\n    * `scale_down_control`: Configuration that allows for slower scale in so that even if Autoscaler recommends an abrupt scale in of a MIG, it will be throttled as specified by the parameters below.\n\n      * `max_scaled_down_replicas`: Encapsulates numeric value that can be either absolute or relative.\n\n        * `fixed`: Specifies a fixed number of VM instances. This must be a positive integer.\n\n        * `percent`: Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.\n\n        * `calculated`: [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.\n\n      * `time_window_sec`: How far back autoscaling looks when computing recommendations to include directives regarding slower scale in, as described above.\n\n    * `scale_in_control`: Configuration that allows for slower scale in so that even if Autoscaler recommends an abrupt scale in of a MIG, it will be throttled as specified by the parameters below.\n\n      * `max_scaled_in_replicas`: Encapsulates numeric value that can be either absolute or relative.\n\n        * `fixed`: Specifies a fixed number of VM instances. This must be a positive integer.\n\n        * `percent`: Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.\n\n        * `calculated`: [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.\n\n      * `time_window_sec`: How far back autoscaling looks when computing recommendations to include directives regarding slower scale in, as described above.\n\n    * `cool_down_period_sec`: The number of seconds that your application takes to initialize on a VM instance. This is referred to as the [initialization period](/compute/docs/autoscaler#cool_down_period). Specifying an accurate initialization period improves autoscaler decisions. For example, when scaling out, the autoscaler ignores data from VMs that are still initializing because those VMs might not yet represent normal usage of your application. The default initialization period is 60 seconds. Initialization periods might vary because of numerous factors. We recommend that you test how long your application takes to initialize. To do this, create a VM and time your application's startup process.\n\n    * `cpu_utilization`: CPU utilization policy.\n\n      * `utilization_target`: The target CPU utilization that the autoscaler maintains. Must be a float value in the range (0, 1]. If not specified, the default is 0.6. If the CPU level is below the target utilization, the autoscaler scales in the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization. If the average CPU is above the target utilization, the autoscaler scales out until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.\n\n      * `predictive_method`: Indicates whether predictive autoscaling based on CPU metric is enabled. Valid values are: * NONE (default). No predictive method is used. The autoscaler scales the group to meet current demand based on real-time metrics. * OPTIMIZE_AVAILABILITY. Predictive autoscaling improves availability by monitoring daily and weekly load patterns and scaling out ahead of anticipated demand.\n      Possible values:\n        * NONE\n        * OPTIMIZE_AVAILABILITY\n        * PREDICTIVE_METHOD_UNSPECIFIED\n        * STANDARD\n\n    * `custom_metric_utilizations`: Configuration parameters of autoscaling based on a custom metric.\n\n      * `metric`: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE.\n\n      * `filter`: A filter string, compatible with a Stackdriver Monitoring filter string for TimeSeries.list API call. This filter is used to select a specific TimeSeries for the purpose of autoscaling and to determine whether the metric is exporting per-instance or per-group data. For the filter to be valid for autoscaling purposes, the following rules apply: - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without any functions for each selector. - You can specify the metric in both the filter string and in the metric field. However, if specified in both places, the metric must be identical. - The monitored resource type determines what kind of values are expected for the metric. If it is a gce_instance, the autoscaler expects the metric to include a separate TimeSeries for each instance in a group. In such a case, you cannot filter on resource labels. If the resource type is any other value, the autoscaler expects this metric to contain values that apply to the entire autoscaled instance group and resource label filtering can be performed to point autoscaler at the correct TimeSeries to scale upon. This is called a *per-group metric* for the purpose of autoscaling. If not specified, the type defaults to gce_instance. Try to provide a filter that is selective enough to pick just one TimeSeries for the autoscaled group or for each of the instances (if you are using gce_instance resource type). If multiple TimeSeries are returned upon the query execution, the autoscaler will sum their respective values to obtain its scaling value.\n\n      * `utilization_target`: The target value of the metric that autoscaler maintains. This must be a positive value. A utilization metric scales number of virtual machines handling requests to increase or decrease proportionally to the metric. For example, a good metric to use as a utilization_target is https://www.googleapis.com/compute/v1/instance/network/received_bytes_count. The autoscaler works to keep this value constant for each of the instances.\n\n      * `single_instance_assignment`: If scaling is based on a per-group metric value that represents the total amount of work to be done or resource usage, set this value to an amount assigned for a single instance of the scaled group. Autoscaler keeps the number of instances proportional to the value of this metric. The metric itself does not change value due to group resizing. A good metric to use with the target is for example pubsub.googleapis.com/subscription/num_undelivered_messages or a custom metric exporting the total number of requests coming to your instances. A bad example would be a metric exporting an average or median latency, since this value can't include a chunk assignable to a single instance, it could be better used with utilization_target instead.\n\n      * `utilization_target_type`: Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.\n      Possible values:\n        * DELTA_PER_MINUTE\n        * DELTA_PER_SECOND\n        * GAUGE\n\n    * `load_balancing_utilization`: Configuration parameters of autoscaling based on load balancing.\n\n      * `utilization_target`: Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that the autoscaler maintains. Must be a positive float value. If not defined, the default is 0.8.\n\n    * `mode`: Defines the operating mode for this policy. The following modes are available: - OFF: Disables the autoscaler but maintains its configuration. - ONLY_SCALE_OUT: Restricts the autoscaler to add VM instances only. - ON: Enables all autoscaler activities according to its policy. For more information, see \"Turning off or restricting an autoscaler\"\n    Possible values:\n      * OFF\n      * ON\n      * ONLY_SCALE_OUT\n      * ONLY_UP\n\n    * `scaling_schedules`: Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler, and they can overlap. During overlapping periods the greatest min_required_replicas of all scaling schedules is applied. Up to 128 scaling schedules are allowed.\n\n      * `additional_properties`: Scaling based on user-defined schedule. The message describes a single scaling schedule. A scaling schedule changes the minimum number of VM instances an autoscaler can recommend, which can trigger scaling out.\n\n  * `zone`: [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).\n\n  * `region`: [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `status`: [Output Only] The status of the autoscaler configuration. Current set of possible values: - PENDING: Autoscaler backend hasn't read new/updated configuration. - DELETING: Configuration is being deleted. - ACTIVE: Configuration is acknowledged to be effective. Some warnings might be present in the statusDetails field. - ERROR: Configuration has errors. Actionable for users. Details are present in the statusDetails field. New values might be added in the future.\n  Possible values:\n    * ACTIVE\n    * DELETING\n    * ERROR\n    * PENDING\n\n  * `status_details`: [Output Only] Human-readable details about the current state of the autoscaler. Read the documentation for Commonly returned status messages for examples of status messages you might encounter.\n\n    * `message`: The status message.\n\n    * `type`: The type of error, warning, or notice returned. Current set of possible values: - ALL_INSTANCES_UNHEALTHY (WARNING): All instances in the instance group are unhealthy (not in RUNNING state). - BACKEND_SERVICE_DOES_NOT_EXIST (ERROR): There is no backend service attached to the instance group. - CAPPED_AT_MAX_NUM_REPLICAS (WARNING): Autoscaler recommends a size greater than maxNumReplicas. - CUSTOM_METRIC_DATA_POINTS_TOO_SPARSE (WARNING): The custom metric samples are not exported often enough to be a credible base for autoscaling. - CUSTOM_METRIC_INVALID (ERROR): The custom metric that was specified does not exist or does not have the necessary labels. - MIN_EQUALS_MAX (WARNING): The minNumReplicas is equal to maxNumReplicas. This means the autoscaler cannot add or remove instances from the instance group. - MISSING_CUSTOM_METRIC_DATA_POINTS (WARNING): The autoscaler did not receive any data from the custom metric configured for autoscaling. - MISSING_LOAD_BALANCING_DATA_POINTS (WARNING): The autoscaler is configured to scale based on a load balancing signal but the instance group has not received any requests from the load balancer. - MODE_OFF (WARNING): Autoscaling is turned off. The number of instances in the group won't change automatically. The autoscaling configuration is preserved. - MODE_ONLY_UP (WARNING): Autoscaling is in the \"Autoscale only out\" mode. The autoscaler can add instances but not remove any. - MORE_THAN_ONE_BACKEND_SERVICE (ERROR): The instance group cannot be autoscaled because it has more than one backend service attached to it. - NOT_ENOUGH_QUOTA_AVAILABLE (ERROR): There is insufficient quota for the necessary resources, such as CPU or number of instances. - REGION_RESOURCE_STOCKOUT (ERROR): Shown only for regional autoscalers: there is a resource stockout in the chosen region. - SCALING_TARGET_DOES_NOT_EXIST (ERROR): The target to be scaled does not exist. - UNSUPPORTED_MAX_RATE_LOAD_BALANCING_CONFIGURATION (ERROR): Autoscaling does not work with an HTTP/S load balancer that has been configured for maxRate. - ZONE_RESOURCE_STOCKOUT (ERROR): For zonal autoscalers: there is a resource stockout in the chosen zone. For regional autoscalers: in at least one of the zones you're using there is a resource stockout. New values might be added in the future. Some of the values might not be available in all API versions.\n    Possible values:\n      * ALL_INSTANCES_UNHEALTHY\n      * BACKEND_SERVICE_DOES_NOT_EXIST\n      * CAPPED_AT_MAX_NUM_REPLICAS\n      * CUSTOM_METRIC_DATA_POINTS_TOO_SPARSE\n      * CUSTOM_METRIC_INVALID\n      * MIN_EQUALS_MAX\n      * MISSING_CUSTOM_METRIC_DATA_POINTS\n      * MISSING_LOAD_BALANCING_DATA_POINTS\n      * MODE_OFF\n      * MODE_ONLY_SCALE_OUT\n      * MODE_ONLY_UP\n      * MORE_THAN_ONE_BACKEND_SERVICE\n      * NOT_ENOUGH_QUOTA_AVAILABLE\n      * REGION_RESOURCE_STOCKOUT\n      * SCALING_TARGET_DOES_NOT_EXIST\n      * SCHEDULED_INSTANCES_GREATER_THAN_AUTOSCALER_MAX\n      * SCHEDULED_INSTANCES_LESS_THAN_AUTOSCALER_MIN\n      * UNKNOWN\n      * UNSUPPORTED_MAX_RATE_LOAD_BALANCING_CONFIGURATION\n      * ZONE_RESOURCE_STOCKOUT\n\n  * `recommended_size`: [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates the recommended MIG size even when the autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to an existing managed instance group or autoscaler did not generate its prediction.\n\n  * `scaling_schedule_status`: [Output Only] Status information of existing scaling schedules.\n\n    * `additional_properties`:\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_autoscalers.md",
    "content": "+++\ntitle = \"google_compute_region_autoscalers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_autoscalers\"\nidentifier = \"inspec/resources/gcp/google_compute_region_autoscalers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_autoscalers` InSpec audit resource to to test a Google Cloud RegionAutoscaler resource.\n\n## Examples\n\n```ruby\n  describe google_compute_region_autoscalers(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_autoscalers` resource:\n\nSee [google_compute_region_autoscaler](google_compute_region_autoscaler) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_autoscaler` kind\n  * `ids`: an array of `google_compute_region_autoscaler` id\n  * `creation_timestamps`: an array of `google_compute_region_autoscaler` creation_timestamp\n  * `names`: an array of `google_compute_region_autoscaler` name\n  * `descriptions`: an array of `google_compute_region_autoscaler` description\n  * `targets`: an array of `google_compute_region_autoscaler` target\n  * `autoscaling_policies`: an array of `google_compute_region_autoscaler` autoscaling_policy\n  * `zones`: an array of `google_compute_region_autoscaler` zone\n  * `regions`: an array of `google_compute_region_autoscaler` region\n  * `self_links`: an array of `google_compute_region_autoscaler` self_link\n  * `self_link_with_ids`: an array of `google_compute_region_autoscaler` self_link_with_id\n  * `statuses`: an array of `google_compute_region_autoscaler` status\n  * `status_details`: an array of `google_compute_region_autoscaler` status_details\n  * `recommended_sizes`: an array of `google_compute_region_autoscaler` recommended_size\n  * `scaling_schedule_statuses`: an array of `google_compute_region_autoscaler` scaling_schedule_status\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_backend_service.md",
    "content": "+++\ntitle = \"google_compute_region_backend_service resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_backend_service\"\nidentifier = \"inspec/resources/gcp/google_compute_region_backend_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_region_backend_service` is used to test a Google RegionBackendService resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_backend_service(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-gcp-region-backend-service') do\n  it { should exist }\n  its('description') { should eq 'A regional description' }\n  its('protocol') { should eq 'TCP' }\n  its('timeout_sec') { should eq '15' }\nend\n\ndescribe google_compute_region_backend_service(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_backend_service` resource:\n\n\n  * `affinity_cookie_ttl_sec`: Lifetime of cookies in seconds if session_affinity is GENERATED_COOKIE. If set to 0, the cookie is non-persistent and lasts only until the end of the browser session (or equivalent). The maximum allowed value for TTL is one day.  When the load balancing scheme is INTERNAL, this field is not used.\n\n  * `backends`: The set of backends that serve this RegionBackendService.\n\n    * `balancing_mode`: Specifies the balancing mode for this backend.\n    Possible values:\n      * UTILIZATION\n      * RATE\n      * CONNECTION\n\n    * `capacity_scaler`: A multiplier applied to the group's maximum servicing capacity (based on UTILIZATION, RATE or CONNECTION).  ~>**NOTE**: This field cannot be set for INTERNAL region backend services (default loadBalancingScheme), but is required for non-INTERNAL backend service. The total capacity_scaler for all backends must be non-zero.  A setting of 0 means the group is completely drained, offering 0% of its available Capacity. Valid range is [0.0,1.0].\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `failover`: This field designates whether this is a failover backend. More than one failover backend can be configured for a given RegionBackendService.\n\n    * `group`: The fully-qualified URL of an Instance Group or Network Endpoint Group resource. In case of instance group this defines the list of instances that serve traffic. Member virtual machine instances from each instance group must live in the same zone as the instance group itself. No two backends in a backend service are allowed to use same Instance Group resource.  For Network Endpoint Groups this defines list of endpoints. All endpoints of Network Endpoint Group must be hosted on instances located in the same zone as the Network Endpoint Group.  Backend services cannot mix Instance Group and Network Endpoint Group backends.  When the `load_balancing_scheme` is INTERNAL, only instance groups are supported.  Note that you must specify an Instance Group or Network Endpoint Group resource using the fully-qualified URL, rather than a partial URL.\n\n    * `max_connections`: The max number of simultaneous connections for the group. Can be used with either CONNECTION or UTILIZATION balancing modes. Cannot be set for INTERNAL backend services.  For CONNECTION mode, either maxConnections or one of maxConnectionsPerInstance or maxConnectionsPerEndpoint, as appropriate for group type, must be set.\n\n    * `max_connections_per_instance`: The max number of simultaneous connections that a single backend instance can handle. Cannot be set for INTERNAL backend services.  This is used to calculate the capacity of the group. Can be used in either CONNECTION or UTILIZATION balancing modes. For CONNECTION mode, either maxConnections or maxConnectionsPerInstance must be set.\n\n    * `max_connections_per_endpoint`: The max number of simultaneous connections that a single backend network endpoint can handle. Cannot be set for INTERNAL backend services.  This is used to calculate the capacity of the group. Can be used in either CONNECTION or UTILIZATION balancing modes. For CONNECTION mode, either maxConnections or maxConnectionsPerEndpoint must be set.\n\n    * `max_rate`: The max requests per second (RPS) of the group. Cannot be set for INTERNAL backend services.  Can be used with either RATE or UTILIZATION balancing modes, but required if RATE mode. Either maxRate or one of maxRatePerInstance or maxRatePerEndpoint, as appropriate for group type, must be set.\n\n    * `max_rate_per_instance`: The max requests per second (RPS) that a single backend instance can handle. This is used to calculate the capacity of the group. Can be used in either balancing mode. For RATE mode, either maxRate or maxRatePerInstance must be set. Cannot be set for INTERNAL backend services.\n\n    * `max_rate_per_endpoint`: The max requests per second (RPS) that a single backend network endpoint can handle. This is used to calculate the capacity of the group. Can be used in either balancing mode. For RATE mode, either maxRate or maxRatePerEndpoint must be set. Cannot be set for INTERNAL backend services.\n\n    * `max_utilization`: Used when balancingMode is UTILIZATION. This ratio defines the CPU utilization target for the group. Valid range is [0.0, 1.0]. Cannot be set for INTERNAL backend services.\n\n  * `circuit_breakers`: Settings controlling the volume of connections to a backend service. This field is applicable only when the `load_balancing_scheme` is set to INTERNAL_MANAGED and the `protocol` is set to HTTP, HTTPS, or HTTP2.\n\n    * `connect_timeout`: (Beta only) The timeout for new network connections to hosts.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n    * `max_requests_per_connection`: Maximum requests for a single backend connection. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If not specified, there is no limit. Setting this parameter to 1 will effectively disable keep alive.\n\n    * `max_connections`: The maximum number of connections to the backend cluster. Defaults to 1024.\n\n    * `max_pending_requests`: The maximum number of pending requests to the backend cluster. Defaults to 1024.\n\n    * `max_requests`: The maximum number of parallel requests to the backend cluster. Defaults to 1024.\n\n    * `max_retries`: The maximum number of parallel retries to the backend cluster. Defaults to 3.\n\n  * `consistent_hash`: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular destination host will be lost when one or more hosts are added/removed from the destination service. This field specifies parameters that control consistent hashing. This field only applies when all of the following are true -   * `load_balancing_scheme` is set to INTERNAL_MANAGED   * `protocol` is set to HTTP, HTTPS, or HTTP2   * `locality_lb_policy` is set to MAGLEV or RING_HASH\n\n    * `http_cookie`: Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load balancer. If the cookie is not present, it will be generated. This field is applicable if the sessionAffinity is set to HTTP_COOKIE.\n\n      * `ttl`: Lifetime of the cookie.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n      * `name`: Name of the cookie.\n\n      * `path`: Path to set for the cookie.\n\n    * `http_header_name`: The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD.\n\n    * `minimum_ring_size`: The minimum number of virtual nodes to use for the hash ring. Larger ring sizes result in more granular load distributions. If the number of hosts in the load balancing pool is larger than the ring size, each host will be assigned a single virtual node. Defaults to 1024.\n\n  * `cdn_policy`: Cloud CDN configuration for this BackendService.\n\n    * `cache_key_policy`: The CacheKeyPolicy for this CdnPolicy.\n\n      * `include_host`: If true requests to different hosts will be cached separately.\n\n      * `include_protocol`: If true, http and https requests will be cached separately.\n\n      * `include_query_string`: If true, include query string parameters in the cache key according to query_string_whitelist and query_string_blacklist. If neither is set, the entire query string will be included.  If false, the query string will be excluded from the cache key entirely.\n\n      * `query_string_blacklist`: Names of query string parameters to exclude in cache keys.  All other parameters will be included. Either specify query_string_whitelist or query_string_blacklist, not both. '&' and '=' will be percent encoded and not treated as delimiters.\n\n      * `query_string_whitelist`: Names of query string parameters to include in cache keys.  All other parameters will be excluded. Either specify query_string_whitelist or query_string_blacklist, not both. '&' and '=' will be percent encoded and not treated as delimiters.\n\n    * `signed_url_cache_max_age_sec`: Maximum number of seconds the response to a signed URL request will be considered fresh, defaults to 1hr (3600s). After this time period, the response will be revalidated before being served.  When serving responses to signed URL requests, Cloud CDN will internally behave as though all responses from this backend had a \"Cache-Control: public, max-age=[TTL]\" header, regardless of any existing Cache-Control header. The actual headers served in responses will not be altered.\n\n    * `default_ttl`: (Beta only) Specifies the default TTL for cached content served by this origin for responses  that do not have an existing valid TTL (max-age or s-max-age).\n\n    * `max_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `client_ttl`: (Beta only) Specifies the maximum allowed TTL for cached content served by this origin.\n\n    * `negative_caching`: (Beta only) Negative caching allows per-status code TTLs to be set, in order to apply fine-grained caching for common errors or redirects.\n\n    * `negative_caching_policy`: (Beta only) Sets a cache TTL for the specified HTTP status code. negativeCaching must be enabled to configure negativeCachingPolicy. Omitting the policy and leaving negativeCaching enabled will use Cloud CDN's default cache TTLs.\n\n      * `code`: (Beta only) The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 can be specified as values, and you cannot specify a status code more than once.\n\n      * `ttl`: (Beta only) The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL.\n\n    * `cache_mode`: (Beta only) Specifies the cache setting for all responses from this backend. The possible values are: USE_ORIGIN_HEADERS, FORCE_CACHE_ALL and CACHE_ALL_STATIC\n    Possible values:\n      * USE_ORIGIN_HEADERS\n      * FORCE_CACHE_ALL\n      * CACHE_ALL_STATIC\n\n    * `serve_while_stale`: (Beta only) Serve existing content from the cache (if available) when revalidating content with the origin, or when an error is encountered when refreshing the cache. \n\n  * `connection_draining`: Settings for connection draining\n\n    * `draining_timeout_sec`: Time for which instance will be drained (not accept new connections, but still work to finish started).\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `failover_policy`: Policy for failovers.\n\n    * `disable_connection_drain_on_failover`: On failover or failback, this field indicates whether connection drain will be honored. Setting this to true has the following effect: connections to the old active pool are not drained. Connections to the new active pool use the timeout of 10 min (currently fixed). Setting to false has the following effect: both old and new connections will have a drain timeout of 10 min. This can be set to true only if the protocol is TCP. The default is false.\n\n    * `drop_traffic_if_unhealthy`: This option is used only when no healthy VMs are detected in the primary and backup instance groups. When set to true, traffic is dropped. When set to false, new connections are sent across all VMs in the primary group. The default is false.\n\n    * `failover_ratio`: The value of the field must be in [0, 1]. If the ratio of the healthy VMs in the primary backend is at or below this number, traffic arriving at the load-balanced IP will be directed to the failover backend. In case where 'failoverRatio' is not set or all the VMs in the backup backend are unhealthy, the traffic will be directed back to the primary backend in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy. This field is only used with l4 load balancing.\n\n  * `enable_cdn`: If true, enable Cloud CDN for this RegionBackendService.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking.\n\n  * `health_checks`: The set of URLs to HealthCheck resources for health checking this RegionBackendService. Currently at most one health check can be specified.   A health check must be specified unless the backend service uses an internet or serverless NEG as a backend.\n\n  * `id`: The unique identifier for the resource.\n\n  * `load_balancing_scheme`: Indicates what kind of load balancing this regional backend service will be used for. A backend service created for one type of load balancing cannot be used with the other(s).\n  Possible values:\n    * EXTERNAL\n    * INTERNAL\n    * INTERNAL_MANAGED\n\n  * `locality_lb_policy`: The load balancing algorithm used within the scope of the locality. The possible values are -  * ROUND_ROBIN - This is a simple policy in which each healthy backend                 is selected in round robin order.  * LEAST_REQUEST - An O(1) algorithm which selects two random healthy                   hosts and picks the host which has fewer active requests.  * RING_HASH - The ring/modulo hash load balancer implements consistent               hashing to backends. The algorithm has the property that the               addition/removal of a host from a set of N hosts only affects               1/N of the requests.  * RANDOM - The load balancer selects a random healthy host.  * ORIGINAL_DESTINATION - Backend host is selected based on the client                          connection metadata, i.e., connections are opened                          to the same address as the destination address of                          the incoming connection before the connection                          was redirected to the load balancer.  * MAGLEV - used as a drop in replacement for the ring hash load balancer.            Maglev is not as stable as ring hash but has faster table lookup            build times and host selection times. For more information about            Maglev, refer to https://ai.google/research/pubs/pub44824  This field is applicable only when the `load_balancing_scheme` is set to INTERNAL_MANAGED and the `protocol` is set to HTTP, HTTPS, or HTTP2.\n  Possible values:\n    * ROUND_ROBIN\n    * LEAST_REQUEST\n    * RING_HASH\n    * RANDOM\n    * ORIGINAL_DESTINATION\n    * MAGLEV\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `outlier_detection`: Settings controlling eviction of unhealthy hosts from the load balancing pool. This field is applicable only when the `load_balancing_scheme` is set to INTERNAL_MANAGED and the `protocol` is set to HTTP, HTTPS, or HTTP2.\n\n    * `base_ejection_time`: The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `consecutive_errors`: Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. Defaults to 5.\n\n    * `consecutive_gateway_failure`: The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive gateway failure ejection occurs. Defaults to 5.\n\n    * `enforcing_consecutive_errors`: The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n\n    * `enforcing_consecutive_gateway_failure`: The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0.\n\n    * `enforcing_success_rate`: The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n\n    * `interval`: Time interval between ejection sweep analysis. This can result in both new ejections as well as hosts being returned to service. Defaults to 10 seconds.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive.\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `max_ejection_percent`: Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 10%.\n\n    * `success_rate_minimum_hosts`: The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.\n\n    * `success_rate_request_volume`: The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.\n\n    * `success_rate_stdev_factor`: This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900.\n\n  * `port_name`: A named port on a backend instance group representing the port for communication to the backend VMs in that group. Required when the loadBalancingScheme is EXTERNAL, INTERNAL_MANAGED, or INTERNAL_SELF_MANAGED and the backends are instance groups. The named port must be defined on each backend instance group. This parameter has no meaning if the backends are NEGs. API sets a default of \"http\" if not given. Must be omitted when the loadBalancingScheme is INTERNAL (Internal TCP/UDP Load Balancing).\n\n  * `protocol`: The protocol this RegionBackendService uses to communicate with backends. The default is HTTP. **NOTE**: HTTP2 is only valid for beta HTTP/2 load balancer types and may result in errors if used with the GA API.\n  Possible values:\n    * HTTP\n    * HTTPS\n    * HTTP2\n    * SSL\n    * TCP\n    * UDP\n    * GRPC\n\n  * `session_affinity`: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP.\n  Possible values:\n    * NONE\n    * CLIENT_IP\n    * CLIENT_IP_PORT_PROTO\n    * CLIENT_IP_PROTO\n    * GENERATED_COOKIE\n    * HEADER_FIELD\n    * HTTP_COOKIE\n\n  * `timeout_sec`: How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds. Valid range is [1, 86400].\n\n  * `log_config`: This field denotes the logging options for the load balancer traffic served by this backend service. If logging is enabled, logs will be exported to Stackdriver.\n\n    * `enable`: Whether to enable logging for the load balancer traffic served by this backend service.\n\n    * `sample_rate`: This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The default value is 1.0.\n\n  * `network`: The URL of the network to which this backend service belongs. This field can only be specified when the load balancing scheme is set to INTERNAL.\n\n  * `region`: A reference to the region where the regional backend service resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_backend_services.md",
    "content": "+++\ntitle = \"google_compute_region_backend_services resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_backend_services\"\nidentifier = \"inspec/resources/gcp/google_compute_region_backend_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_region_backend_services` is used to test a Google RegionBackendService resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_backend_services(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('count') { should be >= 1 }\n  its('names') { should include 'inspec-gcp-region-backend-service' }\n  its('protocols') { should include 'TCP' }\n  its('timeout_secs') { should include '15' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_backend_services` resource:\n\nSee [google_compute_region_backend_service](google_compute_region_backend_service) for more detailed information.\n\n  * `affinity_cookie_ttl_secs`: an array of `google_compute_region_backend_service` affinity_cookie_ttl_sec\n  * `backends`: an array of `google_compute_region_backend_service` backends\n  * `circuit_breakers`: an array of `google_compute_region_backend_service` circuit_breakers\n  * `consistent_hashes`: an array of `google_compute_region_backend_service` consistent_hash\n  * `cdn_policies`: an array of `google_compute_region_backend_service` cdn_policy\n  * `connection_drainings`: an array of `google_compute_region_backend_service` connection_draining\n  * `creation_timestamps`: an array of `google_compute_region_backend_service` creation_timestamp\n  * `descriptions`: an array of `google_compute_region_backend_service` description\n  * `failover_policies`: an array of `google_compute_region_backend_service` failover_policy\n  * `enable_cdns`: an array of `google_compute_region_backend_service` enable_cdn\n  * `fingerprints`: an array of `google_compute_region_backend_service` fingerprint\n  * `health_checks`: an array of `google_compute_region_backend_service` health_checks\n  * `ids`: an array of `google_compute_region_backend_service` id\n  * `load_balancing_schemes`: an array of `google_compute_region_backend_service` load_balancing_scheme\n  * `locality_lb_policies`: an array of `google_compute_region_backend_service` locality_lb_policy\n  * `names`: an array of `google_compute_region_backend_service` name\n  * `outlier_detections`: an array of `google_compute_region_backend_service` outlier_detection\n  * `port_names`: an array of `google_compute_region_backend_service` port_name\n  * `protocols`: an array of `google_compute_region_backend_service` protocol\n  * `session_affinities`: an array of `google_compute_region_backend_service` session_affinity\n  * `timeout_secs`: an array of `google_compute_region_backend_service` timeout_sec\n  * `log_configs`: an array of `google_compute_region_backend_service` log_config\n  * `networks`: an array of `google_compute_region_backend_service` network\n  * `regions`: an array of `google_compute_region_backend_service` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_commitment.md",
    "content": "+++\ntitle = \"google_compute_region_commitment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_commitment\"\nidentifier = \"inspec/resources/gcp/google_compute_region_commitment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_commitment` InSpec audit resource to to test a Google Cloud RegionCommitment resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_commitment(name: ' value_name', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('region') { should cmp 'value_region' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('status') { should cmp 'value_status' }\n\tits('status_message') { should cmp 'value_statusmessage' }\n\tits('plan') { should cmp 'value_plan' }\n\tits('start_timestamp') { should cmp 'value_starttimestamp' }\n\tits('end_timestamp') { should cmp 'value_endtimestamp' }\n\tits('type') { should cmp 'value_type' }\n\tits('category') { should cmp 'value_category' }\n\tits('split_source_commitment') { should cmp 'value_splitsourcecommitment' }\n\nend\n\ndescribe google_compute_region_commitment(name: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_commitment` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#commitment for commitments.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `region`: [Output Only] URL of the region where this commitment may be used.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `status`: [Output Only] Status of the commitment with regards to eventual expiration (each commitment has an end date defined). One of the following values: NOT_YET_ACTIVE, ACTIVE, EXPIRED.\n  Possible values:\n    * ACTIVE\n    * CANCELED_EARLY_TERMINATION\n    * CANCELING\n    * CANCELLED\n    * CREATING\n    * EXPIRED\n    * NOT_YET_ACTIVE\n\n  * `status_message`: [Output Only] An optional, human-readable explanation of the status.\n\n  * `plan`: The plan for this commitment, which determines duration and discount rate. The currently supported plans are TWELVE_MONTH (1 year), and THIRTY_SIX_MONTH (3 years).\n  Possible values:\n    * INVALID\n    * THIRTY_SIX_MONTH\n    * TWELVE_MONTH\n\n  * `start_timestamp`: [Output Only] Commitment start time in RFC3339 text format.\n\n  * `end_timestamp`: [Output Only] Commitment end time in RFC3339 text format.\n\n  * `resources`: A list of commitment amounts for particular resources. Note that VCPU and MEMORY resource commitments must occur together.\n\n    * `type`: Type of resource for which this commitment applies. Possible values are VCPU, MEMORY, LOCAL_SSD, and ACCELERATOR.\n    Possible values:\n      * ACCELERATOR\n      * LOCAL_SSD\n      * MEMORY\n      * UNSPECIFIED\n      * VCPU\n\n    * `amount`: The amount of the resource purchased (in a type-dependent unit, such as bytes). For vCPUs, this can just be an integer. For memory, this must be provided in MB. Memory must be a multiple of 256 MB, with up to 6.5GB of memory per every vCPU.\n\n    * `accelerator_type`: Name of the accelerator type resource. Applicable only when the type is ACCELERATOR.\n\n  * `type`: The type of commitment, which affects the discount rate and the eligible resources. Type MEMORY_OPTIMIZED specifies a commitment that will only apply to memory optimized machines. Type ACCELERATOR_OPTIMIZED specifies a commitment that will only apply to accelerator optimized machines.\n  Possible values:\n    * ACCELERATOR_OPTIMIZED\n    * ACCELERATOR_OPTIMIZED_A3\n    * COMPUTE_OPTIMIZED\n    * COMPUTE_OPTIMIZED_C2D\n    * COMPUTE_OPTIMIZED_C3\n    * COMPUTE_OPTIMIZED_C3D\n    * COMPUTE_OPTIMIZED_H3\n    * GENERAL_PURPOSE\n    * GENERAL_PURPOSE_E2\n    * GENERAL_PURPOSE_N2\n    * GENERAL_PURPOSE_N2D\n    * GENERAL_PURPOSE_N4\n    * GENERAL_PURPOSE_T2D\n    * GRAPHICS_OPTIMIZED\n    * MEMORY_OPTIMIZED\n    * MEMORY_OPTIMIZED_M3\n    * STORAGE_OPTIMIZED_Z3\n    * TYPE_UNSPECIFIED\n\n  * `reservations`: List of create-on-create reservations for this commitment.\n\n    * `kind`: [Output Only] Type of the resource. Always compute#reservations for reservations.\n\n    * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n    * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n    * `self_link`: [Output Only] Server-defined fully-qualified URL for this resource.\n\n    * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n    * `zone`: Zone in which the reservation resides. A zone must be provided if the reservation is created within a commitment.\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `name`: The name of the resource, provided by the client when initially creating the resource. The resource name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n    * `specific_reservation`: This reservation type allows to pre allocate specific instance configuration. Next ID: 6\n\n      * `instance_properties`: Properties of the SKU instances being reserved. Next ID: 9\n\n        * `machine_type`: Specifies type of machine (name only) which has fixed number of vCPUs and fixed amount of memory. This also includes specifying custom machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.\n\n        * `guest_accelerators`: Specifies accelerator type and count.\n\n          * `accelerator_type`: Full or partial URL of the accelerator type resource to attach to this instance. For example: projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100 If you are creating an instance template, specify only the accelerator name. See GPUs on Compute Engine for a full list of accelerator types.\n\n          * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n        * `min_cpu_platform`: Minimum cpu platform the reservation.\n\n        * `local_ssds`: Specifies amount of local ssd to reserve with each instance. The type of disk is local-ssd.\n\n          * `disk_size_gb`: Specifies the size of the disk in base-2 GB.\n\n          * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI. For performance characteristics of SCSI over NVMe, see Local SSD performance.\n          Possible values:\n            * NVDIMM\n            * NVME\n            * SCSI\n\n        * `maintenance_freeze_duration_hours`: Specifies the number of hours after reservation creation where instances using the reservation won't be scheduled for maintenance.\n\n        * `location_hint`: An opaque location hint used to place the allocation close to other resources. This field is for use by internal tools that use the public API.\n\n        * `maintenance_interval`: Specifies the frequency of planned maintenance events. The accepted values are: `PERIODIC`.\n        Possible values:\n          * AS_NEEDED\n          * PERIODIC\n          * RECURRENT\n\n      * `count`: Specifies the number of resources that are allocated.\n\n      * `in_use_count`: [Output Only] Indicates how many instances are in use.\n\n      * `assured_count`: [Output Only] Indicates how many instances are actually usable currently.\n\n      * `source_instance_template`: Specifies the instance template to create the reservation. If you use this field, you must exclude the instanceProperties field. This field is optional, and it can be a full or partial URL. For example, the following are all valid URLs to an instance template: - https://www.googleapis.com/compute/v1/projects/project /global/instanceTemplates/instanceTemplate - projects/project/global/instanceTemplates/instanceTemplate - global/instanceTemplates/instanceTemplate\n\n    * `aggregate_reservation`: This reservation type is specified by total resource amounts (e.g. total count of CPUs) and can account for multiple instance SKUs. In other words, one can create instances of varying shapes against this reservation.\n\n      * `vm_family`: The VM family that all instances scheduled against this reservation must belong to.\n      Possible values:\n        * VM_FAMILY_CLOUD_TPU_LITE_DEVICE_CT5L\n        * VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT5LP\n        * VM_FAMILY_CLOUD_TPU_POD_SLICE_CT4P\n\n      * `reserved_resources`: List of reserved resources (CPUs, memory, accelerators).\n\n        * `accelerator`:\n\n          * `accelerator_count`: Number of accelerators of specified type.\n\n          * `accelerator_type`: Full or partial URL to accelerator type. e.g. \"projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l\"\n\n      * `in_use_resources`: [Output only] List of resources currently in use.\n\n        * `accelerator`:\n\n          * `accelerator_count`: Number of accelerators of specified type.\n\n          * `accelerator_type`: Full or partial URL to accelerator type. e.g. \"projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l\"\n\n      * `workload_type`: The workload type of the instances that will target this reservation.\n      Possible values:\n        * BATCH\n        * SERVING\n        * UNSPECIFIED\n\n    * `commitment`: [Output Only] Full or partial URL to a parent commitment. This field displays for reservations that are tied to a commitment.\n\n    * `specific_reservation_required`: Indicates whether the reservation can be consumed by VMs with affinity for \"any\" reservation. If the field is set, then only VMs that target the reservation by name can consume from this reservation.\n\n    * `status`: [Output Only] The status of the reservation.\n    Possible values:\n      * CREATING\n      * DELETING\n      * INVALID\n      * READY\n      * UPDATING\n\n    * `share_settings`: The share setting for reservations and sole tenancy node groups.\n\n      * `share_type`: Type of sharing for this shared-reservation\n      Possible values:\n        * DIRECT_PROJECTS_UNDER_SPECIFIC_FOLDERS\n        * LOCAL\n        * ORGANIZATION\n        * SHARE_TYPE_UNSPECIFIED\n        * SPECIFIC_PROJECTS\n\n      * `projects`: A List of Project names to specify consumer projects for this shared-reservation. This is only valid when share_type's value is SPECIFIC_PROJECTS.\n\n      * `project_map`: A map of project id and project config. This is only valid when share_type's value is SPECIFIC_PROJECTS.\n\n        * `additional_properties`: Config for each project in the share settings.\n\n      * `folder_map`: A map of folder id and folder config to specify consumer projects for this shared-reservation. This is only valid when share_type's value is DIRECT_PROJECTS_UNDER_SPECIFIC_FOLDERS. Folder id should be a string of number, and without \"folders/\" prefix.\n\n        * `additional_properties`: Config for each folder in the share settings.\n\n    * `satisfies_pzs`: [Output Only] Reserved for future use.\n\n    * `resource_policies`: Resource policies to be added to this reservation. The key is defined by user, and the value is resource policy url. This is to define placement policy with reservation.\n\n      * `additional_properties`:\n\n    * `resource_status`: [Output Only] Contains output only fields.\n\n      * `specific_sku_allocation`: Contains Properties set for the reservation.\n\n        * `source_instance_template_id`: ID of the instance template used to populate reservation properties.\n\n    * `delete_at_time`: Absolute time in future when the reservation will be auto-deleted by Compute Engine. Timestamp is represented in RFC3339 text format.\n\n    * `delete_after_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n  * `category`: The category of the commitment. Category MACHINE specifies commitments composed of machine resources such as VCPU or MEMORY, listed in resources. Category LICENSE specifies commitments composed of software licenses, listed in licenseResources. Note that only MACHINE commitments should have a Type specified.\n  Possible values:\n    * CATEGORY_UNSPECIFIED\n    * LICENSE\n    * MACHINE\n\n  * `license_resource`: Commitment for a particular license resource.\n\n    * `license`: Any applicable license URI.\n\n    * `amount`: The number of licenses purchased.\n\n    * `cores_per_license`: Specifies the core range of the instance for which this license applies.\n\n  * `auto_renew`: Specifies whether to enable automatic renewal for the commitment. The default value is false if not specified. The field can be updated until the day of the commitment expiration at 12:00am PST. If the field is set to true, the commitment will be automatically renewed for either one or three years according to the terms of the existing commitment.\n\n  * `merge_source_commitments`: List of source commitments to be merged into a new commitment.\n\n  * `split_source_commitment`: Source commitment to be split into a new commitment.\n\n  * `resource_status`: [Output Only] Contains output only fields.\n\n    * `cancellation_information`:\n\n      * `cancellation_fee`: Represents an amount of money with its currency type.\n\n        * `currency_code`: The three-letter currency code defined in ISO 4217.\n\n        * `units`: The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n\n        * `nanos`: Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n\n      * `cancellation_fee_expiration_timestamp`: [Output Only] An optional, cancellation fee expiration time. RFC3339 text format.\n\n      * `cancellation_cap`: Represents an amount of money with its currency type.\n\n        * `currency_code`: The three-letter currency code defined in ISO 4217.\n\n        * `units`: The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n\n        * `nanos`: Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n\n      * `canceled_commitment`: Represents an amount of money with its currency type.\n\n        * `currency_code`: The three-letter currency code defined in ISO 4217.\n\n        * `units`: The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n\n        * `nanos`: Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n\n      * `canceled_commitment_last_updated_timestamp`: [Output Only] An optional last update time of canceled_commitment. RFC3339 text format.\n\n  * `existing_reservations`: Specifies the already existing reservations to attach to the Commitment. This field is optional, and it can be a full or partial URL. For example, the following are valid URLs to an reservation: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /reservations/reservation - projects/project/zones/zone/reservations/reservation\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_commitments.md",
    "content": "+++\ntitle = \"google_compute_region_commitments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_commitments\"\nidentifier = \"inspec/resources/gcp/google_compute_region_commitments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_commitments` InSpec audit resource to to test a Google Cloud RegionCommitment resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_commitments(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_commitments` resource:\n\nSee [google_compute_region_commitment](google_compute_region_commitment) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_commitment` kind\n  * `ids`: an array of `google_compute_region_commitment` id\n  * `creation_timestamps`: an array of `google_compute_region_commitment` creation_timestamp\n  * `names`: an array of `google_compute_region_commitment` name\n  * `descriptions`: an array of `google_compute_region_commitment` description\n  * `regions`: an array of `google_compute_region_commitment` region\n  * `self_links`: an array of `google_compute_region_commitment` self_link\n  * `self_link_with_ids`: an array of `google_compute_region_commitment` self_link_with_id\n  * `statuses`: an array of `google_compute_region_commitment` status\n  * `status_messages`: an array of `google_compute_region_commitment` status_message\n  * `plans`: an array of `google_compute_region_commitment` plan\n  * `start_timestamps`: an array of `google_compute_region_commitment` start_timestamp\n  * `end_timestamps`: an array of `google_compute_region_commitment` end_timestamp\n  * `resources`: an array of `google_compute_region_commitment` resources\n  * `types`: an array of `google_compute_region_commitment` type\n  * `reservations`: an array of `google_compute_region_commitment` reservations\n  * `categories`: an array of `google_compute_region_commitment` category\n  * `license_resources`: an array of `google_compute_region_commitment` license_resource\n  * `auto_renews`: an array of `google_compute_region_commitment` auto_renew\n  * `merge_source_commitments`: an array of `google_compute_region_commitment` merge_source_commitments\n  * `split_source_commitments`: an array of `google_compute_region_commitment` split_source_commitment\n  * `resource_statuses`: an array of `google_compute_region_commitment` resource_status\n  * `existing_reservations`: an array of `google_compute_region_commitment` existing_reservations\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_disk_type.md",
    "content": "+++\ntitle = \"google_compute_region_disk_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_disk_type\"\nidentifier = \"inspec/resources/gcp/google_compute_region_disk_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_disk_type` InSpec audit resource to to test a Google Cloud RegionDiskType resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_disk_type(disk_type: 'value_name', project: 'chef-gcp-inspec', region: 'value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('valid_disk_size') { should cmp 'value_validdisksize' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('default_disk_size_gb') { should cmp 'value_defaultdisksizegb' }\n\tits('region') { should cmp 'value_region' }\n\nend\n\ndescribe google_compute_region_disk_type(disk_type: 'value_name', project: 'chef-gcp-inspec', region: 'value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_disk_type` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#diskType for disk types.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: [Output Only] Name of the resource.\n\n  * `description`: [Output Only] An optional description of this resource.\n\n  * `valid_disk_size`: [Output Only] An optional textual description of the valid disk size, such as \"10GB-10TB\".\n\n  * `deprecated`: Deprecation status for a public resource.\n\n    * `state`: The deprecation state of this resource. This can be ACTIVE, DEPRECATED, OBSOLETE, or DELETED. Operations which communicate the end of life date for an image, can use ACTIVE. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * ACTIVE\n      * DELETED\n      * DEPRECATED\n      * OBSOLETE\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n  * `zone`: [Output Only] URL of the zone where the disk type resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `default_disk_size_gb`: [Output Only] Server-defined default disk size in GB.\n\n  * `region`: [Output Only] URL of the region where the disk type resides. Only applicable for regional resources. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_disk_types.md",
    "content": "+++\ntitle = \"google_compute_region_disk_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_disk_types\"\nidentifier = \"inspec/resources/gcp/google_compute_region_disk_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_disk_types` InSpec audit resource to to test a Google Cloud RegionDiskType resource.\n\n## Examples\n\n```ruby\n  describe google_compute_region_disk_types(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_disk_types` resource:\n\nSee [google_compute_region_disk_type](google_compute_region_disk_type) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_disk_type` kind\n  * `ids`: an array of `google_compute_region_disk_type` id\n  * `creation_timestamps`: an array of `google_compute_region_disk_type` creation_timestamp\n  * `names`: an array of `google_compute_region_disk_type` name\n  * `descriptions`: an array of `google_compute_region_disk_type` description\n  * `valid_disk_sizes`: an array of `google_compute_region_disk_type` valid_disk_size\n  * `deprecateds`: an array of `google_compute_region_disk_type` deprecated\n  * `zones`: an array of `google_compute_region_disk_type` zone\n  * `self_links`: an array of `google_compute_region_disk_type` self_link\n  * `default_disk_size_gbs`: an array of `google_compute_region_disk_type` default_disk_size_gb\n  * `regions`: an array of `google_compute_region_disk_type` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_health_check.md",
    "content": "+++\ntitle = \"google_compute_region_health_check resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_health_check\"\nidentifier = \"inspec/resources/gcp/google_compute_region_health_check resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_health_check` InSpec audit resource to to test a Google Cloud RegionHealthCheck resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_health_check(project: 'chef-gcp-inspec', region: '', name: '') do\n  it { should exist }\n  its('type') { should eq \"TCP\" }\nend\n\ndescribe google_compute_region_health_check(project: 'chef-gcp-inspec',  region: 'europe-west2', name: 'notthere') do\n  it { should_not exist }\nend\n\n```\n  ### Test that a GCP compute region exists\n```\n  describe google_compute_region_health_check(project: 'chef-inspec-gcp',  region: 'europe-west2', name: 'test1') do\n    it { should exist }\n  end\n```\n  ### Test that a GCP compute region is in the expected state\n```\n  describe google_compute_region_health_check(project: 'chef-inspec-gcp',  region: 'europe-west2', name: 'test1') do\n    its('status') { should eq 'UP' }\n  end\n```\n  ### Test a GCP compute region identifier\n```\n  describe google_compute_region_health_check(project: 'chef-inspec-gcp',  region: \"asia-east1\", name: 'test1') do\n    its('unhealthy_threshold') { should eq 2 }\n  end\n```\n  ### Check that a region is associated with the expected zone fully qualified name\n```\n  describe google_compute_region_health_check(project: 'chef-inspec-gcp',  region: \"asia-east1\", name: 'test1') do\n    its('healthy_threshold') { should eq 2 }\n  end\n```\n  ### Check that a region is associated with the expected zone short name\n```\n  describe google_compute_region_health_check(project: 'chef-inspec-gcp',  region: \"asia-east1\", name: 'test1') do\n    its('types') { should include \"TCP\" }\n  end\n```\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_health_check` resource:\n\n\n  * `check_interval_sec`: How often (in seconds) to send a health check. The default value is 5 seconds.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `healthy_threshold`: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `unhealthy_threshold`: A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.\n\n  * `timeout_sec`: How long (in seconds) to wait before claiming failure. The default value is 5 seconds.  It is invalid for timeoutSec to have greater value than checkIntervalSec.\n\n  * `type`: Specifies the type of the healthCheck, either TCP, SSL, HTTP or HTTPS. If not specified, the default is TCP. Exactly one of the protocol-specific health check field must be specified, which must match type field.\n  Possible values:\n    * TCP\n    * SSL\n    * HTTP\n    * HTTPS\n    * HTTP2\n\n  * `http_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTP health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTP health check request. The default value is 80.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTP health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `https_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTPS health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTPS health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTPS health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `tcp_health_check`: A nested object resource\n\n    * `request`: The application data to send once the TCP connection has been established (default value is empty). If both request and response are empty, the connection establishment alone will indicate health. The request data can only be ASCII.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the TCP health check request. The default value is 80.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, TCP health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `ssl_health_check`: A nested object resource\n\n    * `request`: The application data to send once the SSL connection has been established (default value is empty). If both request and response are empty, the connection establishment alone will indicate health. The request data can only be ASCII.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the SSL health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, SSL health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `http2_health_check`: A nested object resource\n\n    * `host`: The value of the host header in the HTTP2 health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used.\n\n    * `request_path`: The request path of the HTTP2 health check request. The default value is /.\n\n    * `response`: The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII.\n\n    * `port`: The TCP port number for the HTTP2 health check request. The default value is 443.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n    Possible values:\n      * NONE\n      * PROXY_V1\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, HTTP2 health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n  * `grpc_health_check`: A nested object resource\n\n    * `port`: The port number for the health check request. Must be specified if portName and portSpecification are not set or if port_specification is USE_FIXED_PORT. Valid values are 1 through 65535.\n\n    * `port_name`: Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence.\n\n    * `port_specification`: Specifies how port is selected for health checking, can be one of the following values:    * `USE_FIXED_PORT`: The port number in `port` is used for health checking.    * `USE_NAMED_PORT`: The `portName` is used for health checking.    * `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for each   network endpoint is used for health checking. For other backends, the   port or named port specified in the Backend Service is used for health   checking.  If not specified, gRPC health check follows behavior specified in `port` and `portName` fields.\n    Possible values:\n      * USE_FIXED_PORT\n      * USE_NAMED_PORT\n      * USE_SERVING_PORT\n\n    * `grpc_service_name`: The gRPC service name for the health check. The value of grpcServiceName has the following meanings by convention:  * Empty serviceName means the overall status of all services at the backend. * Non-empty serviceName means the health of that gRPC service, as defined by the owner of the service.  The grpcServiceName can only be ASCII.\n\n  * `log_config`: Configure logging on this health check.\n\n    * `enable`: Indicates whether or not to export logs. This is false by default, which means no health check logging will be done.\n\n  * `region`: The region where the regional health check resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_health_checks.md",
    "content": "+++\ntitle = \"google_compute_region_health_checks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_health_checks\"\nidentifier = \"inspec/resources/gcp/google_compute_region_health_checks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_health_checks` InSpec audit resource to to test a Google Cloud RegionHealthCheck resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_health_checks(project: 'chef-gcp-inspec', region: '') do\n  its('types') { should include \"TCP\" }\nend\n\n```\n  ### Use this InSpec resource to enumerate IDs then test in-depth using `google_compute_region`\n```\n  google_compute_region_health_checks(project: 'chef-inspec-gcp',  region: 'europe-west2').region_names.each do |region_name|\n    describe google_compute_region(project: 'chef-inspec-gcp',  region: region_name) do\n      it { should exist }\n    end\n  end\n```\n\n  ### Test that there are more than a specified number of regions available for the project\n```\n  describe google_compute_region_health_checks(project: 'chef-inspec-gcp',  region: 'europe-west2') do\n    its('unhealthy_thresholds') { should eq 2}\n  end\n```\n  ### Test that an expected region is available for the project\n```\n  describe google_compute_region_health_checks(project: 'chef-inspec-gcp',  region: 'europe-west2') do\n    its('healthy_thresholds') { should include 2 }\n  end\n```\n  ### Test whether any regions are in status \"DOWN\"\n```\n  describe google_compute_region_health_checks(project: 'chef-inspec-gcp',  region: 'europe-west2') do\n    its('check_interval_secs') { should_not include 5 }\n  end\n```\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_health_checks` resource:\n\nSee [google_compute_region_health_check](google_compute_region_health_check) for more detailed information.\n\n  * `check_interval_secs`: an array of `google_compute_region_health_check` check_interval_sec\n  * `creation_timestamps`: an array of `google_compute_region_health_check` creation_timestamp\n  * `descriptions`: an array of `google_compute_region_health_check` description\n  * `healthy_thresholds`: an array of `google_compute_region_health_check` healthy_threshold\n  * `ids`: an array of `google_compute_region_health_check` id\n  * `names`: an array of `google_compute_region_health_check` name\n  * `unhealthy_thresholds`: an array of `google_compute_region_health_check` unhealthy_threshold\n  * `timeout_secs`: an array of `google_compute_region_health_check` timeout_sec\n  * `types`: an array of `google_compute_region_health_check` type\n  * `http_health_checks`: an array of `google_compute_region_health_check` http_health_check\n  * `https_health_checks`: an array of `google_compute_region_health_check` https_health_check\n  * `tcp_health_checks`: an array of `google_compute_region_health_check` tcp_health_check\n  * `ssl_health_checks`: an array of `google_compute_region_health_check` ssl_health_check\n  * `http2_health_checks`: an array of `google_compute_region_health_check` http2_health_check\n  * `grpc_health_checks`: an array of `google_compute_region_health_check` grpc_health_check\n  * `log_configs`: an array of `google_compute_region_health_check` log_config\n  * `regions`: an array of `google_compute_region_health_check` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_instance_group.md",
    "content": "+++\ntitle = \"google_compute_region_instance_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_instance_group\"\nidentifier = \"inspec/resources/gcp/google_compute_region_instance_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_instance_group` InSpec audit resource to to test a Google Cloud RegionInstanceGroup resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_instance_group(project: 'chef-gcp-inspec', region: 'us-central1', name: 'instance-group-2') do\nit { should exist }\nits('name') { should eq 'instance-group-2' }\nits('size') { should eq '1' }\nits('named_ports.first.name') { should eq 'port' }\nits('named_ports.first.port') { should eq '80' }\nend\n\ndescribe google_compute_region_instance_group(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\nit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_instance_group` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `fingerprint`: The fingerprint of the named ports. The system uses this fingerprint to detect conflicts when multiple users change the named ports concurrently. base64-encoded string.\n\n  * `network`: The URL of the network to which all instances in the instance group belong. If your instance has multiple network interfaces, then the network and subnetwork fields only refer to the network and subnet used by your primary interface (nic0).\n\n  * `zone`: The URL of the zone where the instance group is located (for zonal resources).\n\n  * `size`: The total number of instances in the instance group.\n\n  * `region`:  The URL of the region where the instance group is located (for regional resources).\n\n  * `named_ports`: Assigns a name to a port number. For example: {name: \"http\", port: 80} This allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports. For example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}] Named ports apply to all instances in this instance group.\n\n    * `name`: The name for this named port. The name must be 1-63 characters long, and comply with RFC1035.\n\n    * `port`: The port number, which can be a value between 1 and 65535.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_instance_group_manager.md",
    "content": "+++\ntitle = \"google_compute_region_instance_group_manager resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_instance_group_manager\"\nidentifier = \"inspec/resources/gcp/google_compute_region_instance_group_manager resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_region_instance_group_manager` is used to test a Google RegionInstanceGroupManager resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_instance_group_manager(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-rigm') do\n  it { should exist }\n  its('base_instance_name') { should eq 'rigm1' }\n  its('target_size') { should eq '1' }\n  its('named_ports.first.name') { should eq 'https' }\n  its('named_ports.first.port') { should eq '8888' }\n  its('auto_healing_policies.first.initial_delay_sec') { should eq '300' }\nend\n\ndescribe google_compute_region_instance_group_manager(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute region instance group manager has the expected size\n\n    describe google_compute_region_instance_group_manager(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-test') do\n      its('target_size') { should eq 2 }\n    end\n\n### Test that a GCP compute region instance group manager has a port with supplied name and value\n\n    describe google_compute_region_instance_group_manager(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-test') do\n      its('named_ports') { should include \"http\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_instance_group_manager` resource:\n\n\n  * `base_instance_name`: The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.\n\n  * `creation_timestamp`: The creation timestamp for this managed instance group in RFC3339 text format.\n\n  * `current_actions`: The list of instance actions and the number of instances in this managed instance group that are scheduled for each of those actions.\n\n    * `abandoning`: The total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.\n\n    * `creating`: The number of instances in the managed instance group that are scheduled to be created or are currently being created. If the group fails to create any of these instances, it tries again until it creates the instance successfully.  If you have disabled creation retries, this field will not be populated; instead, the creatingWithoutRetries field will be populated.\n\n    * `creating_without_retries`: The number of instances that the managed instance group will attempt to create. The group attempts to create each instance only once. If the group fails to create any of these instances, it decreases the group's targetSize value accordingly.\n\n    * `deleting`: The number of instances in the managed instance group that are scheduled to be deleted or are currently being deleted.\n\n    * `none`: The number of instances in the managed instance group that are running and have no scheduled actions.\n\n    * `recreating`: The number of instances in the managed instance group that are scheduled to be recreated or are currently being being recreated. Recreating an instance deletes the existing root persistent disk and creates a new disk from the image that is defined in the instance template.\n\n    * `refreshing`: The number of instances in the managed instance group that are being reconfigured with properties that do not require a restart or a recreate action. For example, setting or removing target pools for the instance.\n\n    * `restarting`: The number of instances in the managed instance group that are scheduled to be restarted or are currently being restarted.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: A unique identifier for this resource\n\n  * `instance_group`: The instance group being managed\n\n  * `instance_template`: The instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.\n\n  * `name`: The name of the managed instance group. The name must be 1-63 characters long, and comply with RFC1035.\n\n  * `named_ports`: Named ports configured for the Instance Groups complementary to this Instance Group Manager.\n\n    * `name`: The name for this named port. The name must be 1-63 characters long, and comply with RFC1035.\n\n    * `port`: The port number, which can be a value between 1 and 65535.\n\n  * `target_pools`: TargetPool resources to which instances in the instanceGroup field are added. The target pools automatically apply to all of the instances in the managed instance group.\n\n  * `target_size`: The target number of running instances for this managed instance group. Deleting or abandoning instances reduces this number. Resizing the group changes this number.\n\n  * `auto_healing_policies`: The autohealing policy for this managed instance group\n\n    * `health_check`: The URL for the health check that signals autohealing.\n\n    * `initial_delay_sec`: The number of seconds that the managed instance group waits before it applies autohealing policies to new instances or recently recreated instances\n\n  * `region`: The region the managed instance group resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_instance_group_managers.md",
    "content": "+++\ntitle = \"google_compute_region_instance_group_managers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_instance_group_managers\"\nidentifier = \"inspec/resources/gcp/google_compute_region_instance_group_managers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_region_instance_group_managers` is used to test a Google RegionInstanceGroupManager resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_instance_group_managers(project: 'chef-gcp-inspec', region: 'europe-west2') do\n\tits('instance_group_manager_names') { should include 'inspec-rigm' }\n  its('base_instance_names') { should include 'rigm1' }\nend\n```\n\n### Test that there are no more than a specified number of instance groups available for the project\n\n    describe google_compute_region_instance_group_managers(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected instance_group is available for the project\n\n    describe google_compute_region_instance_group_managers(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('instance_group_names') { should include \"my-instance-group-name\" }\n    end\n\n### Test that a subset of all instance_groups matching \"mig*\" have size greater than zero\n\n    google_compute_region_instance_group_managers(project: 'chef-inspec-gcp', region: 'europe-west2').where(instance_group_name: /^mig/).instance_group_names.each do |instance_group_name|\n      describe google_compute_instance_group(project: 'chef-inspec-gcp', region: 'europe-west2', name: instance_group_name) do\n        it { should exist }\n        its('target_size') { should be > 0 }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_instance_group_managers` resource:\n\nSee [google_compute_region_instance_group_manager](google_compute_region_instance_group_manager) for more detailed information.\n\n  * `base_instance_names`: an array of `google_compute_region_instance_group_manager` base_instance_name\n  * `creation_timestamps`: an array of `google_compute_region_instance_group_manager` creation_timestamp\n  * `current_actions`: an array of `google_compute_region_instance_group_manager` current_actions\n  * `descriptions`: an array of `google_compute_region_instance_group_manager` description\n  * `instance_group_manager_ids`: an array of `google_compute_region_instance_group_manager` id\n  * `instance_groups`: an array of `google_compute_region_instance_group_manager` instance_group\n  * `instance_templates`: an array of `google_compute_region_instance_group_manager` instance_template\n  * `instance_group_manager_names`: an array of `google_compute_region_instance_group_manager` name\n  * `named_ports`: an array of `google_compute_region_instance_group_manager` named_ports\n  * `target_pools`: an array of `google_compute_region_instance_group_manager` target_pools\n  * `target_sizes`: an array of `google_compute_region_instance_group_manager` target_size\n  * `auto_healing_policies`: an array of `google_compute_region_instance_group_manager` auto_healing_policies\n  * `regions`: an array of `google_compute_region_instance_group_manager` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_instance_groups.md",
    "content": "+++\ntitle = \"google_compute_region_instance_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_instance_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_region_instance_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_instance_groups` InSpec audit resource to to test a Google Cloud RegionInstanceGroup resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_instance_groups(project: 'chef-gcp-inspec', region: 'us-central1') do\n\tit { should exist }\n\tits('names') { should include 'instance-group-2' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_instance_groups` resource:\n\nSee [google_compute_region_instance_group](google_compute_region_instance_group) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_region_instance_group` creation_timestamp\n  * `descriptions`: an array of `google_compute_region_instance_group` description\n  * `ids`: an array of `google_compute_region_instance_group` id\n  * `names`: an array of `google_compute_region_instance_group` name\n  * `fingerprints`: an array of `google_compute_region_instance_group` fingerprint\n  * `networks`: an array of `google_compute_region_instance_group` network\n  * `zones`: an array of `google_compute_region_instance_group` zone\n  * `sizes`: an array of `google_compute_region_instance_group` size\n  * `regions`: an array of `google_compute_region_instance_group` region\n  * `named_ports`: an array of `google_compute_region_instance_group` named_ports\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_network_endpoint_group.md",
    "content": "+++\ntitle = \"google_compute_region_network_endpoint_group resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_network_endpoint_group\"\nidentifier = \"inspec/resources/gcp/google_compute_region_network_endpoint_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_network_endpoint_group` InSpec audit resource to to test a Google Cloud RegionNetworkEndpointGroup resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_network_endpoint_group(network_endpoint_group: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('network_endpoint_type') { should cmp 'value_networkendpointtype' }\n\tits('region') { should cmp 'value_region' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('network') { should cmp 'value_network' }\n\tits('subnetwork') { should cmp 'value_subnetwork' }\n\tits('psc_target_service') { should cmp 'value_psctargetservice' }\n\nend\n\ndescribe google_compute_region_network_endpoint_group(network_endpoint_group: ' ', project: 'chef-gcp-inspec', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_network_endpoint_group` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#networkEndpointGroup for network endpoint group.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `network_endpoint_type`: Type of network endpoints in this network endpoint group. Can be one of GCE_VM_IP, GCE_VM_IP_PORT, NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT, INTERNET_IP_PORT, SERVERLESS, PRIVATE_SERVICE_CONNECT.\n  Possible values:\n    * GCE_VM_IP\n    * GCE_VM_IP_PORT\n    * INTERNET_FQDN_PORT\n    * INTERNET_IP_PORT\n    * NON_GCP_PRIVATE_IP_PORT\n    * PRIVATE_SERVICE_CONNECT\n    * SERVERLESS\n\n  * `size`: [Output only] Number of network endpoints in the network endpoint group.\n\n  * `region`: [Output Only] The URL of the region where the network endpoint group is located.\n\n  * `zone`: [Output Only] The URL of the zone where the network endpoint group is located.\n\n  * `network`: The URL of the network to which all network endpoints in the NEG belong. Uses \"default\" project network if unspecified.\n\n  * `subnetwork`: Optional URL of the subnetwork to which all network endpoints in the NEG belong.\n\n  * `default_port`: The default port used if the port number is not specified in the network endpoint.\n\n  * `annotations`: Metadata defined as annotations on the network endpoint group.\n\n    * `additional_properties`:\n\n  * `cloud_run`: Configuration for a Cloud Run network endpoint group (NEG). The service must be provided explicitly or in the URL mask. The tag is optional, may be provided explicitly or in the URL mask. Note: Cloud Run service must be in the same project and located in the same region as the Serverless NEG.\n\n    * `service`: Cloud Run service is the main resource of Cloud Run. The service must be 1-63 characters long, and comply with RFC1035. Example value: \"run-service\".\n\n    * `tag`: Optional Cloud Run tag represents the \"named-revision\" to provide additional fine-grained traffic routing information. The tag must be 1-63 characters long, and comply with RFC1035. Example value: \"revision-0010\".\n\n    * `url_mask`: A template to parse <service> and <tag> fields from a request URL. URL mask allows for routing to multiple Run services without having to create multiple network endpoint groups and backend services. For example, request URLs \"foo1.domain.com/bar1\" and \"foo1.domain.com/bar2\" can be backed by the same Serverless Network Endpoint Group (NEG) with URL mask \"<tag>.domain.com/<service>\". The URL mask will parse them to { service=\"bar1\", tag=\"foo1\" } and { service=\"bar2\", tag=\"foo2\" } respectively.\n\n  * `app_engine`: Configuration for an App Engine network endpoint group (NEG). The service is optional, may be provided explicitly or in the URL mask. The version is optional and can only be provided explicitly or in the URL mask when service is present. Note: App Engine service must be in the same project and located in the same region as the Serverless NEG.\n\n    * `service`: Optional serving service. The service name is case-sensitive and must be 1-63 characters long. Example value: \"default\", \"my-service\".\n\n    * `version`: Optional serving version. The version name is case-sensitive and must be 1-100 characters long. Example value: \"v1\", \"v2\".\n\n    * `url_mask`: A template to parse service and version fields from a request URL. URL mask allows for routing to multiple App Engine services without having to create multiple Network Endpoint Groups and backend services. For example, the request URLs \"foo1-dot-appname.appspot.com/v1\" and \"foo1-dot-appname.appspot.com/v2\" can be backed by the same Serverless NEG with URL mask \"<service>-dot-appname.appspot.com/<version>\". The URL mask will parse them to { service = \"foo1\", version = \"v1\" } and { service = \"foo1\", version = \"v2\" } respectively.\n\n  * `cloud_function`: Configuration for a Cloud Function network endpoint group (NEG). The function must be provided explicitly or in the URL mask. Note: Cloud Function must be in the same project and located in the same region as the Serverless NEG.\n\n    * `function`: A user-defined name of the Cloud Function. The function name is case-sensitive and must be 1-63 characters long. Example value: \"func1\".\n\n    * `url_mask`: A template to parse function field from a request URL. URL mask allows for routing to multiple Cloud Functions without having to create multiple Network Endpoint Groups and backend services. For example, request URLs \" mydomain.com/function1\" and \"mydomain.com/function2\" can be backed by the same Serverless NEG with URL mask \"/<function>\". The URL mask will parse them to { function = \"function1\" } and { function = \"function2\" } respectively.\n\n  * `psc_target_service`: The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. An example value is: \"asia-northeast3-cloudkms.googleapis.com\"\n\n  * `psc_data`: All data that is specifically relevant to only network endpoint groups of type PRIVATE_SERVICE_CONNECT.\n\n    * `consumer_psc_address`: [Output Only] Address allocated from given subnetwork for PSC. This IP address acts as a VIP for a PSC NEG, allowing it to act as an endpoint in L7 PSC-XLB.\n\n    * `psc_connection_id`: [Output Only] The PSC connection id of the PSC Network Endpoint Group Consumer.\n\n    * `psc_connection_status`: [Output Only] The connection status of the PSC Forwarding Rule.\n    Possible values:\n      * ACCEPTED\n      * CLOSED\n      * NEEDS_ATTENTION\n      * PENDING\n      * REJECTED\n      * STATUS_UNSPECIFIED\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_network_endpoint_groups.md",
    "content": "+++\ntitle = \"google_compute_region_network_endpoint_groups resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_network_endpoint_groups\"\nidentifier = \"inspec/resources/gcp/google_compute_region_network_endpoint_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_network_endpoint_groups` InSpec audit resource to to test a Google Cloud RegionNetworkEndpointGroup resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_network_endpoint_groups(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_network_endpoint_groups` resource:\n\nSee [google_compute_region_network_endpoint_group](google_compute_region_network_endpoint_group) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_network_endpoint_group` kind\n  * `ids`: an array of `google_compute_region_network_endpoint_group` id\n  * `creation_timestamps`: an array of `google_compute_region_network_endpoint_group` creation_timestamp\n  * `self_links`: an array of `google_compute_region_network_endpoint_group` self_link\n  * `names`: an array of `google_compute_region_network_endpoint_group` name\n  * `descriptions`: an array of `google_compute_region_network_endpoint_group` description\n  * `network_endpoint_types`: an array of `google_compute_region_network_endpoint_group` network_endpoint_type\n  * `sizes`: an array of `google_compute_region_network_endpoint_group` size\n  * `regions`: an array of `google_compute_region_network_endpoint_group` region\n  * `zones`: an array of `google_compute_region_network_endpoint_group` zone\n  * `networks`: an array of `google_compute_region_network_endpoint_group` network\n  * `subnetworks`: an array of `google_compute_region_network_endpoint_group` subnetwork\n  * `default_ports`: an array of `google_compute_region_network_endpoint_group` default_port\n  * `annotations`: an array of `google_compute_region_network_endpoint_group` annotations\n  * `cloud_runs`: an array of `google_compute_region_network_endpoint_group` cloud_run\n  * `app_engines`: an array of `google_compute_region_network_endpoint_group` app_engine\n  * `cloud_functions`: an array of `google_compute_region_network_endpoint_group` cloud_function\n  * `psc_target_services`: an array of `google_compute_region_network_endpoint_group` psc_target_service\n  * `psc_data`: an array of `google_compute_region_network_endpoint_group` psc_data\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_operation.md",
    "content": "+++\ntitle = \"google_compute_region_operation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_operation\"\nidentifier = \"inspec/resources/gcp/google_compute_region_operation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_operation` InSpec audit resource to to test a Google Cloud RegionOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_operation(project: 'chef-gcp-inspec', region: '', name: 'operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5') do\nit { should exist }\nits('name') { should eq 'operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5' }\nits('status') { should eq '' }\nits('progress') { should eq '100' }\nend\n\ndescribe google_compute_region_operation(project: 'chef-gcp-inspec', region: '', name: 'nonexistent') do\nit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_operation` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `target_id`: The unique target ID, which identifies a specific incarnation of the target resource.\n\n  * `status`: The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.\n  Possible values:\n    * PENDING\n    * RUNNING\n    * DONE\n\n  * `user`: User who requested the operation, for example: user@example.com.\n\n  * `insert_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `start_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `end_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `progress`: An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.\n\n  * `zone`: The URL of the zone where the instance group is located (for zonal resources).\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_operations.md",
    "content": "+++\ntitle = \"google_compute_region_operations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_operations\"\nidentifier = \"inspec/resources/gcp/google_compute_region_operations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_operations` InSpec audit resource to to test a Google Cloud RegionOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_operations(project: 'chef-gcp-inspec', region: '') do\n\tit { should exist }\n\tits('names') { should include 'operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5' }\n\tits('progress') { should include '100' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_operations` resource:\n\nSee [google_compute_region_operation](google_compute_region_operation) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_region_operation` creation_timestamp\n  * `descriptions`: an array of `google_compute_region_operation` description\n  * `ids`: an array of `google_compute_region_operation` id\n  * `names`: an array of `google_compute_region_operation` name\n  * `target_ids`: an array of `google_compute_region_operation` target_id\n  * `statuses`: an array of `google_compute_region_operation` status\n  * `users`: an array of `google_compute_region_operation` user\n  * `insert_times`: an array of `google_compute_region_operation` insert_time\n  * `start_times`: an array of `google_compute_region_operation` start_time\n  * `end_times`: an array of `google_compute_region_operation` end_time\n  * `progresses`: an array of `google_compute_region_operation` progress\n  * `zones`: an array of `google_compute_region_operation` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_security_policies.md",
    "content": "+++\ntitle = \"google_compute_region_security_policies resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_compute_region_security_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_region_security_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_security_policies` InSpec audit resource to test the properties of a Google Cloud RegionSecurityPolicy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_security_policies(project: 'chef-gcp-inspec', region: ' ') do\n    it { should exist }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_compute_region_security_policies` resource:\n\nSee [google_compute_region_security_policy](google_compute_region_security_policy) for more detailed information.\n\n* `user_defined_fields`: an array of `google_compute_region_security_policy` user_defined_fields\n* `kinds`: an array of `google_compute_region_security_policy` kind\n* `ids`: an array of `google_compute_region_security_policy` id\n* `creation_timestamps`: an array of `google_compute_region_security_policy` creation_timestamp\n* `names`: an array of `google_compute_region_security_policy` name\n* `descriptions`: an array of `google_compute_region_security_policy` description\n* `rules`: an array of `google_compute_region_security_policy` rules\n* `cloud_armor_configs`: an array of `google_compute_region_security_policy` cloud_armor_config\n* `adaptive_protection_configs`: an array of `google_compute_region_security_policy` adaptive_protection_config\n* `ddos_protection_configs`: an array of `google_compute_region_security_policy` ddos_protection_config\n* `advanced_options_configs`: an array of `google_compute_region_security_policy` advanced_options_config\n* `recaptcha_options_configs`: an array of `google_compute_region_security_policy` recaptcha_options_config\n* `fingerprints`: an array of `google_compute_region_security_policy` fingerprint\n* `self_links`: an array of `google_compute_region_security_policy` self_link\n* `self_link_with_ids`: an array of `google_compute_region_security_policy` self_link_with_id\n* `types`: an array of `google_compute_region_security_policy` type\n* `associations`: an array of `google_compute_region_security_policy` associations\n* `labels`: an array of `google_compute_region_security_policy` labels\n* `label_fingerprints`: an array of `google_compute_region_security_policy` label_fingerprint\n* `rule_tuple_counts`: an array of `google_compute_region_security_policy` rule_tuple_count\n* `display_names`: an array of `google_compute_region_security_policy` display_name\n* `parents`: an array of `google_compute_region_security_policy` parent\n* `regions`: an array of `google_compute_region_security_policy` region\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_security_policies` resource:\n\nSee [google_compute_region_security_policy](google_compute_region_security_policy) for more detailed information.\n\n* `user_defined_fields`: an array of `google_compute_region_security_policy` user_defined_fields\n* `kinds`: an array of `google_compute_region_security_policy` kind\n* `ids`: an array of `google_compute_region_security_policy` id\n* `creation_timestamps`: an array of `google_compute_region_security_policy` creation_timestamp\n* `names`: an array of `google_compute_region_security_policy` name\n* `descriptions`: an array of `google_compute_region_security_policy` description\n* `rules`: an array of `google_compute_region_security_policy` rules\n* `cloud_armor_configs`: an array of `google_compute_region_security_policy` cloud_armor_config\n* `adaptive_protection_configs`: an array of `google_compute_region_security_policy` adaptive_protection_config\n* `ddos_protection_configs`: an array of `google_compute_region_security_policy` ddos_protection_config\n* `advanced_options_configs`: an array of `google_compute_region_security_policy` advanced_options_config\n* `recaptcha_options_configs`: an array of `google_compute_region_security_policy` recaptcha_options_config\n* `fingerprints`: an array of `google_compute_region_security_policy` fingerprint\n* `self_links`: an array of `google_compute_region_security_policy` self_link\n* `self_link_with_ids`: an array of `google_compute_region_security_policy` self_link_with_id\n* `types`: an array of `google_compute_region_security_policy` type\n* `associations`: an array of `google_compute_region_security_policy` associations\n* `labels`: an array of `google_compute_region_security_policy` labels\n* `label_fingerprints`: an array of `google_compute_region_security_policy` label_fingerprint\n* `rule_tuple_counts`: an array of `google_compute_region_security_policy` rule_tuple_count\n* `display_names`: an array of `google_compute_region_security_policy` display_name\n* `parents`: an array of `google_compute_region_security_policy` parent\n* `regions`: an array of `google_compute_region_security_policy` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_security_policy.md",
    "content": "+++\ntitle = \"google_compute_region_security_policy resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_compute_region_security_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_region_security_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_security_policy` InSpec audit resource to test the properties of a Google Cloud RegionSecurityPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_security_policy(project: 'chef-gcp-inspec', region: ' ', securityPolicy: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp '' }\n\tits('id') { should cmp '' }\n\tits('creation_timestamp') { should cmp '' }\n\tits('name') { should cmp '' }\n\tits('description') { should cmp '' }\n\tits('fingerprint') { should cmp '' }\n\tits('self_link') { should cmp '' }\n\tits('self_link_with_id') { should cmp '' }\n\tits('type') { should cmp '' }\n\tits('label_fingerprint') { should cmp '' }\n\tits('display_name') { should cmp '' }\n\tits('parent') { should cmp '' }\n\tits('region') { should cmp '' }\n\nend\n\ndescribe google_compute_region_security_policy(project: 'chef-gcp-inspec', region: ' ', securityPolicy: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_compute_region_security_policy` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_security_policy` resource:\n\n\n  * `user_defined_fields`: Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A user-defined field consists of up to 4 bytes extracted from a fixed offset in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an optional mask to select certain bits. Rules may then specify matching values for these fields. Example: userDefinedFields: - name: \"ipv4_fragment_offset\" base: IPV4 offset: 6 size: 2 mask: \"0x1fff\"\n\n    * `name`: The name of this field. Must be unique within the policy.\n\n    * `base`: The base relative to which 'offset' is measured. Possible values are: - IPV4: Points to the beginning of the IPv4 header. - IPV6: Points to the beginning of the IPv6 header. - TCP: Points to the beginning of the TCP header, skipping over any IPv4 options or IPv6 extension headers. Not present for non-first fragments. - UDP: Points to the beginning of the UDP header, skipping over any IPv4 options or IPv6 extension headers. Not present for non-first fragments. required\n    Possible values:\n      * IPV4\n      * IPV6\n      * TCP\n      * UDP\n\n    * `offset`: Offset of the first byte of the field (in network byte order) relative to 'base'.\n\n    * `size`: Size of the field in bytes. Valid values: 1-4.\n\n    * `mask`: If specified, apply this mask (bitwise AND) to the field to ignore bits before matching. Encoded as a hexadecimal number (starting with \"0x\"). The last byte of the field (in network byte order) corresponds to the least significant byte of the mask.\n\n  * `kind`: [Output only] Type of the resource. Always compute#securityPolicyfor security policies\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `rules`: A list of rules that belong to this policy. There must always be a default rule which is a rule with priority 2147483647 and match all condition (for the match condition this means match \"*\" for srcIpRanges and for the networkMatch condition every field must be either match \"*\" or not set). If no rules are provided when creating a security policy, a default rule with action \"allow\" will be added.\n\n    * `kind`: [Output only] Type of the resource. Always compute#securityPolicyRule for security policy rules\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `priority`: An integer indicating the priority of a rule in the list. The priority must be a positive value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest priority.\n\n    * `match`: Represents a match condition that incoming traffic is evaluated against. Exactly one field must be specified.\n\n      * `expr`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n      * `expr_options`: \n\n        * `recaptcha_options`: \n\n          * `action_token_site_keys`: A list of site keys to be used during the validation of reCAPTCHA action-tokens. The provided site keys need to be created from reCAPTCHA API under the same project where the security policy is created.\n\n          * `session_token_site_keys`: A list of site keys to be used during the validation of reCAPTCHA session-tokens. The provided site keys need to be created from reCAPTCHA API under the same project where the security policy is created.\n\n      * `versioned_expr`: Preconfigured versioned expression. If this field is specified, config must also be specified. Available preconfigured expressions along with their requirements are: SRC_IPS_V1 - must specify the corresponding src_ip_range field in config.\n      Possible values:\n        * FIREWALL\n        * SRC_IPS_V1\n\n      * `config`: \n\n        * `src_ip_ranges`: CIDR IP address range. Maximum number of src_ip_ranges allowed is 10.\n\n        * `dest_ip_ranges`: CIDR IP address range. This field may only be specified when versioned_expr is set to FIREWALL.\n\n        * `dest_ports`: Pairs of IP protocols and ports that the rule should match. This field may only be specified when versioned_expr is set to FIREWALL.\n\n          * `ip_protocol`: The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, ipip, sctp), or the IP protocol number.\n\n          * `ports`: An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port. Example inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"]. This field may only be specified when versioned_expr is set to FIREWALL.\n\n        * `layer4_configs`: Pairs of IP protocols and ports that the rule should match. This field may only be specified when versioned_expr is set to FIREWALL.\n\n          * `ip_protocol`: The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, ipip, sctp), or the IP protocol number.\n\n          * `ports`: An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port. Example inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"]. This field may only be specified when versioned_expr is set to FIREWALL.\n\n    * `network_match`: Represents a match condition that incoming network traffic is evaluated against.\n\n      * `user_defined_fields`: User-defined fields. Each element names a defined field and lists the matching values for that field.\n\n        * `name`: Name of the user-defined field, as given in the definition.\n\n        * `values`: Matching values of the field. Each element can be a 32-bit unsigned decimal or hexadecimal (starting with \"0x\") number (e.g. \"64\") or range (e.g. \"0x400-0x7ff\").\n\n      * `src_ip_ranges`: Source IPv4/IPv6 addresses or CIDR prefixes, in standard text format.\n\n      * `dest_ip_ranges`: Destination IPv4/IPv6 addresses or CIDR prefixes, in standard text format.\n\n      * `ip_protocols`: IPv4 protocol / IPv6 next header (after extension headers). Each element can be an 8-bit unsigned decimal number (e.g. \"6\"), range (e.g. \"253-254\"), or one of the following protocol names: \"tcp\", \"udp\", \"icmp\", \"esp\", \"ah\", \"ipip\", or \"sctp\".\n\n      * `src_ports`: Source port numbers for TCP/UDP/SCTP. Each element can be a 16-bit unsigned decimal number (e.g. \"80\") or range (e.g. \"0-1023\").\n\n      * `dest_ports`: Destination port numbers for TCP/UDP/SCTP. Each element can be a 16-bit unsigned decimal number (e.g. \"80\") or range (e.g. \"0-1023\").\n\n      * `src_region_codes`: Two-letter ISO 3166-1 alpha-2 country code associated with the source IP address.\n\n      * `src_asns`: BGP Autonomous System Number associated with the source IP address.\n\n    * `action`: The Action to perform when the rule is matched. The following are the valid actions: - allow: allow access to target. - deny(STATUS): deny access to target, returns the HTTP response code specified. Valid values for `STATUS` are 403, 404, and 502. - rate_based_ban: limit client traffic to the configured threshold and ban the client if the traffic exceeds the threshold. Configure parameters for this action in RateLimitOptions. Requires rate_limit_options to be set. - redirect: redirect to a different target. This can either be an internal reCAPTCHA redirect, or an external URL-based redirect via a 302 response. Parameters for this action can be configured via redirectOptions. This action is only supported in Global Security Policies of type CLOUD_ARMOR. - throttle: limit client traffic to the configured threshold. Configure parameters for this action in rateLimitOptions. Requires rate_limit_options to be set for this. \n\n    * `preview`: If set to true, the specified action is not enforced.\n\n    * `direction`: The direction in which this rule applies. This field may only be specified when versioned_expr is set to FIREWALL.\n    Possible values:\n      * EGRESS\n      * INGRESS\n\n    * `target_resources`: A list of network resource URLs to which this rule applies. This field allows you to control which network's VMs get this rule. If this field is left blank, all VMs within the organization will receive the rule. This field may only be specified when versioned_expr is set to FIREWALL.\n\n    * `enable_logging`: Denotes whether to enable logging for a particular rule. If logging is enabled, logs will be exported to the configured export destination in Stackdriver. Logs may be exported to BigQuery or Pub/Sub. Note: you cannot enable logging on \"goto_next\" rules. This field may only be specified when the versioned_expr is set to FIREWALL.\n\n    * `rule_tuple_count`: [Output Only] Calculation of the complexity of a single firewall security policy rule.\n\n    * `rate_limit_options`: \n\n      * `rate_limit_threshold`: \n\n        * `count`: Number of HTTP(S) requests for calculating the threshold.\n\n        * `interval_sec`: Interval over which the threshold is computed.\n\n      * `conform_action`: Action to take for requests that are under the configured rate limit threshold. Valid option is \"allow\" only.\n\n      * `exceed_action`: Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are `deny(STATUS)`, where valid values for `STATUS` are 403, 404, 429, and 502, and `redirect`, where the redirect parameters come from `exceedRedirectOptions` below. The `redirect` action is only supported in Global Security Policies of type CLOUD_ARMOR.\n\n      * `exceed_redirect_options`: \n\n        * `type`: Type of the redirect action.\n        Possible values:\n          * EXTERNAL_302\n          * GOOGLE_RECAPTCHA\n\n        * `target`: Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA.\n\n      * `exceed_action_rpc_status`: Simplified google.rpc.Status type (omitting details).\n\n        * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n        * `message`: A developer-facing error message, which should be in English.\n\n      * `enforce_on_key`: Determines the key to enforce the rate_limit_threshold on. Possible values are: - ALL: A single rate limit threshold is applied to all the requests matching this rule. This is the default value if \"enforceOnKey\" is not configured. - IP: The source IP address of the request is the key. Each IP has this limit enforced separately. - HTTP_HEADER: The value of the HTTP header whose name is configured under \"enforceOnKeyName\". The key value is truncated to the first 128 bytes of the header value. If no such header is present in the request, the key type defaults to ALL. - XFF_IP: The first IP address (i.e. the originating client IP address) specified in the list of IPs under X-Forwarded-For HTTP header. If no such header is present or the value is not a valid IP, the key defaults to the source IP address of the request i.e. key type IP. - HTTP_COOKIE: The value of the HTTP cookie whose name is configured under \"enforceOnKeyName\". The key value is truncated to the first 128 bytes of the cookie value. If no such cookie is present in the request, the key type defaults to ALL. - HTTP_PATH: The URL path of the HTTP request. The key value is truncated to the first 128 bytes. - SNI: Server name indication in the TLS session of the HTTPS request. The key value is truncated to the first 128 bytes. The key type defaults to ALL on a HTTP session. - REGION_CODE: The country/region from which the request originates. - TLS_JA3_FINGERPRINT: JA3 TLS/SSL fingerprint if the client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the key type defaults to ALL. - USER_IP: The IP address of the originating client, which is resolved based on \"userIpRequestHeaders\" configured with the security policy. If there is no \"userIpRequestHeaders\" configuration or an IP address cannot be resolved from it, the key type defaults to IP. \n      Possible values:\n        * ALL\n        * ALL_IPS\n        * HTTP_COOKIE\n        * HTTP_HEADER\n        * HTTP_PATH\n        * IP\n        * REGION_CODE\n        * SNI\n        * TLS_JA3_FINGERPRINT\n        * USER_IP\n        * XFF_IP\n\n      * `enforce_on_key_name`: Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value.\n\n      * `enforce_on_key_configs`: If specified, any combination of values of enforce_on_key_type/enforce_on_key_name is treated as the key on which ratelimit threshold/action is enforced. You can specify up to 3 enforce_on_key_configs. If enforce_on_key_configs is specified, enforce_on_key must not be specified.\n\n        * `enforce_on_key_type`: Determines the key to enforce the rate_limit_threshold on. Possible values are: - ALL: A single rate limit threshold is applied to all the requests matching this rule. This is the default value if \"enforceOnKeyConfigs\" is not configured. - IP: The source IP address of the request is the key. Each IP has this limit enforced separately. - HTTP_HEADER: The value of the HTTP header whose name is configured under \"enforceOnKeyName\". The key value is truncated to the first 128 bytes of the header value. If no such header is present in the request, the key type defaults to ALL. - XFF_IP: The first IP address (i.e. the originating client IP address) specified in the list of IPs under X-Forwarded-For HTTP header. If no such header is present or the value is not a valid IP, the key defaults to the source IP address of the request i.e. key type IP. - HTTP_COOKIE: The value of the HTTP cookie whose name is configured under \"enforceOnKeyName\". The key value is truncated to the first 128 bytes of the cookie value. If no such cookie is present in the request, the key type defaults to ALL. - HTTP_PATH: The URL path of the HTTP request. The key value is truncated to the first 128 bytes. - SNI: Server name indication in the TLS session of the HTTPS request. The key value is truncated to the first 128 bytes. The key type defaults to ALL on a HTTP session. - REGION_CODE: The country/region from which the request originates. - TLS_JA3_FINGERPRINT: JA3 TLS/SSL fingerprint if the client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the key type defaults to ALL. - USER_IP: The IP address of the originating client, which is resolved based on \"userIpRequestHeaders\" configured with the security policy. If there is no \"userIpRequestHeaders\" configuration or an IP address cannot be resolved from it, the key type defaults to IP. \n        Possible values:\n          * ALL\n          * ALL_IPS\n          * HTTP_COOKIE\n          * HTTP_HEADER\n          * HTTP_PATH\n          * IP\n          * REGION_CODE\n          * SNI\n          * TLS_JA3_FINGERPRINT\n          * USER_IP\n          * XFF_IP\n\n        * `enforce_on_key_name`: Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value.\n\n      * `ban_threshold`: \n\n        * `count`: Number of HTTP(S) requests for calculating the threshold.\n\n        * `interval_sec`: Interval over which the threshold is computed.\n\n      * `ban_duration_sec`: Can only be specified if the action for the rule is \"rate_based_ban\". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold.\n\n    * `target_service_accounts`: A list of service accounts indicating the sets of instances that are applied with this rule.\n\n    * `rule_number`: Identifier for the rule. This is only unique within the given security policy. This can only be set during rule creation, if rule number is not specified it will be generated by the server.\n\n    * `redirect_target`: This must be specified for redirect actions. Cannot be specified for any other actions.\n\n    * `header_action`: \n\n      * `request_headers_to_adds`: The list of request headers to add or overwrite if they're already present.\n\n        * `header_name`: The name of the header to set.\n\n        * `header_value`: The value to set the named header to.\n\n    * `redirect_options`: \n\n      * `type`: Type of the redirect action.\n      Possible values:\n        * EXTERNAL_302\n        * GOOGLE_RECAPTCHA\n\n      * `target`: Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA.\n\n    * `rule_managed_protection_tier`: [Output Only] The minimum managed protection tier required for this rule. [Deprecated] Use requiredManagedProtectionTiers instead.\n    Possible values:\n      * CAMP_PLUS_ANNUAL\n      * CAMP_PLUS_PAYGO\n      * CA_STANDARD\n\n    * `preconfigured_waf_config`: \n\n      * `exclusions`: A list of exclusions to apply during preconfigured WAF evaluation.\n\n        * `target_rule_set`: Target WAF rule set to apply the preconfigured WAF exclusion.\n\n        * `target_rule_ids`: A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set.\n\n        * `request_headers_to_exclude`: A list of request header names whose value will be excluded from inspection during preconfigured WAF evaluation.\n\n          * `val`: The value of the field.\n\n          * `op`: The match operator for the field.\n          Possible values:\n            * CONTAINS\n            * ENDS_WITH\n            * EQUALS\n            * EQUALS_ANY\n            * STARTS_WITH\n\n        * `request_cookies_to_exclude`: A list of request cookie names whose value will be excluded from inspection during preconfigured WAF evaluation.\n\n          * `val`: The value of the field.\n\n          * `op`: The match operator for the field.\n          Possible values:\n            * CONTAINS\n            * ENDS_WITH\n            * EQUALS\n            * EQUALS_ANY\n            * STARTS_WITH\n\n        * `request_query_params_to_exclude`: A list of request query parameter names whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body.\n\n          * `val`: The value of the field.\n\n          * `op`: The match operator for the field.\n          Possible values:\n            * CONTAINS\n            * ENDS_WITH\n            * EQUALS\n            * EQUALS_ANY\n            * STARTS_WITH\n\n        * `request_uris_to_exclude`: A list of request URIs from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded.\n\n          * `val`: The value of the field.\n\n          * `op`: The match operator for the field.\n          Possible values:\n            * CONTAINS\n            * ENDS_WITH\n            * EQUALS\n            * EQUALS_ANY\n            * STARTS_WITH\n\n  * `cloud_armor_config`: Configuration options for Cloud Armor.\n\n    * `enable_ml`: If set to true, enables Cloud Armor Machine Learning.\n\n  * `adaptive_protection_config`: Configuration options for Cloud Armor Adaptive Protection (CAAP).\n\n    * `layer7_ddos_defense_config`: Configuration options for L7 DDoS detection. This field is only supported in Global Security Policies of type CLOUD_ARMOR.\n\n      * `enable`: If set to true, enables CAAP for L7 DDoS detection. This field is only supported in Global Security Policies of type CLOUD_ARMOR.\n\n      * `rule_visibility`: Rule visibility can be one of the following: STANDARD - opaque rules. (default) PREMIUM - transparent rules. This field is only supported in Global Security Policies of type CLOUD_ARMOR.\n      Possible values:\n        * PREMIUM\n        * STANDARD\n\n      * `threshold_configs`: Configuration options for layer7 adaptive protection for various customizable thresholds.\n\n        * `name`: The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the security policy.\n\n        * `auto_deploy_load_threshold`: \n\n        * `auto_deploy_confidence_threshold`: \n\n        * `auto_deploy_impacted_baseline_threshold`: \n\n        * `auto_deploy_expiration_sec`: \n\n        * `detection_load_threshold`: \n\n        * `detection_absolute_qps`: \n\n        * `detection_relative_to_baseline_qps`: \n\n        * `traffic_granularity_configs`: Configuration options for enabling Adaptive Protection to operate on specified granular traffic units.\n\n          * `type`: Type of this configuration.\n          Possible values:\n            * HTTP_HEADER_HOST\n            * HTTP_PATH\n            * UNSPECIFIED_TYPE\n\n          * `value`: Requests that match this value constitute a granular traffic unit.\n\n          * `enable_each_unique_value`: If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if `value` is empty.\n\n    * `auto_deploy_config`: Configuration options for Adaptive Protection auto-deploy feature.\n\n      * `load_threshold`: \n\n      * `confidence_threshold`: \n\n      * `impacted_baseline_threshold`: \n\n      * `expiration_sec`: \n\n  * `ddos_protection_config`: \n\n    * `ddos_protection`: \n    Possible values:\n      * ADVANCED\n      * ADVANCED_PREVIEW\n      * STANDARD\n\n  * `advanced_options_config`: \n\n    * `json_parsing`: \n    Possible values:\n      * DISABLED\n      * STANDARD\n      * STANDARD_WITH_GRAPHQL\n\n    * `json_custom_config`: \n\n      * `content_types`: A list of custom Content-Type header values to apply the JSON parsing. As per RFC 1341, a Content-Type header value has the following format: Content-Type := type \"/\" subtype *[\";\" parameter] When configuring a custom Content-Type header value, only the type/subtype needs to be specified, and the parameters should be excluded.\n\n    * `log_level`: \n    Possible values:\n      * NORMAL\n      * VERBOSE\n\n    * `user_ip_request_headers`: An optional list of case-insensitive request header names to use for resolving the callers client IP address.\n\n  * `recaptcha_options_config`: \n\n    * `redirect_site_key`: An optional field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. This field is only supported in Global Security Policies of type CLOUD_ARMOR.\n\n  * `fingerprint`: Specifies a fingerprint for this resource, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make get() request to the security policy.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `type`: The type indicates the intended use of the security policy. - CLOUD_ARMOR: Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. They filter requests before they hit the origin servers. - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can be configured to filter incoming HTTP requests targeting backend services (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage). They filter requests before the request is served from Google's cache. - CLOUD_ARMOR_INTERNAL_SERVICE: Cloud Armor internal service policies can be configured to filter HTTP requests targeting services managed by Traffic Director in a service mesh. They filter requests before the request is served from the application. - CLOUD_ARMOR_NETWORK: Cloud Armor network policies can be configured to filter packets targeting network load balancing resources such as backend services, target pools, target instances, and instances with external IPs. They filter requests before the request is served from the application. This field can be set only at resource creation time.\n  Possible values:\n    * CLOUD_ARMOR\n    * CLOUD_ARMOR_EDGE\n    * CLOUD_ARMOR_INTERNAL_SERVICE\n    * CLOUD_ARMOR_NETWORK\n    * FIREWALL\n\n  * `associations`: A list of associations that belong to this policy.\n\n    * `name`: The name for an association.\n\n    * `attachment_id`: The resource that the security policy is attached to.\n\n    * `security_policy_id`: [Output Only] The security policy ID of the association.\n\n    * `display_name`: [Output Only] The display name of the security policy of the association.\n\n  * `labels`: Labels for this resource. These can only be added or modified by the setLabels method. Each label key/value pair must comply with RFC1035. Label values may be empty.\n\n    * `additional_properties`: \n\n  * `label_fingerprint`: A fingerprint for the labels being applied to this security policy, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels. To see the latest fingerprint, make get() request to the security policy.\n\n  * `rule_tuple_count`: [Output Only] Total count of all security policy rule tuples. A security policy can not exceed a set number of tuples.\n\n  * `display_name`: User-provided name of the organization security policy. The name should be unique in the organization in which the security policy is created. This should only be used when SecurityPolicyType is FIREWALL. The name must be 1-63 characters long, and comply with https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `parent`: [Output Only] The parent of the security policy.\n\n  * `region`: [Output Only] URL of the region where the regional security policy resides. This field is not applicable to global security policies.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_ssl_policies.md",
    "content": "+++\ntitle = \"google_compute_region_ssl_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_ssl_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_region_ssl_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_ssl_policies` InSpec audit resource to to test a Google Cloud RegionSslPolicy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_ssl_policies(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_ssl_policies` resource:\n\nSee [google_compute_region_ssl_policy](google_compute_region_ssl_policy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_ssl_policy` kind\n  * `ids`: an array of `google_compute_region_ssl_policy` id\n  * `creation_timestamps`: an array of `google_compute_region_ssl_policy` creation_timestamp\n  * `self_links`: an array of `google_compute_region_ssl_policy` self_link\n  * `self_link_with_ids`: an array of `google_compute_region_ssl_policy` self_link_with_id\n  * `names`: an array of `google_compute_region_ssl_policy` name\n  * `descriptions`: an array of `google_compute_region_ssl_policy` description\n  * `profiles`: an array of `google_compute_region_ssl_policy` profile\n  * `min_tls_versions`: an array of `google_compute_region_ssl_policy` min_tls_version\n  * `enabled_features`: an array of `google_compute_region_ssl_policy` enabled_features\n  * `custom_features`: an array of `google_compute_region_ssl_policy` custom_features\n  * `fingerprints`: an array of `google_compute_region_ssl_policy` fingerprint\n  * `warnings`: an array of `google_compute_region_ssl_policy` warnings\n  * `tls_settings`: an array of `google_compute_region_ssl_policy` tls_settings\n  * `regions`: an array of `google_compute_region_ssl_policy` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_ssl_policy.md",
    "content": "+++\ntitle = \"google_compute_region_ssl_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_ssl_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_region_ssl_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_ssl_policy` InSpec audit resource to to test a Google Cloud RegionSslPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_ssl_policy(project: 'chef-gcp-inspec', region: ' value_region', sslPolicy: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('profile') { should cmp 'value_profile' }\n\tits('min_tls_version') { should cmp 'value_mintlsversion' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('region') { should cmp 'value_region' }\n\nend\n\ndescribe google_compute_region_ssl_policy(project: 'chef-gcp-inspec', region: ' value_region', sslPolicy: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_ssl_policy` resource:\n\n\n  * `kind`: [Output only] Type of the resource. Always compute#sslPolicyfor SSL policies.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `profile`: Profile specifies the set of SSL features that can be used by the load balancer when negotiating SSL with clients. This can be one of COMPATIBLE, MODERN, RESTRICTED, or CUSTOM. If using CUSTOM, the set of SSL features to enable must be specified in the customFeatures field.\n  Possible values:\n    * COMPATIBLE\n    * CUSTOM\n    * MODERN\n    * RESTRICTED\n\n  * `min_tls_version`: The minimum version of SSL protocol that can be used by the clients to establish a connection with the load balancer. This can be one of TLS_1_0, TLS_1_1, TLS_1_2.\n  Possible values:\n    * TLS_1_0\n    * TLS_1_1\n    * TLS_1_2\n\n  * `enabled_features`: [Output Only] The list of features enabled in the SSL policy.\n\n  * `custom_features`: A list of features enabled when the selected profile is CUSTOM. The method returns the set of features that can be specified in this list. This field must be empty if the profile is not CUSTOM.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a SslPolicy. An up-to-date fingerprint must be provided in order to update the SslPolicy, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve an SslPolicy.\n\n  * `warnings`: [Output Only] If potential misconfigurations are detected for this SSL policy, this field will be populated with warning messages.\n\n    * `code`: [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.\n    Possible values:\n      * CLEANUP_FAILED\n      * DEPRECATED_RESOURCE_USED\n      * DEPRECATED_TYPE_USED\n      * DISK_SIZE_LARGER_THAN_IMAGE_SIZE\n      * EXPERIMENTAL_TYPE_USED\n      * EXTERNAL_API_WARNING\n      * FIELD_VALUE_OVERRIDEN\n      * INJECTED_KERNELS_DEPRECATED\n      * INVALID_HEALTH_CHECK_FOR_DYNAMIC_WIEGHTED_LB\n      * LARGE_DEPLOYMENT_WARNING\n      * LIST_OVERHEAD_QUOTA_EXCEED\n      * MISSING_TYPE_DEPENDENCY\n      * NEXT_HOP_ADDRESS_NOT_ASSIGNED\n      * NEXT_HOP_CANNOT_IP_FORWARD\n      * NEXT_HOP_INSTANCE_HAS_NO_IPV6_INTERFACE\n      * NEXT_HOP_INSTANCE_NOT_FOUND\n      * NEXT_HOP_INSTANCE_NOT_ON_NETWORK\n      * NEXT_HOP_NOT_RUNNING\n      * NOT_CRITICAL_ERROR\n      * NO_RESULTS_ON_PAGE\n      * PARTIAL_SUCCESS\n      * REQUIRED_TOS_AGREEMENT\n      * RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING\n      * RESOURCE_NOT_DELETED\n      * SCHEMA_VALIDATION_IGNORED\n      * SINGLE_INSTANCE_PROPERTY_TEMPLATE\n      * UNDECLARED_PROPERTIES\n      * UNREACHABLE\n\n    * `message`: [Output Only] A human-readable description of the warning code.\n\n    * `data`: [Output Only] Metadata about this warning in key: value format. For example: \"data\": [ { \"key\": \"scope\", \"value\": \"zones/us-east1-d\" } \n\n      * `key`: [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).\n\n      * `value`: [Output Only] A warning data value corresponding to the key.\n\n  * `tls_settings`: The TLS settings for the server.\n\n    * `tls_mode`: Indicates whether connections should be secured using TLS. The value of this field determines how TLS is enforced. This field can be set to one of the following: - SIMPLE Secure connections with standard TLS semantics. - MUTUAL Secure connections to the backends using mutual TLS by presenting client certificates for authentication. \n    Possible values:\n      * INVALID\n      * MUTUAL\n      * SIMPLE\n\n    * `proxy_tls_context`: [Deprecated] The TLS settings for the client or server. The TLS settings for the client or server.\n\n      * `certificate_context`: [Deprecated] Defines the mechanism to obtain the client or server certificate. Defines the mechanism to obtain the client or server certificate.\n\n        * `certificate_source`: Defines how TLS certificates are obtained.\n        Possible values:\n          * INVALID\n          * USE_PATH\n          * USE_SDS\n\n        * `certificate_paths`: [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key.\n\n          * `certificate_path`: The path to the file holding the client or server TLS certificate to use.\n\n          * `private_key_path`: The path to the file holding the client or server private key.\n\n        * `sds_config`: [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server.\n\n          * `grpc_service_config`: [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server.\n\n            * `target_uri`: The target URI of the SDS server.\n\n            * `channel_credentials`: [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server.\n\n              * `channel_credential_type`: The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.\n              Possible values:\n                * CERTIFICATES\n                * GCE_VM\n                * INVALID\n\n              * `certificates`: [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key.\n\n                * `certificate_path`: The path to the file holding the client or server TLS certificate to use.\n\n                * `private_key_path`: The path to the file holding the client or server private key.\n\n            * `call_credentials`: [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server.\n\n              * `call_credential_type`: The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following: - GCE_VM: The local GCE VM service account credentials are used to access the SDS server. - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.\n              Possible values:\n                * FROM_PLUGIN\n                * GCE_VM\n                * INVALID\n\n              * `from_plugin`: [Deprecated] Custom authenticator credentials. Custom authenticator credentials.\n\n                * `name`: Plugin name.\n\n                * `struct_config`: A text proto that conforms to a Struct type definition interpreted by the plugin.\n\n      * `validation_context`: [Deprecated] Defines the mechanism to obtain the Certificate Authority certificate to validate the client/server certificate. validate the client/server certificate.\n\n        * `validation_source`: Defines how TLS certificates are obtained.\n        Possible values:\n          * INVALID\n          * USE_PATH\n          * USE_SDS\n\n        * `certificate_path`: The path to the file holding the CA certificate to validate the client or server certificate.\n\n        * `sds_config`: [Deprecated] The configuration to access the SDS server. The configuration to access the SDS server.\n\n          * `grpc_service_config`: [Deprecated] gRPC config to access the SDS server. gRPC config to access the SDS server.\n\n            * `target_uri`: The target URI of the SDS server.\n\n            * `channel_credentials`: [Deprecated] gRPC channel credentials to access the SDS server. gRPC channel credentials to access the SDS server.\n\n              * `channel_credential_type`: The channel credentials to access the SDS server. This field can be set to one of the following: CERTIFICATES: Use TLS certificates to access the SDS server. GCE_VM: Use local GCE VM credentials to access the SDS server.\n              Possible values:\n                * CERTIFICATES\n                * GCE_VM\n                * INVALID\n\n              * `certificates`: [Deprecated] The paths to the mounted TLS Certificates and private key. The paths to the mounted TLS Certificates and private key.\n\n                * `certificate_path`: The path to the file holding the client or server TLS certificate to use.\n\n                * `private_key_path`: The path to the file holding the client or server private key.\n\n            * `call_credentials`: [Deprecated] gRPC call credentials to access the SDS server. gRPC call credentials to access the SDS server.\n\n              * `call_credential_type`: The type of call credentials to use for GRPC requests to the SDS server. This field can be set to one of the following: - GCE_VM: The local GCE VM service account credentials are used to access the SDS server. - FROM_PLUGIN: Custom authenticator credentials are used to access the SDS server.\n              Possible values:\n                * FROM_PLUGIN\n                * GCE_VM\n                * INVALID\n\n              * `from_plugin`: [Deprecated] Custom authenticator credentials. Custom authenticator credentials.\n\n                * `name`: Plugin name.\n\n                * `struct_config`: A text proto that conforms to a Struct type definition interpreted by the plugin.\n\n    * `subject_alt_names`: A list of alternate names to verify the subject identity in the certificate presented by the client.\n\n  * `region`: [Output Only] URL of the region where the regional SSL policy resides. This field is not applicable to global SSL policies.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_target_http_proxies.md",
    "content": "+++\ntitle = \"google_compute_region_target_http_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_target_http_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_region_target_http_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_target_http_proxies` InSpec audit resource to to test a Google Cloud RegionTargetHttpProxy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_target_http_proxies(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_target_http_proxies` resource:\n\nSee [google_compute_region_target_http_proxy](google_compute_region_target_http_proxy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_target_http_proxy` kind\n  * `ids`: an array of `google_compute_region_target_http_proxy` id\n  * `creation_timestamps`: an array of `google_compute_region_target_http_proxy` creation_timestamp\n  * `names`: an array of `google_compute_region_target_http_proxy` name\n  * `descriptions`: an array of `google_compute_region_target_http_proxy` description\n  * `self_links`: an array of `google_compute_region_target_http_proxy` self_link\n  * `self_link_with_ids`: an array of `google_compute_region_target_http_proxy` self_link_with_id\n  * `url_maps`: an array of `google_compute_region_target_http_proxy` url_map\n  * `regions`: an array of `google_compute_region_target_http_proxy` region\n  * `proxy_binds`: an array of `google_compute_region_target_http_proxy` proxy_bind\n  * `http_filters`: an array of `google_compute_region_target_http_proxy` http_filters\n  * `fingerprints`: an array of `google_compute_region_target_http_proxy` fingerprint\n  * `http_keep_alive_timeout_secs`: an array of `google_compute_region_target_http_proxy` http_keep_alive_timeout_sec\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_target_http_proxy.md",
    "content": "+++\ntitle = \"google_compute_region_target_http_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_target_http_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_region_target_http_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_target_http_proxy` InSpec audit resource to to test a Google Cloud RegionTargetHttpProxy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_target_http_proxy(project: 'chef-gcp-inspec', region: ' value_region', targetHttpProxy: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('url_map') { should cmp 'value_urlmap' }\n\tits('region') { should cmp 'value_region' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\nend\n\ndescribe google_compute_region_target_http_proxy(project: 'chef-gcp-inspec', region: ' value_region', targetHttpProxy: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_target_http_proxy` resource:\n\n\n  * `kind`: [Output Only] Type of resource. Always compute#targetHttpProxy for target HTTP proxies.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `url_map`: URL to the UrlMap resource that defines the mapping from URL to the BackendService.\n\n  * `region`: [Output Only] URL of the region where the regional Target HTTP Proxy resides. This field is not applicable to global Target HTTP Proxies.\n\n  * `proxy_bind`: This field only applies when the forwarding rule that references this target proxy has a loadBalancingScheme set to INTERNAL_SELF_MANAGED. When this field is set to true, Envoy proxies set up inbound traffic interception and bind to the IP address and port specified in the forwarding rule. This is generally useful when using Traffic Director to configure Envoy as a gateway or middle proxy (in other words, not a sidecar proxy). The Envoy proxy listens for inbound requests and handles requests when it receives them. The default is false.\n\n  * `http_filters`: URLs to networkservices.HttpFilter resources enabled for xDS clients using this configuration. For example, https://networkservices.googleapis.com/v1alpha1/projects/project/locations/ locationhttpFilters/httpFilter Only filters that handle outbound connection and stream events may be specified. These filters work in conjunction with a default set of HTTP filters that may already be configured by Traffic Director. Traffic Director will determine the final location of these filters within xDS configuration based on the name of the HTTP filter. If Traffic Director positions multiple filters at the same location, those filters will be in the same order as specified in this list. httpFilters only applies for loadbalancers with loadBalancingScheme set to INTERNAL_SELF_MANAGED. See ForwardingRule for more details.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a TargetHttpProxy. An up-to-date fingerprint must be provided in order to patch/update the TargetHttpProxy; otherwise, the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the TargetHttpProxy.\n\n  * `http_keep_alive_timeout_sec`: Specifies how long to keep a connection open, after completing a response, while there is no matching traffic (in seconds). If an HTTP keep-alive is not specified, a default value (610 seconds) will be used. For global external Application Load Balancers, the minimum allowed value is 5 seconds and the maximum allowed value is 1200 seconds. For classic Application Load Balancers, this option is not supported.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_target_https_proxies.md",
    "content": "+++\ntitle = \"google_compute_region_target_https_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_target_https_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_region_target_https_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_target_https_proxies` InSpec audit resource to to test a Google Cloud RegionTargetHttpsProxy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_target_https_proxies(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_target_https_proxies` resource:\n\nSee [google_compute_region_target_https_proxy](google_compute_region_target_https_proxy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_target_https_proxy` kind\n  * `ids`: an array of `google_compute_region_target_https_proxy` id\n  * `creation_timestamps`: an array of `google_compute_region_target_https_proxy` creation_timestamp\n  * `names`: an array of `google_compute_region_target_https_proxy` name\n  * `descriptions`: an array of `google_compute_region_target_https_proxy` description\n  * `self_links`: an array of `google_compute_region_target_https_proxy` self_link\n  * `self_link_with_ids`: an array of `google_compute_region_target_https_proxy` self_link_with_id\n  * `url_maps`: an array of `google_compute_region_target_https_proxy` url_map\n  * `ssl_certificates`: an array of `google_compute_region_target_https_proxy` ssl_certificates\n  * `certificate_maps`: an array of `google_compute_region_target_https_proxy` certificate_map\n  * `quic_overrides`: an array of `google_compute_region_target_https_proxy` quic_override\n  * `ssl_policies`: an array of `google_compute_region_target_https_proxy` ssl_policy\n  * `regions`: an array of `google_compute_region_target_https_proxy` region\n  * `proxy_binds`: an array of `google_compute_region_target_https_proxy` proxy_bind\n  * `http_filters`: an array of `google_compute_region_target_https_proxy` http_filters\n  * `server_tls_policies`: an array of `google_compute_region_target_https_proxy` server_tls_policy\n  * `authentications`: an array of `google_compute_region_target_https_proxy` authentication\n  * `authorization_policies`: an array of `google_compute_region_target_https_proxy` authorization_policy\n  * `authorizations`: an array of `google_compute_region_target_https_proxy` authorization\n  * `fingerprints`: an array of `google_compute_region_target_https_proxy` fingerprint\n  * `http_keep_alive_timeout_secs`: an array of `google_compute_region_target_https_proxy` http_keep_alive_timeout_sec\n  * `tls_early_data`: an array of `google_compute_region_target_https_proxy` tls_early_data\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_target_https_proxy.md",
    "content": "+++\ntitle = \"google_compute_region_target_https_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_target_https_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_region_target_https_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_target_https_proxy` InSpec audit resource to to test a Google Cloud RegionTargetHttpsProxy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_target_https_proxy(project: 'chef-gcp-inspec', region: ' value_region', targetHttpsProxy: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('url_map') { should cmp 'value_urlmap' }\n\tits('certificate_map') { should cmp 'value_certificatemap' }\n\tits('quic_override') { should cmp 'value_quicoverride' }\n\tits('ssl_policy') { should cmp 'value_sslpolicy' }\n\tits('region') { should cmp 'value_region' }\n\tits('server_tls_policy') { should cmp 'value_servertlspolicy' }\n\tits('authentication') { should cmp 'value_authentication' }\n\tits('authorization_policy') { should cmp 'value_authorizationpolicy' }\n\tits('authorization') { should cmp 'value_authorization' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('tls_early_data') { should cmp 'value_tlsearlydata' }\n\nend\n\ndescribe google_compute_region_target_https_proxy(project: 'chef-gcp-inspec', region: ' value_region', targetHttpsProxy: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_target_https_proxy` resource:\n\n\n  * `kind`: [Output Only] Type of resource. Always compute#targetHttpsProxy for target HTTPS proxies.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `url_map`: A fully-qualified or valid partial URL to the UrlMap resource that defines the mapping from URL to the BackendService. For example, the following are all valid URLs for specifying a URL map: - https://www.googleapis.compute/v1/projects/project/global/urlMaps/ url-map - projects/project/global/urlMaps/url-map - global/urlMaps/url-map \n\n  * `ssl_certificates`: URLs to SslCertificate resources that are used to authenticate connections between users and the load balancer. At least one SSL certificate must be specified. Currently, you may specify up to 15 SSL certificates. sslCertificates do not apply when the load balancing scheme is set to INTERNAL_SELF_MANAGED.\n\n  * `certificate_map`: URL of a certificate map that identifies a certificate map associated with the given target proxy. This field can only be set for global target proxies. If set, sslCertificates will be ignored. Accepted format is //certificatemanager.googleapis.com/projects/{project }/locations/{location}/certificateMaps/{resourceName}.\n\n  * `quic_override`: Specifies the QUIC override policy for this TargetHttpsProxy resource. This setting determines whether the load balancer attempts to negotiate QUIC with clients. You can specify NONE, ENABLE, or DISABLE. - When quic-override is set to NONE, Google manages whether QUIC is used. - When quic-override is set to ENABLE, the load balancer uses QUIC when possible. - When quic-override is set to DISABLE, the load balancer doesn't use QUIC. - If the quic-override flag is not specified, NONE is implied. \n  Possible values:\n    * DISABLE\n    * ENABLE\n    * NONE\n\n  * `ssl_policy`: URL of SslPolicy resource that will be associated with the TargetHttpsProxy resource. If not set, the TargetHttpsProxy resource has no SSL policy configured.\n\n  * `region`: [Output Only] URL of the region where the regional TargetHttpsProxy resides. This field is not applicable to global TargetHttpsProxies.\n\n  * `proxy_bind`: This field only applies when the forwarding rule that references this target proxy has a loadBalancingScheme set to INTERNAL_SELF_MANAGED. When this field is set to true, Envoy proxies set up inbound traffic interception and bind to the IP address and port specified in the forwarding rule. This is generally useful when using Traffic Director to configure Envoy as a gateway or middle proxy (in other words, not a sidecar proxy). The Envoy proxy listens for inbound requests and handles requests when it receives them. The default is false.\n\n  * `http_filters`: URLs to networkservices.HttpFilter resources enabled for xDS clients using this configuration. For example, https://networkservices.googleapis.com/beta/projects/project/locations/ locationhttpFilters/httpFilter Only filters that handle outbound connection and stream events may be specified. These filters work in conjunction with a default set of HTTP filters that may already be configured by Traffic Director. Traffic Director will determine the final location of these filters within xDS configuration based on the name of the HTTP filter. If Traffic Director positions multiple filters at the same location, those filters will be in the same order as specified in this list. httpFilters only applies for loadbalancers with loadBalancingScheme set to INTERNAL_SELF_MANAGED. See ForwardingRule for more details.\n\n  * `server_tls_policy`: Optional. A URL referring to a networksecurity.ServerTlsPolicy resource that describes how the proxy should authenticate inbound traffic. serverTlsPolicy only applies to a global TargetHttpsProxy attached to globalForwardingRules with the loadBalancingScheme set to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED. For details which ServerTlsPolicy resources are accepted with INTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED loadBalancingScheme consult ServerTlsPolicy documentation. If left blank, communications are not encrypted.\n\n  * `authentication`: [Deprecated] Use serverTlsPolicy instead.\n\n  * `authorization_policy`: Optional. A URL referring to a networksecurity.AuthorizationPolicy resource that describes how the proxy should authorize inbound traffic. If left blank, access will not be restricted by an authorization policy. Refer to the AuthorizationPolicy resource for additional details. authorizationPolicy only applies to a global TargetHttpsProxy attached to globalForwardingRules with the loadBalancingScheme set to INTERNAL_SELF_MANAGED. Note: This field currently has no impact.\n\n  * `authorization`: [Deprecated] Use authorizationPolicy instead.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a TargetHttpsProxy. An up-to-date fingerprint must be provided in order to patch the TargetHttpsProxy; otherwise, the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the TargetHttpsProxy.\n\n  * `http_keep_alive_timeout_sec`: Specifies how long to keep a connection open, after completing a response, while there is no matching traffic (in seconds). If an HTTP keep-alive is not specified, a default value (610 seconds) will be used. For global external Application Load Balancers, the minimum allowed value is 5 seconds and the maximum allowed value is 1200 seconds. For classic Application Load Balancers, this option is not supported.\n\n  * `tls_early_data`: Specifies whether TLS 1.3 0-RTT Data (\"Early Data\") should be accepted for this service. Early Data allows a TLS resumption handshake to include the initial application payload (a HTTP request) alongside the handshake, reducing the effective round trips to \"zero\". This applies to TLS 1.3 connections over TCP (HTTP/2) as well as over UDP (QUIC/h3). This can improve application performance, especially on networks where interruptions may be common, such as on mobile. Requests with Early Data will have the \"Early-Data\" HTTP header set on the request, with a value of \"1\", to allow the backend to determine whether Early Data was included. Note: TLS Early Data may allow requests to be replayed, as the data is sent to the backend before the handshake has fully completed. Applications that allow idempotent HTTP methods to make non-idempotent changes, such as a GET request updating a database, should not accept Early Data on those requests, and reject requests with the \"Early-Data: 1\" HTTP header by returning a HTTP 425 (Too Early) status code, in order to remain RFC compliant. The default value is DISABLED.\n  Possible values:\n    * DISABLED\n    * PERMISSIVE\n    * STRICT\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_url_map.md",
    "content": "+++\ntitle = \"google_compute_region_url_map resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_url_map\"\nidentifier = \"inspec/resources/gcp/google_compute_region_url_map resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_url_map` InSpec audit resource to to test a Google Cloud RegionUrlMap resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_region_url_map(project: 'chef-gcp-inspec', region: ' value_region', name: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('default_service') { should cmp 'value_defaultservice' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\tits('region') { should cmp 'value_region' }\n\nend\n\ndescribe google_compute_region_url_map(project: 'chef-gcp-inspec', region: ' value_region', name: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_url_map` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#urlMaps for url maps.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `host_rules`: The list of host rules to use against the URL.\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `hosts`: The list of host patterns to match. They must be valid hostnames with optional port numbers in the format host:port. * matches any string of ([a-z0-9-.]*). In that case, * must be the first character, and if followed by anything, the immediate following character must be either - or .. * based matching is not supported when the URL map is bound to a target gRPC proxy that has the validateForProxyless field set to true.\n\n    * `path_matcher`: The name of the PathMatcher to use to match the path portion of the URL if the hostRule matches the URL's host portion.\n\n  * `path_matchers`: The list of named PathMatchers to use against the URL.\n\n    * `name`: The name to which this PathMatcher is referred by the HostRule.\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `default_service`: The full or partial URL to the BackendService resource. This URL is used if none of the pathRules or routeRules defined by this PathMatcher are matched. For example, the following are all valid URLs to a BackendService resource: - https://www.googleapis.com/compute/v1/projects/project /global/backendServices/backendService - compute/v1/projects/project/global/backendServices/backendService - global/backendServices/backendService If defaultRouteAction is also specified, advanced routing actions, such as URL rewrites, take effect before sending the request to the backend. However, if defaultService is specified, defaultRouteAction cannot contain any weightedBackendServices. Conversely, if defaultRouteAction specifies any weightedBackendServices, defaultService must not be specified. Only one of defaultService, defaultUrlRedirect , or defaultRouteAction.weightedBackendService must be set. Authorization requires one or more of the following Google IAM permissions on the specified resource default_service: - compute.backendBuckets.use - compute.backendServices.use\n\n    * `default_route_action`:\n\n      * `weighted_backend_services`: A list of weighted backend services to send traffic to when a route match occurs. The weights determine the fraction of traffic that flows to their corresponding backend service. If all traffic needs to go to a single backend service, there must be one weightedBackendService with weight set to a non-zero number. After a backend service is identified and before forwarding the request to the backend service, advanced routing actions such as URL rewrites and header transformations are applied depending on additional settings specified in this HttpRouteAction.\n\n        * `backend_service`: The full or partial URL to the default BackendService resource. Before forwarding the request to backendService, the load balancer applies any relevant headerActions specified as part of this backendServiceWeight.\n\n        * `weight`: Specifies the fraction of traffic sent to a backend service, computed as weight / (sum of all weightedBackendService weights in routeAction) . The selection of a backend service is determined only for new traffic. Once a user's request has been directed to a backend service, subsequent requests are sent to the same backend service as determined by the backend service's session affinity policy. The value must be from 0 to 1000.\n\n        * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n          * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n          * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n            * `header_name`: The name of the header.\n\n            * `header_value`: The value of the header to add.\n\n            * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n          * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n          * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n            * `header_name`: The name of the header.\n\n            * `header_value`: The value of the header to add.\n\n            * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n      * `url_rewrite`: The spec for modifying the path before sending the request to the matched backend service.\n\n        * `path_prefix_rewrite`: Before forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite. The value must be from 1 to 1024 characters.\n\n        * `host_rewrite`: Before forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite. The value must be from 1 to 255 characters.\n\n        * `path_template_rewrite`: If specified, the pattern rewrites the URL path (based on the :path header) using the HTTP template syntax. A corresponding path_template_match must be specified. Any template variables must exist in the path_template_match field. - -At least one variable must be specified in the path_template_match field - You can omit variables from the rewritten URL - The * and ** operators cannot be matched unless they have a corresponding variable name - e.g. {format=*} or {var=**}. For example, a path_template_match of /static/{format=**} could be rewritten as /static/content/{format} to prefix /content to the URL. Variables can also be re-ordered in a rewrite, so that /{country}/{format}/{suffix=**} can be rewritten as /content/{format}/{country}/{suffix}. At least one non-empty routeRules[].matchRules[].path_template_match is required. Only one of path_prefix_rewrite or path_template_rewrite may be specified.\n\n      * `timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n      * `retry_policy`: The retry policy associates with HttpRouteRule\n\n        * `retry_conditions`: Specifies one or more conditions when this retry policy applies. Valid values are: - 5xx: retry is attempted if the instance or endpoint responds with any 5xx response code, or if the instance or endpoint does not respond at all. For example, disconnects, reset, read timeout, connection failure, and refused streams. - gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. - connect-failure: a retry is attempted on failures connecting to the instance or endpoint. For example, connection timeouts. - retriable-4xx: a retry is attempted if the instance or endpoint responds with a 4xx response code. The only error that you can retry is error code 409. - refused-stream: a retry is attempted if the instance or endpoint resets the stream with a REFUSED_STREAM error code. This reset type indicates that it is safe to retry. - cancelled: a retry is attempted if the gRPC status code in the response header is set to cancelled. - deadline-exceeded: a retry is attempted if the gRPC status code in the response header is set to deadline-exceeded. - internal: a retry is attempted if the gRPC status code in the response header is set to internal. - resource-exhausted: a retry is attempted if the gRPC status code in the response header is set to resource-exhausted. - unavailable: a retry is attempted if the gRPC status code in the response header is set to unavailable. Only the following codes are supported when the URL map is bound to target gRPC proxy that has validateForProxyless field set to true. - cancelled - deadline-exceeded - internal - resource-exhausted - unavailable\n\n        * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n        * `per_try_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n      * `request_mirror_policy`: A policy that specifies how requests intended for the route's backends are shadowed to a separate mirrored backend service. The load balancer doesn't wait for responses from the shadow service. Before sending traffic to the shadow service, the host or authority header is suffixed with -shadow.\n\n        * `backend_service`: The full or partial URL to the BackendService resource being mirrored to. The backend service configured for a mirroring policy must reference backends that are of the same type as the original backend service matched in the URL map. Serverless NEG backends are not currently supported as a mirrored backend service.\n\n      * `cors_policy`: The specification for allowing client-side cross-origin requests. For more information about the W3C recommendation for cross-origin resource sharing (CORS), see Fetch API Living Standard.\n\n        * `allow_origins`: Specifies the list of origins that is allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n        * `allow_origin_regexes`: Specifies a regular expression that matches allowed origins. For more information about the regular expression syntax, see Syntax. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n        * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n        * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n        * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n        * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This field translates to the Access-Control-Max-Age header.\n\n        * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This field translates to the Access-Control-Allow-Credentials header. Default is false.\n\n        * `disabled`: If true, the setting specifies the CORS policy is disabled. The default value of false, which indicates that the CORS policy is in effect.\n\n      * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by the load balancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the load balancer for a percentage of requests.\n\n        * `delay`: Specifies the delay introduced by the load balancer before forwarding the request to the backend service as part of fault injection.\n\n          * `fixed_delay`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n            * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n            * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n          * `percentage`: The percentage of traffic for connections, operations, or requests for which a delay is introduced as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n        * `abort`: Specification for how requests are aborted as part of fault injection.\n\n          * `http_status`: The HTTP status code used to abort the request. The value must be from 200 to 599 inclusive. For gRPC protocol, the gRPC status code is mapped to HTTP status code according to this mapping table. HTTP status 200 is mapped to gRPC status UNKNOWN. Injecting an OK status is currently not supported by Traffic Director.\n\n          * `percentage`: The percentage of traffic for connections, operations, or requests that is aborted as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n      * `max_stream_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `default_url_redirect`: Specifies settings for an HTTP redirect.\n\n      * `host_redirect`: The host that is used in the redirect response instead of the one that was supplied in the request. The value must be from 1 to 255 characters.\n\n      * `path_redirect`: The path that is used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n      * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n      * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are: - MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301. - FOUND, which corresponds to 302. - SEE_OTHER which corresponds to 303. - TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method is retained. - PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method is retained.\n      Possible values:\n        * FOUND\n        * MOVED_PERMANENTLY_DEFAULT\n        * PERMANENT_REDIRECT\n        * SEE_OTHER\n        * TEMPORARY_REDIRECT\n\n      * `https_redirect`: If set to true, the URL scheme in the redirected request is set to HTTPS. If set to false, the URL scheme of the redirected request remains the same as that of the request. This must only be set for URL maps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n      * `strip_query`: If set to true, any accompanying query portion of the original URL is removed before redirecting the request. If set to false, the query portion of the original URL is retained. The default is set to false.\n\n    * `path_rules`: The list of path rules. Use this list instead of routeRules when routing based on simple path matching is all that's required. The order by which path rules are specified does not matter. Matches are always done on the longest-path-first basis. For example: a pathRule with a path /a/b/c/* will match before /a/b/* irrespective of the order in which those paths appear in this list. Within a given pathMatcher, only one of pathRules or routeRules must be set.\n\n      * `service`: The full or partial URL of the backend service resource to which traffic is directed if this rule is matched. If routeAction is also specified, advanced routing actions, such as URL rewrites, take effect before sending the request to the backend. However, if service is specified, routeAction cannot contain any weightedBackendServices. Conversely, if routeAction specifies any weightedBackendServices, service must not be specified. Only one of urlRedirect, service or routeAction.weightedBackendService must be set.\n\n      * `route_action`:\n\n        * `weighted_backend_services`: A list of weighted backend services to send traffic to when a route match occurs. The weights determine the fraction of traffic that flows to their corresponding backend service. If all traffic needs to go to a single backend service, there must be one weightedBackendService with weight set to a non-zero number. After a backend service is identified and before forwarding the request to the backend service, advanced routing actions such as URL rewrites and header transformations are applied depending on additional settings specified in this HttpRouteAction.\n\n          * `backend_service`: The full or partial URL to the default BackendService resource. Before forwarding the request to backendService, the load balancer applies any relevant headerActions specified as part of this backendServiceWeight.\n\n          * `weight`: Specifies the fraction of traffic sent to a backend service, computed as weight / (sum of all weightedBackendService weights in routeAction) . The selection of a backend service is determined only for new traffic. Once a user's request has been directed to a backend service, subsequent requests are sent to the same backend service as determined by the backend service's session affinity policy. The value must be from 0 to 1000.\n\n          * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n            * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n            * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n              * `header_name`: The name of the header.\n\n              * `header_value`: The value of the header to add.\n\n              * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n            * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n            * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n              * `header_name`: The name of the header.\n\n              * `header_value`: The value of the header to add.\n\n              * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n        * `url_rewrite`: The spec for modifying the path before sending the request to the matched backend service.\n\n          * `path_prefix_rewrite`: Before forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite. The value must be from 1 to 1024 characters.\n\n          * `host_rewrite`: Before forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite. The value must be from 1 to 255 characters.\n\n          * `path_template_rewrite`: If specified, the pattern rewrites the URL path (based on the :path header) using the HTTP template syntax. A corresponding path_template_match must be specified. Any template variables must exist in the path_template_match field. - -At least one variable must be specified in the path_template_match field - You can omit variables from the rewritten URL - The * and ** operators cannot be matched unless they have a corresponding variable name - e.g. {format=*} or {var=**}. For example, a path_template_match of /static/{format=**} could be rewritten as /static/content/{format} to prefix /content to the URL. Variables can also be re-ordered in a rewrite, so that /{country}/{format}/{suffix=**} can be rewritten as /content/{format}/{country}/{suffix}. At least one non-empty routeRules[].matchRules[].path_template_match is required. Only one of path_prefix_rewrite or path_template_rewrite may be specified.\n\n        * `timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n        * `retry_policy`: The retry policy associates with HttpRouteRule\n\n          * `retry_conditions`: Specifies one or more conditions when this retry policy applies. Valid values are: - 5xx: retry is attempted if the instance or endpoint responds with any 5xx response code, or if the instance or endpoint does not respond at all. For example, disconnects, reset, read timeout, connection failure, and refused streams. - gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. - connect-failure: a retry is attempted on failures connecting to the instance or endpoint. For example, connection timeouts. - retriable-4xx: a retry is attempted if the instance or endpoint responds with a 4xx response code. The only error that you can retry is error code 409. - refused-stream: a retry is attempted if the instance or endpoint resets the stream with a REFUSED_STREAM error code. This reset type indicates that it is safe to retry. - cancelled: a retry is attempted if the gRPC status code in the response header is set to cancelled. - deadline-exceeded: a retry is attempted if the gRPC status code in the response header is set to deadline-exceeded. - internal: a retry is attempted if the gRPC status code in the response header is set to internal. - resource-exhausted: a retry is attempted if the gRPC status code in the response header is set to resource-exhausted. - unavailable: a retry is attempted if the gRPC status code in the response header is set to unavailable. Only the following codes are supported when the URL map is bound to target gRPC proxy that has validateForProxyless field set to true. - cancelled - deadline-exceeded - internal - resource-exhausted - unavailable\n\n          * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n          * `per_try_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n            * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n            * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n        * `request_mirror_policy`: A policy that specifies how requests intended for the route's backends are shadowed to a separate mirrored backend service. The load balancer doesn't wait for responses from the shadow service. Before sending traffic to the shadow service, the host or authority header is suffixed with -shadow.\n\n          * `backend_service`: The full or partial URL to the BackendService resource being mirrored to. The backend service configured for a mirroring policy must reference backends that are of the same type as the original backend service matched in the URL map. Serverless NEG backends are not currently supported as a mirrored backend service.\n\n        * `cors_policy`: The specification for allowing client-side cross-origin requests. For more information about the W3C recommendation for cross-origin resource sharing (CORS), see Fetch API Living Standard.\n\n          * `allow_origins`: Specifies the list of origins that is allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n          * `allow_origin_regexes`: Specifies a regular expression that matches allowed origins. For more information about the regular expression syntax, see Syntax. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n          * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n          * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n          * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n          * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This field translates to the Access-Control-Max-Age header.\n\n          * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This field translates to the Access-Control-Allow-Credentials header. Default is false.\n\n          * `disabled`: If true, the setting specifies the CORS policy is disabled. The default value of false, which indicates that the CORS policy is in effect.\n\n        * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by the load balancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the load balancer for a percentage of requests.\n\n          * `delay`: Specifies the delay introduced by the load balancer before forwarding the request to the backend service as part of fault injection.\n\n            * `fixed_delay`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n              * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n              * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n            * `percentage`: The percentage of traffic for connections, operations, or requests for which a delay is introduced as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n          * `abort`: Specification for how requests are aborted as part of fault injection.\n\n            * `http_status`: The HTTP status code used to abort the request. The value must be from 200 to 599 inclusive. For gRPC protocol, the gRPC status code is mapped to HTTP status code according to this mapping table. HTTP status 200 is mapped to gRPC status UNKNOWN. Injecting an OK status is currently not supported by Traffic Director.\n\n            * `percentage`: The percentage of traffic for connections, operations, or requests that is aborted as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n        * `max_stream_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n      * `url_redirect`: Specifies settings for an HTTP redirect.\n\n        * `host_redirect`: The host that is used in the redirect response instead of the one that was supplied in the request. The value must be from 1 to 255 characters.\n\n        * `path_redirect`: The path that is used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n        * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n        * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are: - MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301. - FOUND, which corresponds to 302. - SEE_OTHER which corresponds to 303. - TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method is retained. - PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method is retained.\n        Possible values:\n          * FOUND\n          * MOVED_PERMANENTLY_DEFAULT\n          * PERMANENT_REDIRECT\n          * SEE_OTHER\n          * TEMPORARY_REDIRECT\n\n        * `https_redirect`: If set to true, the URL scheme in the redirected request is set to HTTPS. If set to false, the URL scheme of the redirected request remains the same as that of the request. This must only be set for URL maps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n        * `strip_query`: If set to true, any accompanying query portion of the original URL is removed before redirecting the request. If set to false, the query portion of the original URL is retained. The default is set to false.\n\n      * `paths`: The list of path patterns to match. Each must start with / and the only place a * is allowed is at the end following a /. The string fed to the path matcher does not include any text after the first ? or #, and those chars are not allowed here.\n\n      * `custom_error_response_policy`: Specifies the custom error response policy that must be applied when the backend service or backend bucket responds with an error.\n\n        * `error_response_rules`: Specifies rules for returning error responses. In a given policy, if you specify rules for both a range of error codes as well as rules for specific error codes then rules with specific error codes have a higher priority. For example, assume that you configure a rule for 401 (Un-authorized) code, and another for all 4 series error codes (4XX). If the backend service returns a 401, then the rule for 401 will be applied. However if the backend service returns a 403, the rule for 4xx takes effect.\n\n          * `match_response_codes`: Valid values include: - A number between 400 and 599: For example 401 or 503, in which case the load balancer applies the policy if the error code exactly matches this value. - 5xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 500 to 599. - 4xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 400 to 499. Values must be unique within matchResponseCodes and across all errorResponseRules of CustomErrorResponsePolicy.\n\n          * `path`: The full path to a file within backendBucket . For example: /errors/defaultError.html path must start with a leading slash. path cannot have trailing slashes. If the file is not available in backendBucket or the load balancer cannot reach the BackendBucket, a simple Not Found Error is returned to the client. The value must be from 1 to 1024 characters\n\n          * `override_response_code`: The HTTP status code returned with the response containing the custom error content. If overrideResponseCode is not supplied, the same response code returned by the original backend bucket or backend service is returned to the client.\n\n        * `error_service`: The full or partial URL to the BackendBucket resource that contains the custom error content. Examples are: - https://www.googleapis.com/compute/v1/projects/project/global/backendBuckets/myBackendBucket - compute/v1/projects/project/global/backendBuckets/myBackendBucket - global/backendBuckets/myBackendBucket If errorService is not specified at lower levels like pathMatcher, pathRule and routeRule, an errorService specified at a higher level in the UrlMap will be used. If UrlMap.defaultCustomErrorResponsePolicy contains one or more errorResponseRules[], it must specify errorService. If load balancer cannot reach the backendBucket, a simple Not Found Error will be returned, with the original response code (or overrideResponseCode if configured). errorService is not supported for internal or regional HTTP/HTTPS load balancers.\n\n    * `route_rules`: The list of HTTP route rules. Use this list instead of pathRules when advanced route matching and routing actions are desired. routeRules are evaluated in order of priority, from the lowest to highest number. Within a given pathMatcher, you can set only one of pathRules or routeRules.\n\n      * `priority`: For routeRules within a given pathMatcher, priority determines the order in which a load balancer interprets routeRules. RouteRules are evaluated in order of priority, from the lowest to highest number. The priority of a rule decreases as its number increases (1, 2, 3, N+1). The first rule that matches the request is applied. You cannot configure two or more routeRules with the same priority. Priority for each rule must be set to a number from 0 to 2147483647 inclusive. Priority numbers can have gaps, which enable you to add or remove rules in the future without affecting the rest of the rules. For example, 1, 2, 3, 4, 5, 9, 12, 16 is a valid series of priority numbers to which you could add rules numbered from 6 to 8, 10 to 11, and 13 to 15 in the future without any impact on existing rules.\n\n      * `description`: The short description conveying the intent of this routeRule. The description can have a maximum length of 1024 characters.\n\n      * `match_rules`: The list of criteria for matching attributes of a request to this routeRule. This list has OR semantics: the request matches this routeRule when any of the matchRules are satisfied. However predicates within a given matchRule have AND semantics. All predicates within a matchRule must match for the request to match the rule.\n\n        * `prefix_match`: For satisfying the matchRule condition, the request's path must begin with the specified prefixMatch. prefixMatch must begin with a /. The value must be from 1 to 1024 characters. Only one of prefixMatch, fullPathMatch or regexMatch must be specified.\n\n        * `full_path_match`: For satisfying the matchRule condition, the path of the request must exactly match the value specified in fullPathMatch after removing any query parameters and anchor that may be part of the original URL. fullPathMatch must be from 1 to 1024 characters. Only one of prefixMatch, fullPathMatch or regexMatch must be specified.\n\n        * `regex_match`: For satisfying the matchRule condition, the path of the request must satisfy the regular expression specified in regexMatch after removing any query parameters and anchor supplied with the original URL. For more information about regular expression syntax, see Syntax. Only one of prefixMatch, fullPathMatch or regexMatch must be specified. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n        * `ignore_case`: Specifies that prefixMatch and fullPathMatch matches are case sensitive. The default value is false. ignoreCase must not be used with regexMatch. Not supported when the URL map is bound to a target gRPC proxy.\n\n        * `header_matches`: Specifies a list of header match criteria, all of which must match corresponding headers in the request.\n\n          * `header_name`: The name of the HTTP header to match. For matching against the HTTP request's authority, use a headerMatch with the header name \":authority\". For matching a request's method, use the headerName \":method\". When the URL map is bound to a target gRPC proxy that has the validateForProxyless field set to true, only non-binary user-specified custom metadata and the `content-type` header are supported. The following transport-level headers cannot be used in header matching rules: `:authority`, `:method`, `:path`, `:scheme`, `user-agent`, `accept-encoding`, `content-encoding`, `grpc-accept-encoding`, `grpc-encoding`, `grpc-previous-rpc-attempts`, `grpc-tags-bin`, `grpc-timeout` and `grpc-trace-bin`.\n\n          * `exact_match`: The value should exactly match contents of exactMatch. Only one of exactMatch, prefixMatch, suffixMatch, regexMatch, presentMatch or rangeMatch must be set.\n\n          * `regex_match`: The value of the header must match the regular expression specified in regexMatch. For more information about regular expression syntax, see Syntax. For matching against a port specified in the HTTP request, use a headerMatch with headerName set to PORT and a regular expression that satisfies the RFC2616 Host header's port specifier. Only one of exactMatch, prefixMatch, suffixMatch, regexMatch, presentMatch or rangeMatch must be set. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n          * `range_match`: HttpRouteRuleMatch criteria for field values that must stay within the specified integer range.\n\n            * `range_start`: The start of the range (inclusive) in signed long integer format.\n\n            * `range_end`: The end of the range (exclusive) in signed long integer format.\n\n          * `present_match`: A header with the contents of headerName must exist. The match takes place whether or not the request's header has a value. Only one of exactMatch, prefixMatch, suffixMatch, regexMatch, presentMatch or rangeMatch must be set.\n\n          * `prefix_match`: The value of the header must start with the contents of prefixMatch. Only one of exactMatch, prefixMatch, suffixMatch, regexMatch, presentMatch or rangeMatch must be set.\n\n          * `suffix_match`: The value of the header must end with the contents of suffixMatch. Only one of exactMatch, prefixMatch, suffixMatch, regexMatch, presentMatch or rangeMatch must be set.\n\n          * `invert_match`: If set to false, the headerMatch is considered a match if the preceding match criteria are met. If set to true, the headerMatch is considered a match if the preceding match criteria are NOT met. The default setting is false.\n\n        * `query_parameter_matches`: Specifies a list of query parameter match criteria, all of which must match corresponding query parameters in the request. Not supported when the URL map is bound to a target gRPC proxy.\n\n          * `name`: The name of the query parameter to match. The query parameter must exist in the request, in the absence of which the request match fails.\n\n          * `present_match`: Specifies that the queryParameterMatch matches if the request contains the query parameter, irrespective of whether the parameter has a value or not. Only one of presentMatch, exactMatch, or regexMatch must be set.\n\n          * `exact_match`: The queryParameterMatch matches if the value of the parameter exactly matches the contents of exactMatch. Only one of presentMatch, exactMatch, or regexMatch must be set.\n\n          * `regex_match`: The queryParameterMatch matches if the value of the parameter matches the regular expression specified by regexMatch. For more information about regular expression syntax, see Syntax. Only one of presentMatch, exactMatch, or regexMatch must be set. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n        * `metadata_filters`: Opaque filter criteria used by the load balancer to restrict routing configuration to a limited set of xDS compliant clients. In their xDS requests to the load balancer, xDS clients present node metadata. When there is a match, the relevant routing configuration is made available to those proxies. For each metadataFilter in this list, if its filterMatchCriteria is set to MATCH_ANY, at least one of the filterLabels must match the corresponding label provided in the metadata. If its filterMatchCriteria is set to MATCH_ALL, then all of its filterLabels must match with corresponding labels provided in the metadata. If multiple metadata filters are specified, all of them need to be satisfied in order to be considered a match. metadataFilters specified here is applied after those specified in ForwardingRule that refers to the UrlMap this HttpRouteRuleMatch belongs to. metadataFilters only applies to load balancers that have loadBalancingScheme set to INTERNAL_SELF_MANAGED. Not supported when the URL map is bound to a target gRPC proxy that has validateForProxyless field set to true.\n\n          * `filter_match_criteria`: Specifies how individual filter label matches within the list of filterLabels and contributes toward the overall metadataFilter match. Supported values are: - MATCH_ANY: at least one of the filterLabels must have a matching label in the provided metadata. - MATCH_ALL: all filterLabels must have matching labels in the provided metadata.\n          Possible values:\n            * MATCH_ALL\n            * MATCH_ANY\n            * NOT_SET\n\n          * `filter_labels`: The list of label value pairs that must match labels in the provided metadata based on filterMatchCriteria This list must not be empty and can have at the most 64 entries.\n\n            * `name`: Name of metadata label. The name can have a maximum length of 1024 characters and must be at least 1 character long.\n\n            * `value`: The value of the label must match the specified value. value can have a maximum length of 1024 characters.\n\n        * `path_template_match`: If specified, the route is a pattern match expression that must match the :path header once the query string is removed. A pattern match allows you to match - The value must be between 1 and 1024 characters - The pattern must start with a leading slash (\"/\") - There may be no more than 5 operators in pattern Precisely one of prefix_match, full_path_match, regex_match or path_template_match must be set.\n\n      * `service`: The full or partial URL of the backend service resource to which traffic is directed if this rule is matched. If routeAction is also specified, advanced routing actions, such as URL rewrites, take effect before sending the request to the backend. However, if service is specified, routeAction cannot contain any weightedBackendServices. Conversely, if routeAction specifies any weightedBackendServices, service must not be specified. Only one of urlRedirect, service or routeAction.weightedBackendService must be set.\n\n      * `route_action`:\n\n        * `weighted_backend_services`: A list of weighted backend services to send traffic to when a route match occurs. The weights determine the fraction of traffic that flows to their corresponding backend service. If all traffic needs to go to a single backend service, there must be one weightedBackendService with weight set to a non-zero number. After a backend service is identified and before forwarding the request to the backend service, advanced routing actions such as URL rewrites and header transformations are applied depending on additional settings specified in this HttpRouteAction.\n\n          * `backend_service`: The full or partial URL to the default BackendService resource. Before forwarding the request to backendService, the load balancer applies any relevant headerActions specified as part of this backendServiceWeight.\n\n          * `weight`: Specifies the fraction of traffic sent to a backend service, computed as weight / (sum of all weightedBackendService weights in routeAction) . The selection of a backend service is determined only for new traffic. Once a user's request has been directed to a backend service, subsequent requests are sent to the same backend service as determined by the backend service's session affinity policy. The value must be from 0 to 1000.\n\n          * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n            * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n            * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n              * `header_name`: The name of the header.\n\n              * `header_value`: The value of the header to add.\n\n              * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n            * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n            * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n              * `header_name`: The name of the header.\n\n              * `header_value`: The value of the header to add.\n\n              * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n        * `url_rewrite`: The spec for modifying the path before sending the request to the matched backend service.\n\n          * `path_prefix_rewrite`: Before forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite. The value must be from 1 to 1024 characters.\n\n          * `host_rewrite`: Before forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite. The value must be from 1 to 255 characters.\n\n          * `path_template_rewrite`: If specified, the pattern rewrites the URL path (based on the :path header) using the HTTP template syntax. A corresponding path_template_match must be specified. Any template variables must exist in the path_template_match field. - -At least one variable must be specified in the path_template_match field - You can omit variables from the rewritten URL - The * and ** operators cannot be matched unless they have a corresponding variable name - e.g. {format=*} or {var=**}. For example, a path_template_match of /static/{format=**} could be rewritten as /static/content/{format} to prefix /content to the URL. Variables can also be re-ordered in a rewrite, so that /{country}/{format}/{suffix=**} can be rewritten as /content/{format}/{country}/{suffix}. At least one non-empty routeRules[].matchRules[].path_template_match is required. Only one of path_prefix_rewrite or path_template_rewrite may be specified.\n\n        * `timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n        * `retry_policy`: The retry policy associates with HttpRouteRule\n\n          * `retry_conditions`: Specifies one or more conditions when this retry policy applies. Valid values are: - 5xx: retry is attempted if the instance or endpoint responds with any 5xx response code, or if the instance or endpoint does not respond at all. For example, disconnects, reset, read timeout, connection failure, and refused streams. - gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. - connect-failure: a retry is attempted on failures connecting to the instance or endpoint. For example, connection timeouts. - retriable-4xx: a retry is attempted if the instance or endpoint responds with a 4xx response code. The only error that you can retry is error code 409. - refused-stream: a retry is attempted if the instance or endpoint resets the stream with a REFUSED_STREAM error code. This reset type indicates that it is safe to retry. - cancelled: a retry is attempted if the gRPC status code in the response header is set to cancelled. - deadline-exceeded: a retry is attempted if the gRPC status code in the response header is set to deadline-exceeded. - internal: a retry is attempted if the gRPC status code in the response header is set to internal. - resource-exhausted: a retry is attempted if the gRPC status code in the response header is set to resource-exhausted. - unavailable: a retry is attempted if the gRPC status code in the response header is set to unavailable. Only the following codes are supported when the URL map is bound to target gRPC proxy that has validateForProxyless field set to true. - cancelled - deadline-exceeded - internal - resource-exhausted - unavailable\n\n          * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n          * `per_try_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n            * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n            * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n        * `request_mirror_policy`: A policy that specifies how requests intended for the route's backends are shadowed to a separate mirrored backend service. The load balancer doesn't wait for responses from the shadow service. Before sending traffic to the shadow service, the host or authority header is suffixed with -shadow.\n\n          * `backend_service`: The full or partial URL to the BackendService resource being mirrored to. The backend service configured for a mirroring policy must reference backends that are of the same type as the original backend service matched in the URL map. Serverless NEG backends are not currently supported as a mirrored backend service.\n\n        * `cors_policy`: The specification for allowing client-side cross-origin requests. For more information about the W3C recommendation for cross-origin resource sharing (CORS), see Fetch API Living Standard.\n\n          * `allow_origins`: Specifies the list of origins that is allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n          * `allow_origin_regexes`: Specifies a regular expression that matches allowed origins. For more information about the regular expression syntax, see Syntax. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n          * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n          * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n          * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n          * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This field translates to the Access-Control-Max-Age header.\n\n          * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This field translates to the Access-Control-Allow-Credentials header. Default is false.\n\n          * `disabled`: If true, the setting specifies the CORS policy is disabled. The default value of false, which indicates that the CORS policy is in effect.\n\n        * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by the load balancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the load balancer for a percentage of requests.\n\n          * `delay`: Specifies the delay introduced by the load balancer before forwarding the request to the backend service as part of fault injection.\n\n            * `fixed_delay`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n              * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n              * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n            * `percentage`: The percentage of traffic for connections, operations, or requests for which a delay is introduced as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n          * `abort`: Specification for how requests are aborted as part of fault injection.\n\n            * `http_status`: The HTTP status code used to abort the request. The value must be from 200 to 599 inclusive. For gRPC protocol, the gRPC status code is mapped to HTTP status code according to this mapping table. HTTP status 200 is mapped to gRPC status UNKNOWN. Injecting an OK status is currently not supported by Traffic Director.\n\n            * `percentage`: The percentage of traffic for connections, operations, or requests that is aborted as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n        * `max_stream_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n      * `url_redirect`: Specifies settings for an HTTP redirect.\n\n        * `host_redirect`: The host that is used in the redirect response instead of the one that was supplied in the request. The value must be from 1 to 255 characters.\n\n        * `path_redirect`: The path that is used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n        * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n        * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are: - MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301. - FOUND, which corresponds to 302. - SEE_OTHER which corresponds to 303. - TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method is retained. - PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method is retained.\n        Possible values:\n          * FOUND\n          * MOVED_PERMANENTLY_DEFAULT\n          * PERMANENT_REDIRECT\n          * SEE_OTHER\n          * TEMPORARY_REDIRECT\n\n        * `https_redirect`: If set to true, the URL scheme in the redirected request is set to HTTPS. If set to false, the URL scheme of the redirected request remains the same as that of the request. This must only be set for URL maps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n        * `strip_query`: If set to true, any accompanying query portion of the original URL is removed before redirecting the request. If set to false, the query portion of the original URL is retained. The default is set to false.\n\n      * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n        * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n        * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n          * `header_name`: The name of the header.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n        * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n        * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n          * `header_name`: The name of the header.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n      * `http_filter_configs`: Outbound route specific configuration for networkservices.HttpFilter resources enabled by Traffic Director. httpFilterConfigs only applies for load balancers with loadBalancingScheme set to INTERNAL_SELF_MANAGED. See ForwardingRule for more details. Not supported when the URL map is bound to a target gRPC proxy that has validateForProxyless field set to true.\n\n        * `filter_name`: Name of the networkservices.HttpFilter resource this configuration belongs to. This name must be known to the xDS client. Example: envoy.wasm\n\n        * `config_type_url`: The fully qualified versioned proto3 type url of the protobuf that the filter expects for its contextual settings, for example: type.googleapis.com/google.protobuf.Struct\n\n        * `config`: The configuration needed to enable the networkservices.HttpFilter resource. The configuration must be YAML formatted and only contain fields defined in the protobuf identified in configTypeUrl\n\n      * `http_filter_metadata`: Outbound route specific metadata supplied to networkservices.HttpFilter resources enabled by Traffic Director. httpFilterMetadata only applies for load balancers with loadBalancingScheme set to INTERNAL_SELF_MANAGED. See ForwardingRule for more details. The only configTypeUrl supported is type.googleapis.com/google.protobuf.Struct Not supported when the URL map is bound to a target gRPC proxy that has validateForProxyless field set to true.\n\n        * `filter_name`: Name of the networkservices.HttpFilter resource this configuration belongs to. This name must be known to the xDS client. Example: envoy.wasm\n\n        * `config_type_url`: The fully qualified versioned proto3 type url of the protobuf that the filter expects for its contextual settings, for example: type.googleapis.com/google.protobuf.Struct\n\n        * `config`: The configuration needed to enable the networkservices.HttpFilter resource. The configuration must be YAML formatted and only contain fields defined in the protobuf identified in configTypeUrl\n\n      * `custom_error_response_policy`: Specifies the custom error response policy that must be applied when the backend service or backend bucket responds with an error.\n\n        * `error_response_rules`: Specifies rules for returning error responses. In a given policy, if you specify rules for both a range of error codes as well as rules for specific error codes then rules with specific error codes have a higher priority. For example, assume that you configure a rule for 401 (Un-authorized) code, and another for all 4 series error codes (4XX). If the backend service returns a 401, then the rule for 401 will be applied. However if the backend service returns a 403, the rule for 4xx takes effect.\n\n          * `match_response_codes`: Valid values include: - A number between 400 and 599: For example 401 or 503, in which case the load balancer applies the policy if the error code exactly matches this value. - 5xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 500 to 599. - 4xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 400 to 499. Values must be unique within matchResponseCodes and across all errorResponseRules of CustomErrorResponsePolicy.\n\n          * `path`: The full path to a file within backendBucket . For example: /errors/defaultError.html path must start with a leading slash. path cannot have trailing slashes. If the file is not available in backendBucket or the load balancer cannot reach the BackendBucket, a simple Not Found Error is returned to the client. The value must be from 1 to 1024 characters\n\n          * `override_response_code`: The HTTP status code returned with the response containing the custom error content. If overrideResponseCode is not supplied, the same response code returned by the original backend bucket or backend service is returned to the client.\n\n        * `error_service`: The full or partial URL to the BackendBucket resource that contains the custom error content. Examples are: - https://www.googleapis.com/compute/v1/projects/project/global/backendBuckets/myBackendBucket - compute/v1/projects/project/global/backendBuckets/myBackendBucket - global/backendBuckets/myBackendBucket If errorService is not specified at lower levels like pathMatcher, pathRule and routeRule, an errorService specified at a higher level in the UrlMap will be used. If UrlMap.defaultCustomErrorResponsePolicy contains one or more errorResponseRules[], it must specify errorService. If load balancer cannot reach the backendBucket, a simple Not Found Error will be returned, with the original response code (or overrideResponseCode if configured). errorService is not supported for internal or regional HTTP/HTTPS load balancers.\n\n    * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n      * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n      * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n        * `header_name`: The name of the header.\n\n        * `header_value`: The value of the header to add.\n\n        * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n      * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n      * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n        * `header_name`: The name of the header.\n\n        * `header_value`: The value of the header to add.\n\n        * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n    * `default_custom_error_response_policy`: Specifies the custom error response policy that must be applied when the backend service or backend bucket responds with an error.\n\n      * `error_response_rules`: Specifies rules for returning error responses. In a given policy, if you specify rules for both a range of error codes as well as rules for specific error codes then rules with specific error codes have a higher priority. For example, assume that you configure a rule for 401 (Un-authorized) code, and another for all 4 series error codes (4XX). If the backend service returns a 401, then the rule for 401 will be applied. However if the backend service returns a 403, the rule for 4xx takes effect.\n\n        * `match_response_codes`: Valid values include: - A number between 400 and 599: For example 401 or 503, in which case the load balancer applies the policy if the error code exactly matches this value. - 5xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 500 to 599. - 4xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 400 to 499. Values must be unique within matchResponseCodes and across all errorResponseRules of CustomErrorResponsePolicy.\n\n        * `path`: The full path to a file within backendBucket . For example: /errors/defaultError.html path must start with a leading slash. path cannot have trailing slashes. If the file is not available in backendBucket or the load balancer cannot reach the BackendBucket, a simple Not Found Error is returned to the client. The value must be from 1 to 1024 characters\n\n        * `override_response_code`: The HTTP status code returned with the response containing the custom error content. If overrideResponseCode is not supplied, the same response code returned by the original backend bucket or backend service is returned to the client.\n\n      * `error_service`: The full or partial URL to the BackendBucket resource that contains the custom error content. Examples are: - https://www.googleapis.com/compute/v1/projects/project/global/backendBuckets/myBackendBucket - compute/v1/projects/project/global/backendBuckets/myBackendBucket - global/backendBuckets/myBackendBucket If errorService is not specified at lower levels like pathMatcher, pathRule and routeRule, an errorService specified at a higher level in the UrlMap will be used. If UrlMap.defaultCustomErrorResponsePolicy contains one or more errorResponseRules[], it must specify errorService. If load balancer cannot reach the backendBucket, a simple Not Found Error will be returned, with the original response code (or overrideResponseCode if configured). errorService is not supported for internal or regional HTTP/HTTPS load balancers.\n\n  * `tests`: The list of expected URL mapping tests. Request to update the UrlMap succeeds only if all test cases pass. You can specify a maximum of 100 tests per UrlMap. Not supported when the URL map is bound to a target gRPC proxy that has validateForProxyless field set to true.\n\n    * `description`: Description of this test case.\n\n    * `host`: Host portion of the URL. If headers contains a host header, then host must also match the header value.\n\n    * `path`: Path portion of the URL.\n\n    * `backend_service_weight`: The weight to use for the supplied host and path when using advanced routing rules that involve traffic splitting.\n\n    * `headers`: HTTP headers for this request. If headers contains a host header, then host must also match the header value.\n\n      * `name`: Header name.\n\n      * `value`: Header value.\n\n    * `service`: Expected BackendService or BackendBucket resource the given URL should be mapped to. The service field cannot be set if expectedRedirectResponseCode is set.\n\n    * `expected_url_redirect`: The expected URL that should be redirected to for the host and path being tested. [Deprecated] This field is deprecated. Use expected_output_url instead.\n\n    * `expected_output_url`: The expected output URL evaluated by the load balancer containing the scheme, host, path and query parameters. For rules that forward requests to backends, the test passes only when expectedOutputUrl matches the request forwarded by the load balancer to backends. For rules with urlRewrite, the test verifies that the forwarded request matches hostRewrite and pathPrefixRewrite in the urlRewrite action. When service is specified, expectedOutputUrl`s scheme is ignored. For rules with urlRedirect, the test passes only if expectedOutputUrl matches the URL in the load balancer's redirect response. If urlRedirect specifies https_redirect, the test passes only if the scheme in expectedOutputUrl is also set to HTTPS. If urlRedirect specifies strip_query, the test passes only if expectedOutputUrl does not contain any query parameters. expectedOutputUrl is optional when service is specified.\n\n    * `expected_redirect_response_code`: For rules with urlRedirect, the test passes only if expectedRedirectResponseCode matches the HTTP status code in load balancer's redirect response. expectedRedirectResponseCode cannot be set when service is set.\n\n  * `default_service`: The full or partial URL of the defaultService resource to which traffic is directed if none of the hostRules match. If defaultRouteAction is also specified, advanced routing actions, such as URL rewrites, take effect before sending the request to the backend. However, if defaultService is specified, defaultRouteAction cannot contain any weightedBackendServices. Conversely, if routeAction specifies any weightedBackendServices, service must not be specified. Only one of defaultService, defaultUrlRedirect , or defaultRouteAction.weightedBackendService must be set. defaultService has no effect when the URL map is bound to a target gRPC proxy that has the validateForProxyless field set to true.\n\n  * `default_route_action`:\n\n    * `weighted_backend_services`: A list of weighted backend services to send traffic to when a route match occurs. The weights determine the fraction of traffic that flows to their corresponding backend service. If all traffic needs to go to a single backend service, there must be one weightedBackendService with weight set to a non-zero number. After a backend service is identified and before forwarding the request to the backend service, advanced routing actions such as URL rewrites and header transformations are applied depending on additional settings specified in this HttpRouteAction.\n\n      * `backend_service`: The full or partial URL to the default BackendService resource. Before forwarding the request to backendService, the load balancer applies any relevant headerActions specified as part of this backendServiceWeight.\n\n      * `weight`: Specifies the fraction of traffic sent to a backend service, computed as weight / (sum of all weightedBackendService weights in routeAction) . The selection of a backend service is determined only for new traffic. Once a user's request has been directed to a backend service, subsequent requests are sent to the same backend service as determined by the backend service's session affinity policy. The value must be from 0 to 1000.\n\n      * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n        * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n        * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n          * `header_name`: The name of the header.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n        * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n        * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n          * `header_name`: The name of the header.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n    * `url_rewrite`: The spec for modifying the path before sending the request to the matched backend service.\n\n      * `path_prefix_rewrite`: Before forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite. The value must be from 1 to 1024 characters.\n\n      * `host_rewrite`: Before forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite. The value must be from 1 to 255 characters.\n\n      * `path_template_rewrite`: If specified, the pattern rewrites the URL path (based on the :path header) using the HTTP template syntax. A corresponding path_template_match must be specified. Any template variables must exist in the path_template_match field. - -At least one variable must be specified in the path_template_match field - You can omit variables from the rewritten URL - The * and ** operators cannot be matched unless they have a corresponding variable name - e.g. {format=*} or {var=**}. For example, a path_template_match of /static/{format=**} could be rewritten as /static/content/{format} to prefix /content to the URL. Variables can also be re-ordered in a rewrite, so that /{country}/{format}/{suffix=**} can be rewritten as /content/{format}/{country}/{suffix}. At least one non-empty routeRules[].matchRules[].path_template_match is required. Only one of path_prefix_rewrite or path_template_rewrite may be specified.\n\n    * `timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `retry_policy`: The retry policy associates with HttpRouteRule\n\n      * `retry_conditions`: Specifies one or more conditions when this retry policy applies. Valid values are: - 5xx: retry is attempted if the instance or endpoint responds with any 5xx response code, or if the instance or endpoint does not respond at all. For example, disconnects, reset, read timeout, connection failure, and refused streams. - gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. - connect-failure: a retry is attempted on failures connecting to the instance or endpoint. For example, connection timeouts. - retriable-4xx: a retry is attempted if the instance or endpoint responds with a 4xx response code. The only error that you can retry is error code 409. - refused-stream: a retry is attempted if the instance or endpoint resets the stream with a REFUSED_STREAM error code. This reset type indicates that it is safe to retry. - cancelled: a retry is attempted if the gRPC status code in the response header is set to cancelled. - deadline-exceeded: a retry is attempted if the gRPC status code in the response header is set to deadline-exceeded. - internal: a retry is attempted if the gRPC status code in the response header is set to internal. - resource-exhausted: a retry is attempted if the gRPC status code in the response header is set to resource-exhausted. - unavailable: a retry is attempted if the gRPC status code in the response header is set to unavailable. Only the following codes are supported when the URL map is bound to target gRPC proxy that has validateForProxyless field set to true. - cancelled - deadline-exceeded - internal - resource-exhausted - unavailable\n\n      * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n      * `per_try_timeout`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n    * `request_mirror_policy`: A policy that specifies how requests intended for the route's backends are shadowed to a separate mirrored backend service. The load balancer doesn't wait for responses from the shadow service. Before sending traffic to the shadow service, the host or authority header is suffixed with -shadow.\n\n      * `backend_service`: The full or partial URL to the BackendService resource being mirrored to. The backend service configured for a mirroring policy must reference backends that are of the same type as the original backend service matched in the URL map. Serverless NEG backends are not currently supported as a mirrored backend service.\n\n    * `cors_policy`: The specification for allowing client-side cross-origin requests. For more information about the W3C recommendation for cross-origin resource sharing (CORS), see Fetch API Living Standard.\n\n      * `allow_origins`: Specifies the list of origins that is allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n      * `allow_origin_regexes`: Specifies a regular expression that matches allowed origins. For more information about the regular expression syntax, see Syntax. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes. Regular expressions can only be used when the loadBalancingScheme is set to INTERNAL_SELF_MANAGED.\n\n      * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n      * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n      * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n      * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This field translates to the Access-Control-Max-Age header.\n\n      * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This field translates to the Access-Control-Allow-Credentials header. Default is false.\n\n      * `disabled`: If true, the setting specifies the CORS policy is disabled. The default value of false, which indicates that the CORS policy is in effect.\n\n    * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by the load balancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the load balancer for a percentage of requests.\n\n      * `delay`: Specifies the delay introduced by the load balancer before forwarding the request to the backend service as part of fault injection.\n\n        * `fixed_delay`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n        * `percentage`: The percentage of traffic for connections, operations, or requests for which a delay is introduced as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n      * `abort`: Specification for how requests are aborted as part of fault injection.\n\n        * `http_status`: The HTTP status code used to abort the request. The value must be from 200 to 599 inclusive. For gRPC protocol, the gRPC status code is mapped to HTTP status code according to this mapping table. HTTP status 200 is mapped to gRPC status UNKNOWN. Injecting an OK status is currently not supported by Traffic Director.\n\n        * `percentage`: The percentage of traffic for connections, operations, or requests that is aborted as part of fault injection. The value must be from 0.0 to 100.0 inclusive.\n\n    * `max_stream_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n  * `default_url_redirect`: Specifies settings for an HTTP redirect.\n\n    * `host_redirect`: The host that is used in the redirect response instead of the one that was supplied in the request. The value must be from 1 to 255 characters.\n\n    * `path_redirect`: The path that is used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n    * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request is used for the redirect. The value must be from 1 to 1024 characters.\n\n    * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are: - MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301. - FOUND, which corresponds to 302. - SEE_OTHER which corresponds to 303. - TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method is retained. - PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method is retained.\n    Possible values:\n      * FOUND\n      * MOVED_PERMANENTLY_DEFAULT\n      * PERMANENT_REDIRECT\n      * SEE_OTHER\n      * TEMPORARY_REDIRECT\n\n    * `https_redirect`: If set to true, the URL scheme in the redirected request is set to HTTPS. If set to false, the URL scheme of the redirected request remains the same as that of the request. This must only be set for URL maps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n    * `strip_query`: If set to true, any accompanying query portion of the original URL is removed before redirecting the request. If set to false, the query portion of the original URL is retained. The default is set to false.\n\n  * `header_action`: The request and response header transformations that take effect before the request is passed along to the selected backendService.\n\n    * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request before forwarding the request to the backendService.\n\n    * `request_headers_to_add`: Headers to add to a matching request before forwarding the request to the backendService.\n\n      * `header_name`: The name of the header.\n\n      * `header_value`: The value of the header to add.\n\n      * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n    * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response before sending the response back to the client.\n\n    * `response_headers_to_add`: Headers to add the response before sending the response back to the client.\n\n      * `header_name`: The name of the header.\n\n      * `header_value`: The value of the header to add.\n\n      * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header. The default value is false.\n\n  * `default_custom_error_response_policy`: Specifies the custom error response policy that must be applied when the backend service or backend bucket responds with an error.\n\n    * `error_response_rules`: Specifies rules for returning error responses. In a given policy, if you specify rules for both a range of error codes as well as rules for specific error codes then rules with specific error codes have a higher priority. For example, assume that you configure a rule for 401 (Un-authorized) code, and another for all 4 series error codes (4XX). If the backend service returns a 401, then the rule for 401 will be applied. However if the backend service returns a 403, the rule for 4xx takes effect.\n\n      * `match_response_codes`: Valid values include: - A number between 400 and 599: For example 401 or 503, in which case the load balancer applies the policy if the error code exactly matches this value. - 5xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 500 to 599. - 4xx: Load Balancer will apply the policy if the backend service responds with any response code in the range of 400 to 499. Values must be unique within matchResponseCodes and across all errorResponseRules of CustomErrorResponsePolicy.\n\n      * `path`: The full path to a file within backendBucket . For example: /errors/defaultError.html path must start with a leading slash. path cannot have trailing slashes. If the file is not available in backendBucket or the load balancer cannot reach the BackendBucket, a simple Not Found Error is returned to the client. The value must be from 1 to 1024 characters\n\n      * `override_response_code`: The HTTP status code returned with the response containing the custom error content. If overrideResponseCode is not supplied, the same response code returned by the original backend bucket or backend service is returned to the client.\n\n    * `error_service`: The full or partial URL to the BackendBucket resource that contains the custom error content. Examples are: - https://www.googleapis.com/compute/v1/projects/project/global/backendBuckets/myBackendBucket - compute/v1/projects/project/global/backendBuckets/myBackendBucket - global/backendBuckets/myBackendBucket If errorService is not specified at lower levels like pathMatcher, pathRule and routeRule, an errorService specified at a higher level in the UrlMap will be used. If UrlMap.defaultCustomErrorResponsePolicy contains one or more errorResponseRules[], it must specify errorService. If load balancer cannot reach the backendBucket, a simple Not Found Error will be returned, with the original response code (or overrideResponseCode if configured). errorService is not supported for internal or regional HTTP/HTTPS load balancers.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field is ignored when inserting a UrlMap. An up-to-date fingerprint must be provided in order to update the UrlMap, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a UrlMap.\n\n  * `region`: [Output Only] URL of the region where the regional URL map resides. This field is not applicable to global URL maps. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_region_url_maps.md",
    "content": "+++\ntitle = \"google_compute_region_url_maps resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_region_url_maps\"\nidentifier = \"inspec/resources/gcp/google_compute_region_url_maps resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_region_url_maps` InSpec audit resource to to test a Google Cloud RegionUrlMap resource.\n\n## Examples\n\n```ruby\n    describe google_compute_region_url_maps(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_region_url_maps` resource:\n\nSee [google_compute_region_url_map](google_compute_region_url_map) for more detailed information.\n\n  * `kinds`: an array of `google_compute_region_url_map` kind\n  * `ids`: an array of `google_compute_region_url_map` id\n  * `creation_timestamps`: an array of `google_compute_region_url_map` creation_timestamp\n  * `names`: an array of `google_compute_region_url_map` name\n  * `descriptions`: an array of `google_compute_region_url_map` description\n  * `self_links`: an array of `google_compute_region_url_map` self_link\n  * `host_rules`: an array of `google_compute_region_url_map` host_rules\n  * `path_matchers`: an array of `google_compute_region_url_map` path_matchers\n  * `tests`: an array of `google_compute_region_url_map` tests\n  * `default_services`: an array of `google_compute_region_url_map` default_service\n  * `default_route_actions`: an array of `google_compute_region_url_map` default_route_action\n  * `default_url_redirects`: an array of `google_compute_region_url_map` default_url_redirect\n  * `header_actions`: an array of `google_compute_region_url_map` header_action\n  * `default_custom_error_response_policies`: an array of `google_compute_region_url_map` default_custom_error_response_policy\n  * `fingerprints`: an array of `google_compute_region_url_map` fingerprint\n  * `regions`: an array of `google_compute_region_url_map` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_regional_disk.md",
    "content": "+++\ntitle = \"google_compute_regional_disk resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_regional_disk\"\nidentifier = \"inspec/resources/gcp/google_compute_regional_disk resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_regional_disk` is used to test a Google Regional Disk resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_regional_disk(project: 'chef-gcp-inspec', name: 'my_disk', region: 'region') do\n  it { should exist }\n  its('type') { should match 'pd-standard' }\nend\n\ndescribe.one do\n  google_compute_regional_disk(project: 'chef-gcp-inspec', name: 'my_disk', region: 'region').labels.each_pair do |key, value|\n    describe key do\n      it { should cmp \"environment\" }\n    end\n  end\nend\n\ndescribe google_compute_regional_disk(project: 'chef-gcp-inspec', name: 'nonexistent', region: 'region') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_regional_disk` resource:\n\n  * `label_fingerprint`: The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `size_gb`: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the sourceImage or sourceSnapshot parameter, or specify it alone to create an empty persistent disk.  If you specify this field along with sourceImage or sourceSnapshot, the value of sizeGb must not be less than the size of the sourceImage or the size of the snapshot.\n\n  * `physical_block_size_bytes`: Physical block size of the persistent disk, in bytes. If not present in a request, a default value is used. Currently supported sizes are 4096 and 16384, other sizes may be added in the future. If an unsupported value is requested, the error message will list the supported values for the caller's project.\n\n  * `type`: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk.\n\n  * `region`: A reference to the region where the disk resides.\n\n  * `replica_zones`: A reference to the zones where the disk resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_regional_disks.md",
    "content": "+++\ntitle = \"google_compute_regional_disks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_regional_disks\"\nidentifier = \"inspec/resources/gcp/google_compute_regional_disks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_regional_disks` is used to test a Google Regional Disk resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\nmost_recent_image = google_compute_image(project: 'debian-cloud', name: 'debian-10-buster-v20191014')\ndescribe google_compute_regional_disks(project: 'chef-gcp-inspec', region: 'region') do\n  it { should exist }\n  its('names') { should include 'inspec-snapshot-disk' }\n  its('source_images') { should include most_recent_image.self_link }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_regional_disks` resource:\n\nSee [google_compute_regional_disk](google_compute_regional_disk) for more detailed information.\n\n  * `ids`: an array of `google_compute_regional_disk` id\n  * `creation_timestamps`: an array of `google_compute_regional_disk` creation_timestamp\n  * `names`: an array of `google_compute_regional_disk` name\n  * `descriptions`: an array of `google_compute_regional_disk` description\n  * `size_gbs`: an array of `google_compute_regional_disk` size_gb\n  * `zones`: an array of `google_compute_zoneal_disk` zone\n  * `source_snapshots`: an array of `google_compute_regional_disk` source_snapshot\n  * `source_snapshot_encryption_keys`: an array of `google_compute_regional_disk` source_snapshot_encryption_key\n  * `source_snapshot_ids`: an array of `google_compute_regional_disk` source_snapshot_id\n  * `source_images`: an array of `google_compute_regional_disk` source_image\n  * `source_image_ids`: an array of `google_compute_regional_disk` source_image_id\n  * `source_image_encryption_keys`: an array of `google_compute_regional_disk` source_image_encryption_key\n  * `types`: an array of `google_compute_regional_disk` type\n  * `licenses`: an array of `google_compute_regional_disk` licenses\n  * `last_attach_timestamps`: an array of `google_compute_regional_disk` last_attach_timestamp\n  * `last_detach_timestamps`: an array of `google_compute_regional_disk` last_detach_timestamp\n  * `users`: an array of `google_compute_regional_disk` users\n  * `disk_encryption_keys`: an array of `google_compute_regional_disk` disk_encryption_key\n  * `labels`: an array of `google_compute_regional_disk` labels\n  * `label_fingerprints`: an array of `google_compute_regional_disk` label_fingerprint\n  * `physical_block_size_bytes`: an array of `google_compute_regional_disk` physical_block_size_bytes\n  * `regions`: an array of `google_compute_regional_disk` region\n  * `replica_zones`: an array of `google_compute_regional_disk` replica_zone\n  * `statuses`: an array of `google_compute_statusal_disk` status\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_regions.md",
    "content": "+++\ntitle = \"google_compute_regions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_regions\"\nidentifier = \"inspec/resources/gcp/google_compute_regions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_regions` is used to test a Google Region resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_regions(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('region_names') { should include \"#{gcp_location}\" }\n  its('region_statuses') { should_not include \"DOWN\" }\n  its('region_ids') { should include \"1290\" }\nend\n\n```\n  ### Use this InSpec resource to enumerate IDs then test in-depth using `google_compute_region`\n```\n  google_compute_regions(project: 'chef-inspec-gcp').region_names.each do |region_name|\n    describe google_compute_region(project: 'chef-inspec-gcp',  region: region_name) do\n      it { should be_up }\n    end\n  end\n```\n\n  ### Test that there are more than a specified number of regions available for the project\n```\n  describe google_compute_regions(project: 'chef-inspec-gcp') do\n    its('count') { should be >= 10}\n  end\n```\n  ### Test that an expected region is available for the project\n```\n  describe google_compute_regions(project: 'chef-inspec-gcp') do\n    its('region_names') { should include 'europe-west2' }\n  end\n```\n  ### Test whether any regions are in status \"DOWN\"\n```\n  describe google_compute_regions(project: 'chef-inspec-gcp') do\n    its('region_statuses') { should_not include \"DOWN\" }\n  end\n```\n\n  ### Test that a subset of all regions matching \"europe*\" are \"UP\"\n```\n  google_compute_regions(project: gcp_project_id).where(region_name: /^europe/).region_names.each do |region_name|\n    describe google_compute_region(project: 'chef-inspec-gcp',  region: region_name) do\n      it { should be_up }\n    end\n  end\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_regions` resource:\n\nSee [google_compute_region](google_compute_region) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_region` creation_timestamp\n  * `deprecateds`: an array of `google_compute_region` deprecated\n  * `descriptions`: an array of `google_compute_region` description\n  * `region_ids`: an array of `google_compute_region` id\n  * `region_names`: an array of `google_compute_region` name\n  * `quotas`: an array of `google_compute_region` quotas\n  * `region_statuses`: an array of `google_compute_region` status\n  * `zones`: an array of `google_compute_region` zones\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_reservation.md",
    "content": "+++\ntitle = \"google_compute_reservation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_reservation\"\nidentifier = \"inspec/resources/gcp/google_compute_reservation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_reservation` InSpec audit resource to to test a Google Cloud Reservation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_reservation(project: 'chef-gcp-inspec', name: ' value_name', zone: ' value_zone') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('description') { should cmp 'value_description' }\n\tits('name') { should cmp 'value_name' }\n\tits('commitment') { should cmp 'value_commitment' }\n\tits('status') { should cmp 'value_status' }\n\tits('delete_at_time') { should cmp 'value_deleteattime' }\n\nend\n\ndescribe google_compute_reservation(project: 'chef-gcp-inspec', name: \"does_not_exit\", zone: ' value_zone') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_reservation` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#reservations for reservations.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined fully-qualified URL for this resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `zone`: Zone in which the reservation resides. A zone must be provided if the reservation is created within a commitment.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `name`: The name of the resource, provided by the client when initially creating the resource. The resource name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `specific_reservation`: This reservation type allows to pre allocate specific instance configuration. Next ID: 6\n\n    * `instance_properties`: Properties of the SKU instances being reserved. Next ID: 9\n\n      * `machine_type`: Specifies type of machine (name only) which has fixed number of vCPUs and fixed amount of memory. This also includes specifying custom machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.\n\n      * `guest_accelerators`: Specifies accelerator type and count.\n\n        * `accelerator_type`: Full or partial URL of the accelerator type resource to attach to this instance. For example: projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100 If you are creating an instance template, specify only the accelerator name. See GPUs on Compute Engine for a full list of accelerator types.\n\n        * `accelerator_count`: The number of the guest accelerator cards exposed to this instance.\n\n      * `min_cpu_platform`: Minimum cpu platform the reservation.\n\n      * `local_ssds`: Specifies amount of local ssd to reserve with each instance. The type of disk is local-ssd.\n\n        * `disk_size_gb`: Specifies the size of the disk in base-2 GB.\n\n        * `interface`: Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI. For performance characteristics of SCSI over NVMe, see Local SSD performance.\n        Possible values:\n          * NVDIMM\n          * NVME\n          * SCSI\n\n      * `maintenance_freeze_duration_hours`: Specifies the number of hours after reservation creation where instances using the reservation won't be scheduled for maintenance.\n\n      * `location_hint`: An opaque location hint used to place the allocation close to other resources. This field is for use by internal tools that use the public API.\n\n      * `maintenance_interval`: Specifies the frequency of planned maintenance events. The accepted values are: `PERIODIC`.\n      Possible values:\n        * AS_NEEDED\n        * PERIODIC\n        * RECURRENT\n\n    * `count`: Specifies the number of resources that are allocated.\n\n    * `in_use_count`: [Output Only] Indicates how many instances are in use.\n\n    * `assured_count`: [Output Only] Indicates how many instances are actually usable currently.\n\n    * `source_instance_template`: Specifies the instance template to create the reservation. If you use this field, you must exclude the instanceProperties field. This field is optional, and it can be a full or partial URL. For example, the following are all valid URLs to an instance template: - https://www.googleapis.com/compute/v1/projects/project /global/instanceTemplates/instanceTemplate - projects/project/global/instanceTemplates/instanceTemplate - global/instanceTemplates/instanceTemplate \n\n  * `aggregate_reservation`: This reservation type is specified by total resource amounts (e.g. total count of CPUs) and can account for multiple instance SKUs. In other words, one can create instances of varying shapes against this reservation.\n\n    * `vm_family`: The VM family that all instances scheduled against this reservation must belong to.\n    Possible values:\n      * VM_FAMILY_CLOUD_TPU_LITE_DEVICE_CT5L\n      * VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT5LP\n      * VM_FAMILY_CLOUD_TPU_POD_SLICE_CT4P\n\n    * `reserved_resources`: List of reserved resources (CPUs, memory, accelerators).\n\n      * `accelerator`: \n\n        * `accelerator_count`: Number of accelerators of specified type.\n\n        * `accelerator_type`: Full or partial URL to accelerator type. e.g. \"projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l\"\n\n    * `in_use_resources`: [Output only] List of resources currently in use.\n\n      * `accelerator`: \n\n        * `accelerator_count`: Number of accelerators of specified type.\n\n        * `accelerator_type`: Full or partial URL to accelerator type. e.g. \"projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l\"\n\n    * `workload_type`: The workload type of the instances that will target this reservation.\n    Possible values:\n      * BATCH\n      * SERVING\n      * UNSPECIFIED\n\n  * `commitment`: [Output Only] Full or partial URL to a parent commitment. This field displays for reservations that are tied to a commitment.\n\n  * `specific_reservation_required`: Indicates whether the reservation can be consumed by VMs with affinity for \"any\" reservation. If the field is set, then only VMs that target the reservation by name can consume from this reservation.\n\n  * `status`: [Output Only] The status of the reservation.\n  Possible values:\n    * CREATING\n    * DELETING\n    * INVALID\n    * READY\n    * UPDATING\n\n  * `share_settings`: The share setting for reservations and sole tenancy node groups.\n\n    * `share_type`: Type of sharing for this shared-reservation\n    Possible values:\n      * DIRECT_PROJECTS_UNDER_SPECIFIC_FOLDERS\n      * LOCAL\n      * ORGANIZATION\n      * SHARE_TYPE_UNSPECIFIED\n      * SPECIFIC_PROJECTS\n\n    * `projects`: A List of Project names to specify consumer projects for this shared-reservation. This is only valid when share_type's value is SPECIFIC_PROJECTS.\n\n    * `project_map`: A map of project id and project config. This is only valid when share_type's value is SPECIFIC_PROJECTS.\n\n      * `additional_properties`: Config for each project in the share settings.\n\n    * `folder_map`: A map of folder id and folder config to specify consumer projects for this shared-reservation. This is only valid when share_type's value is DIRECT_PROJECTS_UNDER_SPECIFIC_FOLDERS. Folder id should be a string of number, and without \"folders/\" prefix.\n\n      * `additional_properties`: Config for each folder in the share settings.\n\n  * `satisfies_pzs`: [Output Only] Reserved for future use.\n\n  * `resource_policies`: Resource policies to be added to this reservation. The key is defined by user, and the value is resource policy url. This is to define placement policy with reservation.\n\n    * `additional_properties`: \n\n  * `resource_status`: [Output Only] Contains output only fields.\n\n    * `specific_sku_allocation`: Contains Properties set for the reservation.\n\n      * `source_instance_template_id`: ID of the instance template used to populate reservation properties.\n\n  * `delete_at_time`: Absolute time in future when the reservation will be auto-deleted by Compute Engine. Timestamp is represented in RFC3339 text format.\n\n  * `delete_after_duration`: A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like \"day\" or \"month\". Range is approximately 10,000 years.\n\n    * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n    * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 `seconds` field and a positive `nanos` field. Must be from 0 to 999,999,999 inclusive.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_reservations.md",
    "content": "+++\ntitle = \"google_compute_reservations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_reservations\"\nidentifier = \"inspec/resources/gcp/google_compute_reservations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_reservations` InSpec audit resource to to test a Google Cloud Reservation resource.\n\n## Examples\n\n```ruby\n    describe google_compute_reservations(project: 'chef-gcp-inspec', zone: ' value_zone') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_reservations` resource:\n\nSee [google_compute_reservation](google_compute_reservation) for more detailed information.\n\n  * `kinds`: an array of `google_compute_reservation` kind\n  * `ids`: an array of `google_compute_reservation` id\n  * `creation_timestamps`: an array of `google_compute_reservation` creation_timestamp\n  * `self_links`: an array of `google_compute_reservation` self_link\n  * `self_link_with_ids`: an array of `google_compute_reservation` self_link_with_id\n  * `zones`: an array of `google_compute_reservation` zone\n  * `descriptions`: an array of `google_compute_reservation` description\n  * `names`: an array of `google_compute_reservation` name\n  * `specific_reservations`: an array of `google_compute_reservation` specific_reservation\n  * `aggregate_reservations`: an array of `google_compute_reservation` aggregate_reservation\n  * `commitments`: an array of `google_compute_reservation` commitment\n  * `specific_reservation_requireds`: an array of `google_compute_reservation` specific_reservation_required\n  * `statuses`: an array of `google_compute_reservation` status\n  * `share_settings`: an array of `google_compute_reservation` share_settings\n  * `satisfies_pzs`: an array of `google_compute_reservation` satisfies_pzs\n  * `resource_policies`: an array of `google_compute_reservation` resource_policies\n  * `resource_statuses`: an array of `google_compute_reservation` resource_status\n  * `delete_at_times`: an array of `google_compute_reservation` delete_at_time\n  * `delete_after_durations`: an array of `google_compute_reservation` delete_after_duration\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_resource_policies.md",
    "content": "+++\ntitle = \"google_compute_resource_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_resource_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_resource_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_resource_policies` InSpec audit resource to to test a Google Cloud ResourcePolicy resource.\n\n## Examples\n\n```ruby\n  describe google_compute_resource_policies(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_resource_policies` resource:\n\nSee [google_compute_resource_policy](google_compute_resource_policy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_resource_policy` kind\n  * `ids`: an array of `google_compute_resource_policy` id\n  * `creation_timestamps`: an array of `google_compute_resource_policy` creation_timestamp\n  * `self_links`: an array of `google_compute_resource_policy` self_link\n  * `self_link_with_ids`: an array of `google_compute_resource_policy` self_link_with_id\n  * `regions`: an array of `google_compute_resource_policy` region\n  * `descriptions`: an array of `google_compute_resource_policy` description\n  * `names`: an array of `google_compute_resource_policy` name\n  * `vm_maintenance_policies`: an array of `google_compute_resource_policy` vm_maintenance_policy\n  * `snapshot_schedule_policies`: an array of `google_compute_resource_policy` snapshot_schedule_policy\n  * `group_placement_policies`: an array of `google_compute_resource_policy` group_placement_policy\n  * `instance_schedule_policies`: an array of `google_compute_resource_policy` instance_schedule_policy\n  * `statuses`: an array of `google_compute_resource_policy` status\n  * `resource_statuses`: an array of `google_compute_resource_policy` resource_status\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_resource_policy.md",
    "content": "+++\ntitle = \"google_compute_resource_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_resource_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_resource_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_resource_policy` InSpec audit resource to to test a Google Cloud ResourcePolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_resource_policy(project: 'chef-gcp-inspec', region: 'value_region', name: 'value_name') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('region') { should cmp 'value_region' }\n\tits('description') { should cmp 'value_description' }\n\tits('name') { should cmp 'value_name' }\n\tits('status') { should cmp 'value_status' }\nend\n\ndescribe google_compute_resource_policy(project: 'chef-gcp-inspec', region: ' value_region', name: 'value_name') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_resource_policy` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#resource_policies for resource policies.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `self_link`: [Output Only] Server-defined fully-qualified URL for this resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `region`:\n\n  * `description`:\n\n  * `name`: The name of the resource, provided by the client when initially creating the resource. The resource name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `vm_maintenance_policy`:\n\n    * `maintenance_window`: A maintenance window for VMs. When set, we restrict our maintenance operations to this window.\n\n      * `daily_maintenance_window`: Time window specified for daily operations.\n\n        * `days_in_cycle`: Defines a schedule with units measured in days. The value determines how many days pass between the start of each cycle.\n\n        * `start_time`: Start time of the window. This must be in UTC format that resolves to one of 00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example, both 13:00-5 and 08:00 are valid.\n\n        * `duration`: [Output only] A predetermined duration for the window, automatically chosen to be the smallest possible in the given scenario.\n\n    * `concurrency_control_group`: A concurrency control configuration. Defines a group config that, when attached to an instance, recognizes that instance as part of a group of instances where only up the concurrency_limit of instances in that group can undergo simultaneous maintenance. For more information: go/concurrency-control-design-doc\n\n      * `concurrency_limit`:\n\n  * `snapshot_schedule_policy`: A snapshot schedule policy specifies when and how frequently snapshots are to be created for the target disk. Also specifies how many and how long these scheduled snapshots should be retained.\n\n    * `schedule`: A schedule for disks where the schedueled operations are performed.\n\n      * `hourly_schedule`: Time window specified for hourly operations.\n\n        * `hours_in_cycle`: Defines a schedule with units measured in hours. The value determines how many hours pass between the start of each cycle.\n\n        * `start_time`: Time within the window to start the operations. It must be in format \"HH:MM\", where HH : [00-23] and MM : [00-00] GMT.\n\n        * `duration`: [Output only] Duration of the time window, automatically chosen to be smallest possible in the given scenario.\n\n      * `daily_schedule`: Time window specified for daily operations.\n\n        * `days_in_cycle`: Defines a schedule with units measured in days. The value determines how many days pass between the start of each cycle.\n\n        * `start_time`: Start time of the window. This must be in UTC format that resolves to one of 00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example, both 13:00-5 and 08:00 are valid.\n\n        * `duration`: [Output only] A predetermined duration for the window, automatically chosen to be the smallest possible in the given scenario.\n\n      * `weekly_schedule`: Time window specified for weekly operations.\n\n        * `day_of_weeks`: Up to 7 intervals/windows, one for each day of the week.\n\n          * `day`: Defines a schedule that runs on specific days of the week. Specify one or more days. The following options are available: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.\n          Possible values:\n            * FRIDAY\n            * INVALID\n            * MONDAY\n            * SATURDAY\n            * SUNDAY\n            * THURSDAY\n            * TUESDAY\n            * WEDNESDAY\n\n          * `start_time`: Time within the window to start the operations. It must be in format \"HH:MM\", where HH : [00-23] and MM : [00-00] GMT.\n\n          * `duration`: [Output only] Duration of the time window, automatically chosen to be smallest possible in the given scenario.\n\n    * `retention_policy`: Policy for retention of scheduled snapshots.\n\n      * `max_retention_days`: Maximum age of the snapshot that is allowed to be kept.\n\n      * `on_policy_switch`:\n      Possible values:\n        * DO_NOT_RETROACTIVELY_APPLY\n        * RETROACTIVELY_APPLY\n        * UNSPECIFIED_ON_POLICY_SWITCH\n\n      * `on_source_disk_delete`: Specifies the behavior to apply to scheduled snapshots when the source disk is deleted.\n      Possible values:\n        * APPLY_RETENTION_POLICY\n        * KEEP_AUTO_SNAPSHOTS\n        * UNSPECIFIED_ON_SOURCE_DISK_DELETE\n\n    * `snapshot_properties`: Specified snapshot properties for scheduled snapshots created by this policy.\n\n      * `labels`: Labels to apply to scheduled snapshots. These can be later modified by the setLabels method. Label values may be empty.\n\n        * `additional_properties`:\n\n      * `storage_locations`: Cloud Storage bucket storage location of the auto snapshot (regional or multi-regional).\n\n      * `guest_flush`: Indication to perform a 'guest aware' snapshot.\n\n      * `chain_name`: Chain name that the snapshot is created in.\n\n  * `group_placement_policy`: A GroupPlacementPolicy specifies resource placement configuration. It specifies the failure bucket separation as well as network locality\n\n    * `style`: Specifies instances to hosts placement relationship\n    Possible values:\n      * COMPACT\n      * FULLY_SPREAD\n      * UNSPECIFIED_PLACEMENT_TYPE\n\n    * `locality`: Specifies network locality\n    Possible values:\n      * BEST_EFFORT\n      * STRICT\n      * UNSPECIFIED_LOCALITY\n\n    * `vm_count`: Number of VMs in this placement group. Google does not recommend that you use this field unless you use a compact policy and you want your policy to work only if it contains this exact number of VMs.\n\n    * `availability_domain_count`: The number of availability domains to spread instances across. If two instances are in different availability domain, they are not in the same low latency network.\n\n    * `collocation`: Specifies network collocation\n    Possible values:\n      * CLUSTERED\n      * COLLOCATED\n      * UNSPECIFIED_COLLOCATION\n\n    * `scope`: Scope specifies the availability domain to which the VMs should be spread.\n    Possible values:\n      * HOST\n      * UNSPECIFIED_SCOPE\n\n    * `tpu_topology`: Specifies the shape of the TPU slice\n\n    * `max_distance`: Specifies the number of max logical switches.\n\n    * `slice_count`: Specifies the number of slices in a multislice workload.\n\n  * `instance_schedule_policy`: An InstanceSchedulePolicy specifies when and how frequent certain operations are performed on the instance.\n\n    * `vm_start_schedule`: Schedule for an instance operation.\n\n      * `schedule`: Specifies the frequency for the operation, using the unix-cron format.\n\n    * `vm_stop_schedule`: Schedule for an instance operation.\n\n      * `schedule`: Specifies the frequency for the operation, using the unix-cron format.\n\n    * `time_zone`: Specifies the time zone to be used in interpreting Schedule.schedule. The value of this field must be a time zone name from the tz database: https://wikipedia.org/wiki/Tz_database.\n\n    * `start_time`: The start time of the schedule. The timestamp is an RFC3339 string.\n\n    * `expiration_time`: The expiration time of the schedule. The timestamp is an RFC3339 string.\n\n  * `status`: [Output Only] The status of resource policy creation.\n  Possible values:\n    * CREATING\n    * DELETING\n    * EXPIRED\n    * INVALID\n    * READY\n\n  * `resource_status`: Contains output only fields. Use this sub-message for all output fields set on ResourcePolicy. The internal structure of this \"status\" field should mimic the structure of ResourcePolicy proto specification.\n\n    * `instance_schedule_policy`:\n\n      * `next_run_start_time`: [Output Only] The next time the schedule is planned to run. The actual time might be slightly different. The timestamp is an RFC3339 string.\n\n      * `last_run_start_time`: [Output Only] The last time the schedule successfully ran. The timestamp is an RFC3339 string.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_route.md",
    "content": "+++\ntitle = \"google_compute_route resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_route\"\nidentifier = \"inspec/resources/gcp/google_compute_route resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_route` is used to test a Google Route resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_route(project: 'chef-gcp-inspec', name: 'inspec-gcp-route') do\n  it { should exist }\n  its('dest_range') { should eq '15.0.0.0/24' }\n  its('network') { should match /\\/gcp-inspec-network$/ }\n  its('next_hop_ip') { should eq '10.2.0.1' }\n  its('priority') { should eq '100' }\nend\n\ndescribe google_compute_route(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_route` resource:\n\n\n  * `dest_range`: The destination range of outgoing packets that this route applies to. Only IPv4 is supported.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.  Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network`: The network that this route applies to.\n\n  * `priority`: The priority of this route. Priority is used to break ties in cases where there is more than one matching route of equal prefix length.  In the case of two routes with equal prefix length, the one with the lowest-numbered priority value wins.  Default value is 1000. Valid range is 0 through 65535.\n\n  * `tags`: A list of instance tags to which this route applies.\n\n  * `next_hop_gateway`: URL to a gateway that should handle matching packets.  Currently, you can only specify the internet gateway, using a full or partial valid URL:  * https://www.googleapis.com/compute/v1/projects/project/ global/gateways/default-internet-gateway * projects/project/global/gateways/default-internet-gateway * global/gateways/default-internet-gateway\n\n  * `next_hop_instance`: URL to an instance that should handle matching packets. You can specify this as a full or partial URL. For example:  * https://www.googleapis.com/compute/v1/projects/project/zones/zone/ instances/instance * projects/project/zones/zone/instances/instance * zones/zone/instances/instance\n\n  * `next_hop_ip`: Network IP address of an instance that should handle matching packets.\n\n  * `next_hop_vpn_tunnel`: URL to a VpnTunnel that should handle matching packets.\n\n  * `next_hop_network`: URL to a Network that should handle matching packets.\n\n  * `next_hop_ilb`: The URL to a forwarding rule of type loadBalancingScheme=INTERNAL that should handle matching packets. You can only specify the forwarding rule as a partial or full URL. For example, the following are all valid URLs: https://www.googleapis.com/compute/v1/projects/project/regions/region/forwardingRules/forwardingRule regions/region/forwardingRules/forwardingRule Note that this can only be used when the destinationRange is a public (non-RFC 1918) IP CIDR range.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_router.md",
    "content": "+++\ntitle = \"google_compute_router resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_router\"\nidentifier = \"inspec/resources/gcp/google_compute_router resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_router` is used to test a Google Router resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_router(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-gcp-router') do\n  it { should exist }\n  its('bgp.asn') { should eq '64514' }\n  its('bgp.advertise_mode') { should eq 'CUSTOM' }\n  its('bgp.advertised_groups') { should include 'ALL_SUBNETS' }\n  its('bgp.advertised_ip_ranges.count') { should eq 2 }\n  its('bgp.advertised_ip_ranges.first.range') { should eq '1.2.3.4' }\n  its('bgp.advertised_ip_ranges.last.range') { should eq '1.2.3.4' }\n    its('network') { should match /\\/gcp-inspec-network$/ }\n  end\n\ndescribe google_compute_router(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_router` resource:\n\n\n  * `id`: The unique identifier for the resource.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource.\n\n  * `network`: A reference to the network to which this router belongs.\n\n  * `bgp`: BGP information specific to this router.\n\n    * `asn`: Local BGP Autonomous System Number (ASN). Must be an RFC6996 private ASN, either 16-bit or 32-bit. The value will be fixed for this router resource. All VPN tunnels that link to this router will have the same local ASN.\n\n    * `advertise_mode`: User-specified flag to indicate which mode to use for advertisement.\n    Possible values:\n      * DEFAULT\n      * CUSTOM\n\n    * `advertised_groups`: User-specified list of prefix groups to advertise in custom mode. This field can only be populated if advertiseMode is CUSTOM and is advertised to all peers of the router. These groups will be advertised in addition to any specified prefixes. Leave this field blank to advertise no custom groups.  This enum field has the one valid value: ALL_SUBNETS\n\n    * `advertised_ip_ranges`: User-specified list of individual IP ranges to advertise in custom mode. This field can only be populated if advertiseMode is CUSTOM and is advertised to all peers of the router. These IP ranges will be advertised in addition to any specified groups. Leave this field blank to advertise no custom IP ranges.\n\n      * `range`: The IP range to advertise. The value must be a CIDR-formatted string.\n\n      * `description`: User-specified description for the IP range.\n\n  * `region`: Region where the router resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_router_nat.md",
    "content": "+++\ntitle = \"google_compute_router_nat resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_router_nat\"\nidentifier = \"inspec/resources/gcp/google_compute_router_nat resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_router_nat` is used to test a Google RouterNat resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_router_nat(project: 'chef-gcp-inspec', region: 'europe-west2', router: 'inspec-gcp-router', name: 'inspec-router-nat') do\n  it { should exist }\n  its('nat_ip_allocate_option') { should cmp 'AUTO_ONLY' }\n  its('source_subnetwork_ip_ranges_to_nat') { should cmp 'ALL_SUBNETWORKS_ALL_IP_RANGES' }\n  its('min_ports_per_vm') { should cmp '2' }\n  its('log_config.enable') { should cmp 'true' }\n  its('log_config.filter') { should cmp 'ERRORS_ONLY' }\nend\n\ndescribe google_compute_router(project: 'chef-gcp-inspec', region: 'europe-west2', router: 'nonexistent', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_router_nat` resource:\n\n\n  * `name`: Name of the NAT service. The name must be 1-63 characters long and comply with RFC1035.\n\n  * `nat_ip_allocate_option`: How external IPs should be allocated for this NAT. Valid values are `AUTO_ONLY` for only allowing NAT IPs allocated by Google Cloud Platform, or `MANUAL_ONLY` for only user-allocated NAT IP addresses.\n  Possible values:\n    * MANUAL_ONLY\n    * AUTO_ONLY\n\n  * `nat_ips`: Self-links of NAT IPs. Only valid if natIpAllocateOption is set to MANUAL_ONLY.\n\n  * `drain_nat_ips`: A list of URLs of the IP resources to be drained. These IPs must be valid static external IPs that have been assigned to the NAT.\n\n  * `source_subnetwork_ip_ranges_to_nat`: How NAT should be configured per Subnetwork. If `ALL_SUBNETWORKS_ALL_IP_RANGES`, all of the IP ranges in every Subnetwork are allowed to Nat. If `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, all of the primary IP ranges in every Subnetwork are allowed to Nat. `LIST_OF_SUBNETWORKS`: A list of Subnetworks are allowed to Nat (specified in the field subnetwork below). Note that if this field contains ALL_SUBNETWORKS_ALL_IP_RANGES or ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES, then there should not be any other RouterNat section in any Router for this network in this region.\n  Possible values:\n    * ALL_SUBNETWORKS_ALL_IP_RANGES\n    * ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES\n    * LIST_OF_SUBNETWORKS\n\n  * `subnetwork`: One or more subnetwork NAT configurations. Only used if `source_subnetwork_ip_ranges_to_nat` is set to `LIST_OF_SUBNETWORKS`\n\n    * `name`: Self-link of subnetwork to NAT\n\n    * `source_ip_ranges_to_nat`: List of options for which source IPs in the subnetwork should have NAT enabled. Supported values include: `ALL_IP_RANGES`, `LIST_OF_SECONDARY_IP_RANGES`, `PRIMARY_IP_RANGE`.\n\n    * `secondary_ip_range_names`: List of the secondary ranges of the subnetwork that are allowed to use NAT. This can be populated only if `LIST_OF_SECONDARY_IP_RANGES` is one of the values in sourceIpRangesToNat\n\n  * `min_ports_per_vm`: Minimum number of ports allocated to a VM from this NAT.\n\n  * `udp_idle_timeout_sec`: Timeout (in seconds) for UDP connections. Defaults to 30s if not set.\n\n  * `icmp_idle_timeout_sec`: Timeout (in seconds) for ICMP connections. Defaults to 30s if not set.\n\n  * `tcp_established_idle_timeout_sec`: Timeout (in seconds) for TCP established connections. Defaults to 1200s if not set.\n\n  * `tcp_transitory_idle_timeout_sec`: Timeout (in seconds) for TCP transitory connections. Defaults to 30s if not set.\n\n  * `log_config`: Configuration for logging on NAT\n\n    * `enable`: Indicates whether or not to export logs.\n\n    * `filter`: Specifies the desired filtering of logs on this NAT.\n    Possible values:\n      * ERRORS_ONLY\n      * TRANSLATIONS_ONLY\n      * ALL\n\n  * `enable_endpoint_independent_mapping`: Specifies if endpoint independent mapping is enabled. This is enabled by default. For more information see the [official documentation](https://cloud.google.com/nat/docs/overview#specs-rfcs).\n\n  * `router`: The name of the Cloud Router in which this NAT will be configured.\n\n  * `region`: Region where the router and NAT reside.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_router_nats.md",
    "content": "+++\ntitle = \"google_compute_router_nats resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_router_nats\"\nidentifier = \"inspec/resources/gcp/google_compute_router_nats resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_router_nats` is used to test a Google RouterNat resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_router_nats(project: 'chef-gcp-inspec', region: 'europe-west2', router: 'inspec-gcp-router') do\n  its('names') { should include 'inspec-router-nat' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_router_nats` resource:\n\nSee [google_compute_router_nat](google_compute_router_nat) for more detailed information.\n\n  * `names`: an array of `google_compute_router_nat` name\n  * `nat_ip_allocate_options`: an array of `google_compute_router_nat` nat_ip_allocate_option\n  * `nat_ips`: an array of `google_compute_router_nat` nat_ips\n  * `drain_nat_ips`: an array of `google_compute_router_nat` drain_nat_ips\n  * `source_subnetwork_ip_ranges_to_nats`: an array of `google_compute_router_nat` source_subnetwork_ip_ranges_to_nat\n  * `subnetworks`: an array of `google_compute_router_nat` subnetwork\n  * `min_ports_per_vms`: an array of `google_compute_router_nat` min_ports_per_vm\n  * `udp_idle_timeout_secs`: an array of `google_compute_router_nat` udp_idle_timeout_sec\n  * `icmp_idle_timeout_secs`: an array of `google_compute_router_nat` icmp_idle_timeout_sec\n  * `tcp_established_idle_timeout_secs`: an array of `google_compute_router_nat` tcp_established_idle_timeout_sec\n  * `tcp_transitory_idle_timeout_secs`: an array of `google_compute_router_nat` tcp_transitory_idle_timeout_sec\n  * `log_configs`: an array of `google_compute_router_nat` log_config\n  * `enable_endpoint_independent_mappings`: an array of `google_compute_router_nat` enable_endpoint_independent_mapping\n  * `routers`: an array of `google_compute_router_nat` router\n  * `regions`: an array of `google_compute_router_nat` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_routers.md",
    "content": "+++\ntitle = \"google_compute_routers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_routers\"\nidentifier = \"inspec/resources/gcp/google_compute_routers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_routers` is used to test a Google Router resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_routers(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('names') { should include 'inspec-gcp-router' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_routers` resource:\n\nSee [google_compute_router](google_compute_router) for more detailed information.\n\n  * `ids`: an array of `google_compute_router` id\n  * `creation_timestamps`: an array of `google_compute_router` creation_timestamp\n  * `names`: an array of `google_compute_router` name\n  * `descriptions`: an array of `google_compute_router` description\n  * `networks`: an array of `google_compute_router` network\n  * `bgps`: an array of `google_compute_router` bgp\n  * `regions`: an array of `google_compute_router` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_routes.md",
    "content": "+++\ntitle = \"google_compute_routes resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_routes\"\nidentifier = \"inspec/resources/gcp/google_compute_routes resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_routes` is used to test a Google Route resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_routes(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('dest_ranges') { should include '15.0.0.0/24' }\n  its('next_hop_ips') { should include '10.2.0.1' }\n  its('priorities') { should include '100' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_routes` resource:\n\nSee [google_compute_route](google_compute_route) for more detailed information.\n\n  * `dest_ranges`: an array of `google_compute_route` dest_range\n  * `descriptions`: an array of `google_compute_route` description\n  * `names`: an array of `google_compute_route` name\n  * `networks`: an array of `google_compute_route` network\n  * `priorities`: an array of `google_compute_route` priority\n  * `tags`: an array of `google_compute_route` tags\n  * `next_hop_gateways`: an array of `google_compute_route` next_hop_gateway\n  * `next_hop_instances`: an array of `google_compute_route` next_hop_instance\n  * `next_hop_ips`: an array of `google_compute_route` next_hop_ip\n  * `next_hop_vpn_tunnels`: an array of `google_compute_route` next_hop_vpn_tunnel\n  * `next_hop_networks`: an array of `google_compute_route` next_hop_network\n  * `next_hop_ilbs`: an array of `google_compute_route` next_hop_ilb\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_security_policies.md",
    "content": "+++\ntitle = \"google_compute_security_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_security_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_security_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_security_policies` is used to test a Google SecurityPolicy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_security_policies(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\n  its('names') { should include 'sec-policy' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_security_policies` resource:\n\nSee [google_compute_security_policy](google_compute_security_policy) for more detailed information.\n\n  * `names`: an array of `google_compute_security_policy` name\n  * `ids`: an array of `google_compute_security_policy` id\n  * `rules`: an array of `google_compute_security_policy` rules\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_security_policy.md",
    "content": "+++\ntitle = \"google_compute_security_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_security_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_security_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_security_policy` is used to test a Google SecurityPolicy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_security_policy(project: 'chef-gcp-inspec', name: 'sec-policy') do\n  it { should exist }\n  its('rules.size') { should cmp 2 }\n  its('rules.first.priority') { should cmp '1000' }\n  its('rules.first.match.config.src_ip_ranges.first') { should cmp '9.9.9.0/24' }\nend\n\ndescribe google_compute_security_policy(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_security_policy` resource:\n\n\n  * `name`: Name of the security policy.\n\n  * `id`: The unique identifier for the resource.\n\n  * `rules`: A list of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match \"*\"). If no rules are provided when creating a security policy, a default rule with action \"allow\" will be added.\n\n    * `description`: A description of the rule.\n\n    * `priority`: An integer indicating the priority of a rule in the list. The priority must be a value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n\n    * `action`: The Action to preform when the client connection triggers the rule. Can currently be either \"allow\" or \"deny()\" where valid values for status are 403, 404, and 502.\n\n    * `preview`: If set to true, the specified action is not enforced.\n\n    * `match`: A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\n\n      * `description`: A description of the rule.\n\n      * `expr`: User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n      * `versioned_expr`: Preconfigured versioned expression. If this field is specified, config must also be specified. Available preconfigured expressions along with their requirements are: `SRC_IPS_V1` - must specify the corresponding srcIpRange field in config.\n\n      * `config`: The configuration options available when specifying versionedExpr. This field must be specified if versionedExpr is specified and cannot be specified if versionedExpr is not specified.\n\n        * `src_ip_ranges`: CIDR IP address range.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_service_attachment.md",
    "content": "+++\ntitle = \"google_compute_service_attachment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_service_attachment\"\nidentifier = \"inspec/resources/gcp/google_compute_service_attachment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_service_attachment` InSpec audit resource to to test a Google Cloud ServiceAttachment resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_service_attachment(project: 'chef-gcp-inspec', region: ' value_region', service_attachment: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('region') { should cmp 'value_region' }\n\tits('producer_forwarding_rule') { should cmp 'value_producerforwardingrule' }\n\tits('target_service') { should cmp 'value_targetservice' }\n\tits('connection_preference') { should cmp 'value_connectionpreference' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\nend\n\ndescribe google_compute_service_attachment(project: 'chef-gcp-inspec', region: ' value_region', service_attachment: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_service_attachment` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#serviceAttachment for service attachments.\n\n  * `id`: [Output Only] The unique identifier for the resource type. The server generates this identifier.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `region`: [Output Only] URL of the region where the service attachment resides. This field applies only to the region resource. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `producer_forwarding_rule`: The URL of a forwarding rule with loadBalancingScheme INTERNAL* that is serving the endpoint identified by this service attachment.\n\n  * `target_service`: The URL of a service serving the endpoint identified by this service attachment.\n\n  * `connection_preference`: The connection preference of service attachment. The value can be set to ACCEPT_AUTOMATIC. An ACCEPT_AUTOMATIC service attachment is one that always accepts the connection from consumer forwarding rules.\n  Possible values:\n    * ACCEPT_AUTOMATIC\n    * ACCEPT_MANUAL\n    * CONNECTION_PREFERENCE_UNSPECIFIED\n\n  * `connected_endpoints`: [Output Only] An array of connections for all the consumers connected to this service attachment.\n\n    * `status`: The status of a connected endpoint to this service attachment.\n    Possible values:\n      * ACCEPTED\n      * CLOSED\n      * NEEDS_ATTENTION\n      * PENDING\n      * REJECTED\n      * STATUS_UNSPECIFIED\n\n    * `psc_connection_id`: The PSC connection id of the connected endpoint.\n\n    * `endpoint`: The url of a connected endpoint.\n\n    * `consumer_network`: The url of the consumer network.\n\n  * `nat_subnets`: An array of URLs where each entry is the URL of a subnet provided by the service producer to use for NAT in this service attachment.\n\n  * `enable_proxy_protocol`: If true, enable the proxy protocol which is for supplying client TCP/IP address data in TCP connections that traverse proxies on their way to destination servers.\n\n  * `consumer_reject_lists`: Projects that are not allowed to connect to this service attachment. The project can be specified using its id or number.\n\n  * `consumer_accept_lists`: Projects that are allowed to connect to this service attachment.\n\n    * `project_id_or_num`: The project id or number for the project to set the limit for.\n\n    * `network_url`: The network URL for the network to set the limit for.\n\n    * `connection_limit`: The value of the limit to set.\n\n  * `psc_service_attachment_id`:\n\n    * `high`:\n\n    * `low`:\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a ServiceAttachment. An up-to-date fingerprint must be provided in order to patch/update the ServiceAttachment; otherwise, the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the ServiceAttachment.\n\n  * `domain_names`: If specified, the domain name will be used during the integration between the PSC connected endpoints and the Cloud DNS. For example, this is a valid domain name: \"p.mycompany.com.\". Current max number of domain names supported is 1.\n\n  * `reconcile_connections`: This flag determines whether a consumer accept/reject list change can reconcile the statuses of existing ACCEPTED or REJECTED PSC endpoints. - If false, connection policy update will only affect existing PENDING PSC endpoints. Existing ACCEPTED/REJECTED endpoints will remain untouched regardless how the connection policy is modified . - If true, update will affect both PENDING and ACCEPTED/REJECTED PSC endpoints. For example, an ACCEPTED PSC endpoint will be moved to REJECTED if its project is added to the reject list. For newly created service attachment, this boolean defaults to false.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_service_attachments.md",
    "content": "+++\ntitle = \"google_compute_service_attachments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_service_attachments\"\nidentifier = \"inspec/resources/gcp/google_compute_service_attachments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_service_attachments` InSpec audit resource to to test a Google Cloud ServiceAttachment resource.\n\n## Examples\n\n```ruby\n    describe google_compute_service_attachments(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_service_attachments` resource:\n\nSee [google_compute_service_attachment](google_compute_service_attachment) for more detailed information.\n\n  * `kinds`: an array of `google_compute_service_attachment` kind\n  * `ids`: an array of `google_compute_service_attachment` id\n  * `creation_timestamps`: an array of `google_compute_service_attachment` creation_timestamp\n  * `names`: an array of `google_compute_service_attachment` name\n  * `descriptions`: an array of `google_compute_service_attachment` description\n  * `self_links`: an array of `google_compute_service_attachment` self_link\n  * `regions`: an array of `google_compute_service_attachment` region\n  * `producer_forwarding_rules`: an array of `google_compute_service_attachment` producer_forwarding_rule\n  * `target_services`: an array of `google_compute_service_attachment` target_service\n  * `connection_preferences`: an array of `google_compute_service_attachment` connection_preference\n  * `connected_endpoints`: an array of `google_compute_service_attachment` connected_endpoints\n  * `nat_subnets`: an array of `google_compute_service_attachment` nat_subnets\n  * `enable_proxy_protocols`: an array of `google_compute_service_attachment` enable_proxy_protocol\n  * `consumer_reject_lists`: an array of `google_compute_service_attachment` consumer_reject_lists\n  * `consumer_accept_lists`: an array of `google_compute_service_attachment` consumer_accept_lists\n  * `psc_service_attachment_ids`: an array of `google_compute_service_attachment` psc_service_attachment_id\n  * `fingerprints`: an array of `google_compute_service_attachment` fingerprint\n  * `domain_names`: an array of `google_compute_service_attachment` domain_names\n  * `reconcile_connections`: an array of `google_compute_service_attachment` reconcile_connections\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_snapshot.md",
    "content": "+++\ntitle = \"google_compute_snapshot resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_snapshot\"\nidentifier = \"inspec/resources/gcp/google_compute_snapshot resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_snapshot` is used to test a Google Snapshot resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_snapshot(project: 'chef-gcp-inspec', name: 'inspec-gcp-disk-snapshot') do\n  it { should exist }\n  its('source_disk') { should match 'inspec-snapshot-disk' }\nend\n\ndescribe google_compute_snapshot(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_snapshot` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `id`: The unique identifier for the resource.\n\n  * `disk_size_gb`: Size of the snapshot, specified in GB.\n\n  * `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource.\n\n  * `storage_bytes`: A size of the storage used by the snapshot. As snapshots share storage, this number is expected to change with snapshot creation/deletion.\n\n  * `storage_locations`: Cloud Storage bucket storage location of the snapshot (regional or multi-regional).\n\n  * `licenses`: A list of public visible licenses that apply to this snapshot. This can be because the original image had licenses attached (such as a Windows image).  snapshotEncryptionKey nested object Encrypts the snapshot using a customer-supplied encryption key.\n\n  * `labels`: Labels to apply to this Snapshot.\n\n  * `label_fingerprint`: The fingerprint used for optimistic locking of this resource. Used internally during updates.\n\n  * `source_disk`: A reference to the disk used to create this snapshot.\n\n  * `zone`: A reference to the zone where the disk is hosted.\n\n  * `snapshot_encryption_key`: The customer-supplied encryption key of the snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS.\n\n    * `kms_key_service_account`: The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.\n\n  * `source_disk_encryption_key`: The customer-supplied encryption key of the source snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.\n\n    * `raw_key`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.\n\n    * `kms_key_name`: The name of the encryption key that is stored in Google Cloud KMS.\n\n    * `kms_key_service_account`: The service account used for the encryption request for the given KMS key. If absent, the Compute Engine Service Agent service account is used.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_snapshots.md",
    "content": "+++\ntitle = \"google_compute_snapshots resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_snapshots\"\nidentifier = \"inspec/resources/gcp/google_compute_snapshots resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_snapshots` is used to test a Google Snapshot resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_snapshots(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\nend\n\ndescribe.one do\n  google_compute_snapshots(project: 'chef-gcp-inspec').names do |snapshot_name|\n    describe google_compute_snapshot(project: 'chef-gcp-inspec', name: snapshot_name) do\n      its('source_disk') { should match 'inspec-snapshot-disk' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_snapshots` resource:\n\nSee [google_compute_snapshot](google_compute_snapshot) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_snapshot` creation_timestamp\n  * `ids`: an array of `google_compute_snapshot` id\n  * `disk_size_gbs`: an array of `google_compute_snapshot` disk_size_gb\n  * `names`: an array of `google_compute_snapshot` name\n  * `descriptions`: an array of `google_compute_snapshot` description\n  * `storage_bytes`: an array of `google_compute_snapshot` storage_bytes\n  * `storage_locations`: an array of `google_compute_snapshot` storage_locations\n  * `licenses`: an array of `google_compute_snapshot` licenses\n  * `labels`: an array of `google_compute_snapshot` labels\n  * `label_fingerprints`: an array of `google_compute_snapshot` label_fingerprint\n  * `source_disks`: an array of `google_compute_snapshot` source_disk\n  * `zones`: an array of `google_compute_snapshot` zone\n  * `snapshot_encryption_keys`: an array of `google_compute_snapshot` snapshot_encryption_key\n  * `source_disk_encryption_keys`: an array of `google_compute_snapshot` source_disk_encryption_key\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_ssl_certificate.md",
    "content": "+++\ntitle = \"google_compute_ssl_certificate resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_ssl_certificate\"\nidentifier = \"inspec/resources/gcp/google_compute_ssl_certificate resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_ssl_certificate` is used to test a Google SslCertificate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_ssl_certificate(project: 'chef-gcp-inspec', name: 'inspec-gcp-ssl-certificate') do\n  it { should exist }\n  its('description') { should eq 'A fake ssl certificate (DO NOT USE)' }\n  its('certificate') { should eq '-----BEGIN CERTIFICATE-----\nMIICqjCCAk+gAwIBAgIJAIuJ+0352Kq4MAoGCCqGSM49BAMCMIGwMQswCQYDVQQG\nEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjERMA8GA1UEBwwIS2lya2xhbmQxFTAT\nBgNVBAoMDEdvb2dsZSwgSW5jLjEeMBwGA1UECwwVR29vZ2xlIENsb3VkIFBsYXRm\nb3JtMR8wHQYDVQQDDBZ3d3cubXktc2VjdXJlLXNpdGUuY29tMSEwHwYJKoZIhvcN\nAQkBFhJuZWxzb25hQGdvb2dsZS5jb20wHhcNMTcwNjI4MDQ1NjI2WhcNMjcwNjI2\nMDQ1NjI2WjCBsDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xETAP\nBgNVBAcMCEtpcmtsYW5kMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xHjAcBgNVBAsM\nFUdvb2dsZSBDbG91ZCBQbGF0Zm9ybTEfMB0GA1UEAwwWd3d3Lm15LXNlY3VyZS1z\naXRlLmNvbTEhMB8GCSqGSIb3DQEJARYSbmVsc29uYUBnb29nbGUuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ\n4mzkzTv0dXyB750fOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwaNQME4wHQYDVR0O\nBBYEFKIQC3A2SDpxcdfn0YLKineDNq/BMB8GA1UdIwQYMBaAFKIQC3A2SDpxcdfn\n0YLKineDNq/BMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhALs4vy+O\nM3jcqgA4fSW/oKw6UJxp+M6a+nGMX+UJR3YgAiEAvvl39QRVAiv84hdoCuyON0lJ\nzqGNhIPGq2ULqXKK8BY=\n-----END CERTIFICATE-----\n' }\nend\n\ndescribe google_compute_ssl_certificate(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_ssl_certificate` resource:\n\n\n  * `certificate`: The certificate in PEM format. The certificate chain must be no greater than 5 certs long. The chain must include at least one intermediate cert.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `private_key`: The write-only private key in PEM format.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_ssl_certificates.md",
    "content": "+++\ntitle = \"google_compute_ssl_certificates resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_ssl_certificates\"\nidentifier = \"inspec/resources/gcp/google_compute_ssl_certificates resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_ssl_certificates` is used to test a Google SslCertificate resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_ssl_certificates(project: 'chef-gcp-inspec') do\n\n  its('names') { should include 'inspec-gcp-ssl-certificate' }\n  its('descriptions') { should include 'A fake ssl certificate (DO NOT USE)' }\n  its('certificates') { should include '-----BEGIN CERTIFICATE-----\nMIICqjCCAk+gAwIBAgIJAIuJ+0352Kq4MAoGCCqGSM49BAMCMIGwMQswCQYDVQQG\nEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjERMA8GA1UEBwwIS2lya2xhbmQxFTAT\nBgNVBAoMDEdvb2dsZSwgSW5jLjEeMBwGA1UECwwVR29vZ2xlIENsb3VkIFBsYXRm\nb3JtMR8wHQYDVQQDDBZ3d3cubXktc2VjdXJlLXNpdGUuY29tMSEwHwYJKoZIhvcN\nAQkBFhJuZWxzb25hQGdvb2dsZS5jb20wHhcNMTcwNjI4MDQ1NjI2WhcNMjcwNjI2\nMDQ1NjI2WjCBsDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xETAP\nBgNVBAcMCEtpcmtsYW5kMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xHjAcBgNVBAsM\nFUdvb2dsZSBDbG91ZCBQbGF0Zm9ybTEfMB0GA1UEAwwWd3d3Lm15LXNlY3VyZS1z\naXRlLmNvbTEhMB8GCSqGSIb3DQEJARYSbmVsc29uYUBnb29nbGUuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ\n4mzkzTv0dXyB750fOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwaNQME4wHQYDVR0O\nBBYEFKIQC3A2SDpxcdfn0YLKineDNq/BMB8GA1UdIwQYMBaAFKIQC3A2SDpxcdfn\n0YLKineDNq/BMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhALs4vy+O\nM3jcqgA4fSW/oKw6UJxp+M6a+nGMX+UJR3YgAiEAvvl39QRVAiv84hdoCuyON0lJ\nzqGNhIPGq2ULqXKK8BY=\n-----END CERTIFICATE-----\n' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_ssl_certificates` resource:\n\nSee [google_compute_ssl_certificate](google_compute_ssl_certificate) for more detailed information.\n\n  * `certificates`: an array of `google_compute_ssl_certificate` certificate\n  * `creation_timestamps`: an array of `google_compute_ssl_certificate` creation_timestamp\n  * `descriptions`: an array of `google_compute_ssl_certificate` description\n  * `ids`: an array of `google_compute_ssl_certificate` id\n  * `names`: an array of `google_compute_ssl_certificate` name\n  * `private_keys`: an array of `google_compute_ssl_certificate` private_key\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_ssl_policies.md",
    "content": "+++\ntitle = \"google_compute_ssl_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_ssl_policies\"\nidentifier = \"inspec/resources/gcp/google_compute_ssl_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_ssl_policies` is used to test a Google SslPolicy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_ssl_policies(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('names') { should include 'inspec-gcp-ssl-policy' }\n  its('profiles') { should include 'CUSTOM' }\n  its('count') { should eq 1 }\nend\n\ngoogle_compute_ssl_policies(project: 'chef-gcp-inspec').names.each do |policy_name|\n  describe google_compute_ssl_policy(project: 'chef-gcp-inspec', name: policy_name) do\n    its('min_tls_version') { should eq 'TLS_1_2' }\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_ssl_policies` resource:\n\nSee [google_compute_ssl_policy](google_compute_ssl_policy) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_ssl_policy` creation_timestamp\n  * `descriptions`: an array of `google_compute_ssl_policy` description\n  * `ids`: an array of `google_compute_ssl_policy` id\n  * `names`: an array of `google_compute_ssl_policy` name\n  * `profiles`: an array of `google_compute_ssl_policy` profile\n  * `min_tls_versions`: an array of `google_compute_ssl_policy` min_tls_version\n  * `enabled_features`: an array of `google_compute_ssl_policy` enabled_features\n  * `custom_features`: an array of `google_compute_ssl_policy` custom_features\n  * `fingerprints`: an array of `google_compute_ssl_policy` fingerprint\n  * `warnings`: an array of `google_compute_ssl_policy` warnings\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_ssl_policy.md",
    "content": "+++\ntitle = \"google_compute_ssl_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_ssl_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_ssl_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_ssl_policy` is used to test a Google SslPolicy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_ssl_policy(project: 'chef-gcp-inspec', name: 'inspec-gcp-ssl-policy') do\n  it { should exist }\n  its('min_tls_version') { should eq 'TLS_1_2' }\n  its('profile') { should eq 'CUSTOM' }\n  its('custom_features') { should include 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384' }\n  its('custom_features') { should include 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384' }\nend\n\ndescribe google_compute_ssl_policy(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_ssl_policy` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `profile`: Profile specifies the set of SSL features that can be used by the load balancer when negotiating SSL with clients. If using `CUSTOM`, the set of SSL features to enable must be specified in the `customFeatures` field.\n  Possible values:\n    * COMPATIBLE\n    * MODERN\n    * RESTRICTED\n    * CUSTOM\n\n  * `min_tls_version`: The minimum version of SSL protocol that can be used by the clients to establish a connection with the load balancer.\n  Possible values:\n    * TLS_1_0\n    * TLS_1_1\n    * TLS_1_2\n\n  * `enabled_features`: The list of features enabled in the SSL policy.\n\n  * `custom_features`: A list of features enabled when the selected profile is CUSTOM. The method returns the set of features that can be specified in this list. This field must be empty if the profile is not CUSTOM.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking.\n\n  * `warnings`: If potential misconfigurations are detected for this SSL policy, this field will be populated with warning messages.\n\n    * `code`: A warning code, if applicable.\n\n    * `message`: A human-readable description of the warning code.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_subnetwork.md",
    "content": "+++\ntitle = \"google_compute_subnetwork resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_subnetwork\"\nidentifier = \"inspec/resources/gcp/google_compute_subnetwork resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_subnetwork` is used to test a Google Subnetwork resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_subnetwork(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-subnet') do\n  it { should exist }\n  its('ip_cidr_range') { should eq '10.2.0.0/16' }\n  its('log_config.enable') { should be true }\n  its('log_config.flow_sampling') { should cmp '0.5' }\n  its('log_config.aggregation_interval') { should cmp 'INTERVAL_10_MIN' }\n  its('log_config.metadata') { should include 'INCLUDE_ALL_METADATA' }\nend\n\ndescribe google_compute_subnetwork(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute subnetwork exists\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      it { should exist }\n    end\n\n### Test when a GCP compute subnetwork was created\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('creation_timestamp') { should be > Time.now - 365*60*60*24*10 }\n    end\n\n### Test for an expected subnetwork identifier \n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('id') { should eq 12345567789 }\n    end    \n\n### Test that a subnetwork gateway address is as expected\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('gateway_address') { should eq \"10.2.0.1\" }\n    end  \n\n### Test that a subnetwork IP CIDR range is as expected\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('ip_cidr_range') { should eq \"10.2.0.0/29\" }\n    end  \n\n### Test that a subnetwork is associated with the expected network\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('network') { should match \"gcp_network_name\" }\n    end  \n\n### Test whether VMs in this subnet can access Google services without assigning external IP addresses through Private Google Access\n\n    describe google_compute_subnetwork(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-subnetwork') do\n      its('private_ip_google_access') { should be false }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_subnetwork` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource. This field can be set only at resource creation time.\n\n  * `gateway_address`: The gateway address for default routes to reach destination addresses outside this subnetwork.\n\n  * `id`: The unique identifier for the resource.\n\n  * `ip_cidr_range`: The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network. Only IPv4 is supported.\n\n  * `name`: The name of the resource, provided by the client when initially creating the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `network`: The network this subnet belongs to. Only networks that are in the distributed mode can have subnetworks.\n\n  * `purpose`: (Beta only) The purpose of the resource. This field can be either PRIVATE or INTERNAL_HTTPS_LOAD_BALANCER. A subnetwork with purpose set to INTERNAL_HTTPS_LOAD_BALANCER is a user-created subnetwork that is reserved for Internal HTTP(S) Load Balancing. If unspecified, the purpose defaults to PRIVATE.  If set to INTERNAL_HTTPS_LOAD_BALANCER you must also set the role.\n  Possible values:\n    * INTERNAL_HTTPS_LOAD_BALANCER\n    * PRIVATE\n\n  * `role`: (Beta only) The role of subnetwork. Currently, this field is only used when purpose = INTERNAL_HTTPS_LOAD_BALANCER. The value can be set to ACTIVE or BACKUP. An ACTIVE subnetwork is one that is currently being used for Internal HTTP(S) Load Balancing. A BACKUP subnetwork is one that is ready to be promoted to ACTIVE or is currently draining.\n  Possible values:\n    * ACTIVE\n    * BACKUP\n\n  * `secondary_ip_ranges`: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary ranges.\n\n    * `range_name`: The name associated with this subnetwork secondary range, used when adding an alias IP range to a VM instance. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the subnetwork.\n\n    * `ip_cidr_range`: The range of IP addresses belonging to this subnetwork secondary range. Provide this property when you create the subnetwork. Ranges must be unique and non-overlapping with all primary and secondary IP ranges within a network. Only IPv4 is supported.\n\n  * `private_ip_google_access`: When enabled, VMs in this subnetwork without external IP addresses can access Google APIs and services by using Private Google Access.\n\n  * `private_ipv6_google_access`: The private IPv6 google access type for the VMs in this subnet.\n\n  * `region`: The GCP region for this subnetwork.\n\n  * `log_config`: Denotes the logging options for the subnetwork flow logs. If logging is enabled logs will be exported to Stackdriver. This field cannot be set if the `purpose` of this subnetwork is `INTERNAL_HTTPS_LOAD_BALANCER`\n\n    * `enable`: If logging is enabled for this subnetwork\n\n    * `aggregation_interval`: Can only be specified if VPC flow logging for this subnetwork is enabled. Toggles the aggregation interval for collecting flow logs. Increasing the interval time will reduce the amount of generated flow logs for long lasting connections. Default is an interval of 5 seconds per connection.\n    Possible values:\n      * INTERVAL_5_SEC\n      * INTERVAL_30_SEC\n      * INTERVAL_1_MIN\n      * INTERVAL_5_MIN\n      * INTERVAL_10_MIN\n      * INTERVAL_15_MIN\n\n    * `flow_sampling`: Can only be specified if VPC flow logging for this subnetwork is enabled. The value of the field must be in [0, 1]. Set the sampling rate of VPC flow logs within the subnetwork where 1.0 means all collected logs are reported and 0.0 means no logs are reported. Default is 0.5 which means half of all collected logs are reported.\n\n    * `metadata`: Can only be specified if VPC flow logging for this subnetwork is enabled. Configures whether metadata fields should be added to the reported VPC flow logs.\n    Possible values:\n      * EXCLUDE_ALL_METADATA\n      * INCLUDE_ALL_METADATA\n      * CUSTOM_METADATA\n\n    * `metadata_fields`: List of metadata fields that should be added to reported logs. Can only be specified if VPC flow logs for this subnetwork is enabled and \"metadata\" is set to CUSTOM_METADATA.\n\n    * `filter_expr`: Export filter used to define which VPC flow logs should be logged, as as CEL expression. See https://cloud.google.com/vpc/docs/flow-logs#filtering for details on how to format this field. The default value is 'true', which evaluates to include everything.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_subnetwork_iam_binding.md",
    "content": "+++\ntitle = \"google_compute_subnetwork_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_subnetwork_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_compute_subnetwork_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_subnetwork_iam_binding` is used to test a Google Subnetwork Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_compute_subnetwork_iam_binding(project: \"project\", region: \"region\", name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_compute_subnetwork_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_subnetwork_iam_policy.md",
    "content": "+++\ntitle = \"google_compute_subnetwork_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_subnetwork_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_compute_subnetwork_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_subnetwork_iam_policy` is used to test a Google Subnetwork Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_subnetwork_iam_policy(project: \"project\", region: \"region\", name: \"name\") do\n  it { should exist }\nend\n\ngoogle_compute_subnetwork_iam_policy(project: \"project\", region: \"region\", name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_subnetwork_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_subnetworks.md",
    "content": "+++\ntitle = \"google_compute_subnetworks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_subnetworks\"\nidentifier = \"inspec/resources/gcp/google_compute_subnetworks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_subnetworks` is used to test a Google Subnetwork resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_subnetworks(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('ip_cidr_ranges') { should include '10.2.0.0/16' }\n  its('subnetwork_names') { should include 'inspec-subnet' }\nend\n```\n\n### Test that there are no more than a specified number of subnetworks available for the project and region\n\n    describe google_compute_subnetworks(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected subnetwork identifier is present in the project and region\n\n    describe google_compute_subnetworks(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('subnetwork_ids') { should include 12345678975432 }\n    end\n\n\n### Test that an expected subnetwork name is available for the project and region\n\n    describe google_compute_subnetworks(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('subnetwork_names') { should include \"subnetwork-name\" }\n    end\n\n### Test that an expected subnetwork network name is not present for the project and region\n\n    describe google_compute_subnetworks(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('subnetwork_networks') { should not include \"network-name\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_subnetworks` resource:\n\nSee [google_compute_subnetwork](google_compute_subnetwork) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_subnetwork` creation_timestamp\n  * `descriptions`: an array of `google_compute_subnetwork` description\n  * `gateway_addresses`: an array of `google_compute_subnetwork` gateway_address\n  * `subnetwork_ids`: an array of `google_compute_subnetwork` id\n  * `ip_cidr_ranges`: an array of `google_compute_subnetwork` ip_cidr_range\n  * `subnetwork_names`: an array of `google_compute_subnetwork` name\n  * `networks`: an array of `google_compute_subnetwork` network\n  * `purposes`: (Beta only) an array of `google_compute_subnetwork` purpose\n  * `roles`: (Beta only) an array of `google_compute_subnetwork` role\n  * `secondary_ip_ranges`: an array of `google_compute_subnetwork` secondary_ip_ranges\n  * `private_ip_google_accesses`: an array of `google_compute_subnetwork` private_ip_google_access\n  * `private_ipv6_google_accesses`: an array of `google_compute_subnetwork` private_ipv6_google_access\n  * `regions`: an array of `google_compute_subnetwork` region\n  * `log_configs`: an array of `google_compute_subnetwork` log_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_grpc_proxies.md",
    "content": "+++\ntitle = \"google_compute_target_grpc_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_grpc_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_target_grpc_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_grpc_proxies` InSpec audit resource to to test a Google Cloud TargetGrpcProxy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_target_grpc_proxies(project: 'chef-gcp-inspec') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_grpc_proxies` resource:\n\nSee [google_compute_target_grpc_proxy](google_compute_target_grpc_proxy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_target_grpc_proxy` kind\n  * `ids`: an array of `google_compute_target_grpc_proxy` id\n  * `creation_timestamps`: an array of `google_compute_target_grpc_proxy` creation_timestamp\n  * `names`: an array of `google_compute_target_grpc_proxy` name\n  * `descriptions`: an array of `google_compute_target_grpc_proxy` description\n  * `self_links`: an array of `google_compute_target_grpc_proxy` self_link\n  * `self_link_with_ids`: an array of `google_compute_target_grpc_proxy` self_link_with_id\n  * `url_maps`: an array of `google_compute_target_grpc_proxy` url_map\n  * `validate_for_proxylesses`: an array of `google_compute_target_grpc_proxy` validate_for_proxyless\n  * `fingerprints`: an array of `google_compute_target_grpc_proxy` fingerprint\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_grpc_proxy.md",
    "content": "+++\ntitle = \"google_compute_target_grpc_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_grpc_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_target_grpc_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_grpc_proxy` InSpec audit resource to to test a Google Cloud TargetGrpcProxy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_grpc_proxy(project: 'chef-gcp-inspec', name: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('url_map') { should cmp 'value_urlmap' }\n\tits('fingerprint') { should cmp 'value_fingerprint' }\n\nend\n\ndescribe google_compute_target_grpc_proxy(project: 'chef-gcp-inspec', name: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_grpc_proxy` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#targetGrpcProxy for target grpc proxies.\n\n  * `id`: [Output Only] The unique identifier for the resource type. The server generates this identifier.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL with id for the resource.\n\n  * `url_map`: URL to the UrlMap resource that defines the mapping from URL to the BackendService. The protocol field in the BackendService must be set to GRPC.\n\n  * `validate_for_proxyless`: If true, indicates that the BackendServices referenced by the urlMap may be accessed by gRPC applications without using a sidecar proxy. This will enable configuration checks on urlMap and its referenced BackendServices to not allow unsupported features. A gRPC application must use \"xds:///\" scheme in the target URI of the service it is connecting to. If false, indicates that the BackendServices referenced by the urlMap will be accessed by gRPC applications via a sidecar proxy. In this case, a gRPC application must not use \"xds:///\" scheme in the target URI of the service it is connecting to\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a TargetGrpcProxy. An up-to-date fingerprint must be provided in order to patch/update the TargetGrpcProxy; otherwise, the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the TargetGrpcProxy.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_http_proxies.md",
    "content": "+++\ntitle = \"google_compute_target_http_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_http_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_target_http_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_http_proxies` is used to test a Google TargetHttpProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_http_proxies(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-http-proxy' }\n  its('descriptions') { should include 'A HTTP proxy' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_http_proxies` resource:\n\nSee [google_compute_target_http_proxy](google_compute_target_http_proxy) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_target_http_proxy` creation_timestamp\n  * `descriptions`: an array of `google_compute_target_http_proxy` description\n  * `ids`: an array of `google_compute_target_http_proxy` id\n  * `names`: an array of `google_compute_target_http_proxy` name\n  * `url_maps`: an array of `google_compute_target_http_proxy` url_map\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_http_proxy.md",
    "content": "+++\ntitle = \"google_compute_target_http_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_http_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_target_http_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_http_proxy` is used to test a Google TargetHttpProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_http_proxy(project: 'chef-gcp-inspec', name: 'inspec-gcp-http-proxy') do\n  it { should exist }\n  its('description') { should eq 'A HTTP proxy' }\n  its('url_map') { should  match /\\/inspec-gcp-url-map$/ }\nend\n\ndescribe google_compute_target_http_proxy(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_http_proxy` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `url_map`: A reference to the UrlMap resource that defines the mapping from URL to the BackendService.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_https_proxies.md",
    "content": "+++\ntitle = \"google_compute_target_https_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_https_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_target_https_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_https_proxies` is used to test a Google TargetHttpsProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_https_proxies(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-https-proxy' }\n  its('descriptions') { should include 'A HTTPS target proxy' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_https_proxies` resource:\n\nSee [google_compute_target_https_proxy](google_compute_target_https_proxy) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_target_https_proxy` creation_timestamp\n  * `descriptions`: an array of `google_compute_target_https_proxy` description\n  * `ids`: an array of `google_compute_target_https_proxy` id\n  * `names`: an array of `google_compute_target_https_proxy` name\n  * `quic_overrides`: an array of `google_compute_target_https_proxy` quic_override\n  * `ssl_certificates`: an array of `google_compute_target_https_proxy` ssl_certificates\n  * `ssl_policies`: an array of `google_compute_target_https_proxy` ssl_policy\n  * `url_maps`: an array of `google_compute_target_https_proxy` url_map\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_https_proxy.md",
    "content": "+++\ntitle = \"google_compute_target_https_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_https_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_target_https_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_https_proxy` is used to test a Google TargetHttpsProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_https_proxy(project: 'chef-gcp-inspec', name: 'inspec-gcp-https-proxy') do\n  it { should exist }\n  its('url_map') { should match /\\/inspec-gcp-url-map$/ }\n  its('description') { should eq 'A HTTPS target proxy' }\nend\n\ndescribe google_compute_target_https_proxy(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_https_proxy` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `quic_override`: Specifies the QUIC override policy for this resource. This determines whether the load balancer will attempt to negotiate QUIC with clients or not. Can specify one of NONE, ENABLE, or DISABLE. If NONE is specified, uses the QUIC policy with no user overrides, which is equivalent to DISABLE.\n  Possible values:\n    * NONE\n    * ENABLE\n    * DISABLE\n\n  * `ssl_certificates`: A list of SslCertificate resources that are used to authenticate connections between users and the load balancer. At least one SSL certificate must be specified.\n\n  * `ssl_policy`: A reference to the SslPolicy resource that will be associated with the TargetHttpsProxy resource. If not set, the TargetHttpsProxy resource will not have any SSL policy configured.\n\n  * `url_map`: A reference to the UrlMap resource that defines the mapping from URL to the BackendService.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_instance.md",
    "content": "+++\ntitle = \"google_compute_target_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_instance\"\nidentifier = \"inspec/resources/gcp/google_compute_target_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_instance` InSpec audit resource to to test a Google Cloud TargetInstance resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_instance(project: 'chef-gcp-inspec', name: ' ', zone: ' value_zone') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('nat_policy') { should cmp 'value_natpolicy' }\n\tits('instance') { should cmp 'value_instance' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('self_link_with_id') { should cmp 'value_selflinkwithid' }\n\tits('network') { should cmp 'value_network' }\n\tits('security_policy') { should cmp 'value_securitypolicy' }\n\nend\n\ndescribe google_compute_target_instance(project: 'chef-gcp-inspec', name: ' ', zone: ' value_zone') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_instance` resource:\n\n\n  * `kind`: [Output Only] The type of the resource. Always compute#targetInstance for target instances.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `zone`: [Output Only] URL of the zone where the target instance resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `nat_policy`: Must have a value of NO_NAT. Protocol forwarding delivers packets while preserving the destination IP address of the forwarding rule referencing the target instance.\n  Possible values:\n    * NO_NAT\n\n  * `instance`: A URL to the virtual machine instance that handles traffic for this target instance. When creating a target instance, you can provide the fully-qualified URL or a valid partial URL to the desired virtual machine. For example, the following are all valid URLs: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /instances/instance - projects/project/zones/zone/instances/instance - zones/zone/instances/instance\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `self_link_with_id`: [Output Only] Server-defined URL for this resource with the resource id.\n\n  * `network`: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to.\n\n  * `security_policy`: [Output Only] The resource URL for the security policy associated with this target instance.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_instances.md",
    "content": "+++\ntitle = \"google_compute_target_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_instances\"\nidentifier = \"inspec/resources/gcp/google_compute_target_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_instances` InSpec audit resource to to test a Google Cloud TargetInstance resource.\n\n## Examples\n\n```ruby\n    describe google_compute_target_instances(project: 'chef-gcp-inspec', zone: ' value_zone') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_instances` resource:\n\nSee [google_compute_target_instance](google_compute_target_instance) for more detailed information.\n\n  * `kinds`: an array of `google_compute_target_instance` kind\n  * `ids`: an array of `google_compute_target_instance` id\n  * `creation_timestamps`: an array of `google_compute_target_instance` creation_timestamp\n  * `names`: an array of `google_compute_target_instance` name\n  * `descriptions`: an array of `google_compute_target_instance` description\n  * `zones`: an array of `google_compute_target_instance` zone\n  * `nat_policies`: an array of `google_compute_target_instance` nat_policy\n  * `instances`: an array of `google_compute_target_instance` instance\n  * `self_links`: an array of `google_compute_target_instance` self_link\n  * `self_link_with_ids`: an array of `google_compute_target_instance` self_link_with_id\n  * `networks`: an array of `google_compute_target_instance` network\n  * `security_policies`: an array of `google_compute_target_instance` security_policy\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_pool.md",
    "content": "+++\ntitle = \"google_compute_target_pool resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_pool\"\nidentifier = \"inspec/resources/gcp/google_compute_target_pool resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_pool` is used to test a Google TargetPool resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_pool(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-gcp-target-pool') do\n  it { should exist }\n  its('session_affinity') { should eq 'CLIENT_IP' }\n  it { should has_target_instance('gcp_ext_vm_name', 'zone') }\nend\n\ndescribe google_compute_target_pool(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_pool` resource:\n\n\n  * `backup_pool`: This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool, and its failoverRatio field is properly set to a value between [0, 1].  backupPool and failoverRatio together define the fallback behavior of the primary target pool: if the ratio of the healthy instances in the primary pool is at or below failoverRatio, traffic arriving at the load-balanced IP will be directed to the backup pool.  In case where failoverRatio and backupPool are not set, or all the instances in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy instances with the best effort, or to all instances when no instance is healthy.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `failover_ratio`: This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool (i.e., not as a backup pool to some other target pool). The value of the field must be in [0, 1].  If set, backupPool must also be set. They together define the fallback behavior of the primary target pool: if the ratio of the healthy instances in the primary pool is at or below this number, traffic arriving at the load-balanced IP will be directed to the backup pool.  In case where failoverRatio is not set or all the instances in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy instances with the best effort, or to all instances when no instance is healthy.\n\n  * `health_check`: A reference to a HttpHealthCheck resource.  A member instance in this pool is considered healthy if and only if the health checks pass. If not specified it means all member instances will be considered healthy at all times.\n\n  * `id`: The unique identifier for the resource.\n\n  * `instances`: A list of virtual machine instances serving this pool.  They must live in zones contained in the same region as this pool.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `session_affinity`: Session affinity option. Must be one of these values:  * NONE: Connections from the same client IP may go to any instance in   the pool. * CLIENT_IP: Connections from the same client IP will go to the same   instance in the pool while that instance remains healthy. * CLIENT_IP_PROTO: Connections from the same client IP with the same   IP protocol will go to the same instance in the pool while that   instance remains healthy.\n  Possible values:\n    * NONE\n    * CLIENT_IP\n    * CLIENT_IP_PROTO\n\n  * `region`: The region where the target pool resides.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_pools.md",
    "content": "+++\ntitle = \"google_compute_target_pools resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_pools\"\nidentifier = \"inspec/resources/gcp/google_compute_target_pools resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_pools` is used to test a Google TargetPool resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_pools(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('names') { should include 'inspec-gcp-target-pool' }\n  its('session_affinities') { should include 'CLIENT_IP' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_pools` resource:\n\nSee [google_compute_target_pool](google_compute_target_pool) for more detailed information.\n\n  * `backup_pools`: an array of `google_compute_target_pool` backup_pool\n  * `creation_timestamps`: an array of `google_compute_target_pool` creation_timestamp\n  * `descriptions`: an array of `google_compute_target_pool` description\n  * `failover_ratios`: an array of `google_compute_target_pool` failover_ratio\n  * `health_checks`: an array of `google_compute_target_pool` health_check\n  * `ids`: an array of `google_compute_target_pool` id\n  * `instances`: an array of `google_compute_target_pool` instances\n  * `names`: an array of `google_compute_target_pool` name\n  * `session_affinities`: an array of `google_compute_target_pool` session_affinity\n  * `regions`: an array of `google_compute_target_pool` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_ssl_proxies.md",
    "content": "+++\ntitle = \"google_compute_target_ssl_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_ssl_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_target_ssl_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_ssl_proxies` InSpec audit resource to to test a Google Cloud TargetSslProxy resource.\n\n## Examples\n\n```ruby\n    describe google_compute_target_ssl_proxies(project: 'chef-gcp-inspec') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_ssl_proxies` resource:\n\nSee [google_compute_target_ssl_proxy](google_compute_target_ssl_proxy) for more detailed information.\n\n  * `kinds`: an array of `google_compute_target_ssl_proxy` kind\n  * `ids`: an array of `google_compute_target_ssl_proxy` id\n  * `creation_timestamps`: an array of `google_compute_target_ssl_proxy` creation_timestamp\n  * `names`: an array of `google_compute_target_ssl_proxy` name\n  * `descriptions`: an array of `google_compute_target_ssl_proxy` description\n  * `self_links`: an array of `google_compute_target_ssl_proxy` self_link\n  * `services`: an array of `google_compute_target_ssl_proxy` service\n  * `ssl_certificates`: an array of `google_compute_target_ssl_proxy` ssl_certificates\n  * `certificate_maps`: an array of `google_compute_target_ssl_proxy` certificate_map\n  * `proxy_headers`: an array of `google_compute_target_ssl_proxy` proxy_header\n  * `ssl_policies`: an array of `google_compute_target_ssl_proxy` ssl_policy\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_ssl_proxy.md",
    "content": "+++\ntitle = \"google_compute_target_ssl_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_ssl_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_target_ssl_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_ssl_proxy` InSpec audit resource to to test a Google Cloud TargetSslProxy resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_ssl_proxy(project: 'chef-gcp-inspec', name: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('service') { should cmp 'value_service' }\n\tits('certificate_map') { should cmp 'value_certificatemap' }\n\tits('proxy_header') { should cmp 'value_proxyheader' }\n\tits('ssl_policy') { should cmp 'value_sslpolicy' }\nend\n\ndescribe google_compute_target_ssl_proxy(project: 'chef-gcp-inspec', name: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_ssl_proxy` resource:\n\n\n  * `kind`: [Output Only] Type of the resource. Always compute#targetSslProxy for target SSL proxies.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `service`: URL to the BackendService resource.\n\n  * `ssl_certificates`: URLs to SslCertificate resources that are used to authenticate connections to Backends. At least one SSL certificate must be specified. Currently, you may specify up to 15 SSL certificates. sslCertificates do not apply when the load balancing scheme is set to INTERNAL_SELF_MANAGED.\n\n  * `certificate_map`: URL of a certificate map that identifies a certificate map associated with the given target proxy. This field can only be set for global target proxies. If set, sslCertificates will be ignored. Accepted format is //certificatemanager.googleapis.com/projects/{project }/locations/{location}/certificateMaps/{resourceName}.\n\n  * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE.\n  Possible values:\n    * NONE\n    * PROXY_V1\n\n  * `ssl_policy`: URL of SslPolicy resource that will be associated with the TargetSslProxy resource. If not set, the TargetSslProxy resource will not have any SSL policy configured.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_tcp_proxies.md",
    "content": "+++\ntitle = \"google_compute_target_tcp_proxies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_tcp_proxies\"\nidentifier = \"inspec/resources/gcp/google_compute_target_tcp_proxies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_tcp_proxies` is used to test a Google TargetTcpProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_tcp_proxies(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-target-tcp-proxy' }\n  its('proxy_headers') { should include 'NONE' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_tcp_proxies` resource:\n\nSee [google_compute_target_tcp_proxy](google_compute_target_tcp_proxy) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_target_tcp_proxy` creation_timestamp\n  * `descriptions`: an array of `google_compute_target_tcp_proxy` description\n  * `ids`: an array of `google_compute_target_tcp_proxy` id\n  * `names`: an array of `google_compute_target_tcp_proxy` name\n  * `proxy_headers`: an array of `google_compute_target_tcp_proxy` proxy_header\n  * `services`: an array of `google_compute_target_tcp_proxy` service\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_tcp_proxy.md",
    "content": "+++\ntitle = \"google_compute_target_tcp_proxy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_tcp_proxy\"\nidentifier = \"inspec/resources/gcp/google_compute_target_tcp_proxy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_target_tcp_proxy` is used to test a Google TargetTcpProxy resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_tcp_proxy(project: 'chef-gcp-inspec', name: 'inspec-gcp-target-tcp-proxy') do\n  it { should exist }\n  its('proxy_header') { should eq 'NONE' }\n  its('service') { should  match /\\/gcp-inspec-tcp-backend-service$/ }\nend\n\ndescribe google_compute_target_tcp_proxy(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_tcp_proxy` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `description`: An optional description of this resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `proxy_header`: Specifies the type of proxy header to append before sending data to the backend.\n  Possible values:\n    * NONE\n    * PROXY_V1\n\n  * `service`: A reference to the BackendService resource.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_vpn_gateway.md",
    "content": "+++\ntitle = \"google_compute_target_vpn_gateway resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_vpn_gateway\"\nidentifier = \"inspec/resources/gcp/google_compute_target_vpn_gateway resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_vpn_gateway` InSpec audit resource to to test a Google Cloud TargetVpnGateway resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_target_vpn_gateway(project: 'chef-gcp-inspec', region: ' value_region', name: 'value_name') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('region') { should cmp 'value_region' }\n\tits('network') { should cmp 'value_network' }\n\tits('status') { should cmp 'value_status' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('label_fingerprint') { should cmp 'value_labelfingerprint' }\n\nend\n\ndescribe google_compute_target_vpn_gateway(project: 'chef-gcp-inspec', region: ' value_region', name: 'value_name') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_vpn_gateway` resource:\n\n\n  * `kind`: [Output Only] Type of resource. Always compute#targetVpnGateway for target VPN gateways.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `region`: [Output Only] URL of the region where the target VPN gateway resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.\n\n  * `network`: URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.\n\n  * `tunnels`: [Output Only] A list of URLs to VpnTunnel resources. VpnTunnels are created using the compute.vpntunnels.insert method and associated with a VPN gateway.\n\n  * `status`: [Output Only] The status of the VPN gateway, which can be one of the following: CREATING, READY, FAILED, or DELETING.\n  Possible values:\n    * CREATING\n    * DELETING\n    * FAILED\n    * READY\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `forwarding_rules`: [Output Only] A list of URLs to the ForwardingRule resources. ForwardingRules are created using compute.forwardingRules.insert and associated with a VPN gateway.\n\n  * `labels`: Labels for this resource. These can only be added or modified by the setLabels method. Each label key/value pair must comply with RFC1035. Label values may be empty.\n\n    * `additional_properties`:\n\n  * `label_fingerprint`: A fingerprint for the labels being applied to this TargetVpnGateway, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a TargetVpnGateway.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_target_vpn_gateways.md",
    "content": "+++\ntitle = \"google_compute_target_vpn_gateways resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_target_vpn_gateways\"\nidentifier = \"inspec/resources/gcp/google_compute_target_vpn_gateways resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_target_vpn_gateways` InSpec audit resource to to test a Google Cloud TargetVpnGateway resource.\n\n## Examples\n\n```ruby\n    describe google_compute_target_vpn_gateways(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_target_vpn_gateways` resource:\n\nSee [google_compute_target_vpn_gateway](google_compute_target_vpn_gateway) for more detailed information.\n\n  * `kinds`: an array of `google_compute_target_vpn_gateway` kind\n  * `ids`: an array of `google_compute_target_vpn_gateway` id\n  * `creation_timestamps`: an array of `google_compute_target_vpn_gateway` creation_timestamp\n  * `names`: an array of `google_compute_target_vpn_gateway` name\n  * `descriptions`: an array of `google_compute_target_vpn_gateway` description\n  * `regions`: an array of `google_compute_target_vpn_gateway` region\n  * `networks`: an array of `google_compute_target_vpn_gateway` network\n  * `tunnels`: an array of `google_compute_target_vpn_gateway` tunnels\n  * `statuses`: an array of `google_compute_target_vpn_gateway` status\n  * `self_links`: an array of `google_compute_target_vpn_gateway` self_link\n  * `forwarding_rules`: an array of `google_compute_target_vpn_gateway` forwarding_rules\n  * `labels`: an array of `google_compute_target_vpn_gateway` labels\n  * `label_fingerprints`: an array of `google_compute_target_vpn_gateway` label_fingerprint\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_url_map.md",
    "content": "+++\ntitle = \"google_compute_url_map resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_url_map\"\nidentifier = \"inspec/resources/gcp/google_compute_url_map resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_url_map` is used to test a Google UrlMap resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_url_map(project: 'chef-gcp-inspec', name: 'inspec-gcp-url-map') do\n  it { should exist }\n  its('description') { should eq 'URL map description' }\n  its('default_service') { should match /\\/inspec-gcp-backend-service$/ }\n  its('host_rules.count') { should eq 1 }\n  its('host_rules.first.hosts') { should include 'site.com' }\n  its('path_matchers.count') { should eq 1 }\n  its('path_matchers.first.default_service') { should match /\\/inspec-gcp-backend-service$/ }\n  its('tests.count') { should eq 1 }\n  its('tests.first.host') { should eq 'test.com' }\n  its('tests.first.path') { should eq '/home' }\nend\n\ndescribe google_compute_url_map(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_url_map` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `default_service`: The full or partial URL of the defaultService resource to which traffic is directed if none of the hostRules match. If defaultRouteAction is additionally specified, advanced routing actions like URL Rewrites, etc. take effect prior to sending the request to the backend. However, if defaultService is specified, defaultRouteAction cannot contain any weightedBackendServices. Conversely, if routeAction specifies any weightedBackendServices, service must not be specified. Only one of defaultService, defaultUrlRedirect or defaultRouteAction.weightedBackendService must be set.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `fingerprint`: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking.\n\n  * `header_action`: Specifies changes to request and response headers that need to take effect for the selected backendService. The headerAction specified here take effect after headerAction specified under pathMatcher.\n\n    * `request_headers_to_add`: Headers to add to a matching request prior to forwarding the request to the backendService.\n\n      * `header_name`: The name of the header.\n\n      * `header_value`: The value of the header to add.\n\n      * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n    * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request prior to forwarding the request to the backendService.\n\n    * `response_headers_to_add`: Headers to add the response prior to sending the response back to the client.\n\n      * `header_name`: The name of the header.\n\n      * `header_value`: The value of the header to add.\n\n      * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n    * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response prior to sending the response back to the client.\n\n  * `host_rules`: The list of HostRules to use against the URL.\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `hosts`: The list of host patterns to match. They must be valid hostnames, except * will match any string of ([a-z0-9-.]*). In that case, * must be the first character and must be followed in the pattern by either - or ..\n\n    * `path_matcher`: The name of the PathMatcher to use to match the path portion of the URL if the hostRule matches the URL's host portion.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `path_matchers`: The list of named PathMatchers to use against the URL.\n\n    * `default_service`: The full or partial URL to the BackendService resource. This will be used if none of the pathRules or routeRules defined by this PathMatcher are matched. For example, the following are all valid URLs to a BackendService resource:   - https://www.googleapis.com/compute/v1/projects/project/global/backendServices/backendService   - compute/v1/projects/project/global/backendServices/backendService   - global/backendServices/backendService If defaultRouteAction is additionally specified, advanced routing actions like URL Rewrites, etc. take effect prior to sending the request to the backend. However, if defaultService is specified, defaultRouteAction cannot contain any weightedBackendServices. Conversely, if defaultRouteAction specifies any weightedBackendServices, defaultService must not be specified. Only one of defaultService, defaultUrlRedirect or defaultRouteAction.weightedBackendService must be set. Authorization requires one or more of the following Google IAM permissions on the specified resource defaultService:   - compute.backendBuckets.use   - compute.backendServices.use\n\n    * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n    * `header_action`: Specifies changes to request and response headers that need to take effect for the selected backendService. HeaderAction specified here are applied after the matching HttpRouteRule HeaderAction and before the HeaderAction in the UrlMap\n\n      * `request_headers_to_add`: Headers to add to a matching request prior to forwarding the request to the backendService.\n\n        * `header_name`: The name of the header.\n\n        * `header_value`: The value of the header to add.\n\n        * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n      * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request prior to forwarding the request to the backendService.\n\n      * `response_headers_to_add`: Headers to add the response prior to sending the response back to the client.\n\n        * `header_name`: The name of the header.\n\n        * `header_value`: The value of the header to add.\n\n        * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n      * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response prior to sending the response back to the client.\n\n    * `name`: The name to which this PathMatcher is referred by the HostRule.\n\n    * `default_url_redirect`: When none of the specified hostRules match, the request is redirected to a URL specified by defaultUrlRedirect. If defaultUrlRedirect is specified, defaultService or defaultRouteAction must not be set.\n\n      * `host_redirect`: The host that will be used in the redirect response instead of the one that was supplied in the request. The value must be between 1 and 255 characters.\n\n      * `https_redirect`: If set to true, the URL scheme in the redirected request is set to https. If set to false, the URL scheme of the redirected request will remain the same as that of the request. This must only be set for UrlMaps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n      * `path_redirect`: The path that will be used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request will be used for the redirect. The value must be between 1 and 1024 characters.\n\n      * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request will be used for the redirect. The value must be between 1 and 1024 characters.\n\n      * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are:  * MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301.  * FOUND, which corresponds to 302.  * SEE_OTHER which corresponds to 303.  * TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method will be retained.  * PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method will be retained.\n      Possible values:\n        * FOUND\n        * MOVED_PERMANENTLY_DEFAULT\n        * PERMANENT_REDIRECT\n        * SEE_OTHER\n        * TEMPORARY_REDIRECT\n\n      * `strip_query`: If set to true, any accompanying query portion of the original URL is removed prior to redirecting the request. If set to false, the query portion of the original URL is retained.\n\n    * `default_route_action`: defaultRouteAction takes effect when none of the pathRules or routeRules match. The load balancer performs advanced routing actions like URL rewrites, header transformations, etc. prior to forwarding the request to the selected backend. If defaultRouteAction specifies any weightedBackendServices, defaultService must not be set. Conversely if defaultService is set, defaultRouteAction cannot contain any weightedBackendServices.  Only one of defaultRouteAction or defaultUrlRedirect must be set.\n\n      * `url_rewrite`: The spec to modify the URL of the request, prior to forwarding the request to the matched service.\n\n        * `path_prefix_rewrite`: Prior to forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite.  The value must be between 1 and 1024 characters.\n\n        * `host_rewrite`: Prior to forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite.  The value must be between 1 and 255 characters.\n\n      * `timeout`: Specifies the timeout for the selected route. Timeout is computed from the time the request has been fully processed (i.e. end-of-stream) up until the response has been completely processed. Timeout includes all retries.  If not specified, will use the largest timeout among all backend services associated with the route.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n      * `retry_policy`: Specifies the retry policy associated with this route.\n\n        * `retry_conditions`: Specfies one or more conditions when this retry rule applies. Valid values are:  * 5xx: Loadbalancer will attempt a retry if the backend service responds with any 5xx response code,   or if the backend service does not respond at all, example: disconnects, reset, read timeout, * connection failure, and refused streams. * gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. * connect-failure: Loadbalancer will retry on failures connecting to backend services,   for example due to connection timeouts. * retriable-4xx: Loadbalancer will retry for retriable 4xx response codes.   Currently the only retriable error supported is 409. * refused-stream:Loadbalancer will retry if the backend service resets the stream with a REFUSED_STREAM error code.   This reset type indicates that it is safe to retry. * cancelled: Loadbalancer will retry if the gRPC status code in the response header is set to cancelled * deadline-exceeded: Loadbalancer will retry if the gRPC status code in the response header is set to deadline-exceeded * resource-exhausted: Loadbalancer will retry if the gRPC status code in the response header is set to resource-exhausted * unavailable: Loadbalancer will retry if the gRPC status code in the response header is set to unavailable\n\n        * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n        * `per_try_timeout`: Specifies a non-zero timeout per retry attempt.  If not specified, will use the timeout set in HttpRouteAction. If timeout in HttpRouteAction is not set, will use the largest timeout among all backend services associated with the route.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n      * `request_mirror_policy`: Specifies the policy on how requests intended for the route's backends are shadowed to a separate mirrored backend service. Loadbalancer does not wait for responses from the shadow service. Prior to sending traffic to the shadow service, the host / authority header is suffixed with -shadow.\n\n        * `backend_service`: The full or partial URL to the BackendService resource being mirrored to.\n\n      * `cors_policy`: The specification for allowing client side cross-origin requests. Please see [W3C Recommendation for Cross Origin Resource Sharing](https://www.w3.org/TR/cors/)\n\n        * `allow_origins`: Specifies the list of origins that will be allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n        * `allow_origin_regexes`: Specifies the regular expression patterns that match allowed origins. For regular expression grammar please see en.cppreference.com/w/cpp/regex/ecmascript An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n        * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n        * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n        * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n        * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This translates to the Access-Control-Max-Age header.\n\n        * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This translates to the Access-Control-Allow-Credentials header.\n\n        * `disabled`: If true, specifies the CORS policy is disabled. The default value is false, which indicates that the CORS policy is in effect.\n\n      * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by Loadbalancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the Loadbalancer for a percentage of requests.  timeout and retryPolicy will be ignored by clients that are configured with a faultInjectionPolicy.\n\n        * `delay`: The specification for how client requests are delayed as part of fault injection, before being sent to a backend service.\n\n          * `fixed_delay`: Specifies the value of the fixed delay interval.\n\n            * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n            * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n          * `percentage`: The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. The value must be between 0.0 and 100.0 inclusive.\n\n        * `abort`: The specification for how client requests are aborted as part of fault injection.\n\n          * `http_status`: The HTTP status code used to abort the request. The value must be between 200 and 599 inclusive.\n\n          * `percentage`: The percentage of traffic (connections/operations/requests) which will be aborted as part of fault injection. The value must be between 0.0 and 100.0 inclusive.\n\n  * `tests`: The list of expected URL mapping tests. Request to update this UrlMap will succeed only if all of the test cases pass. You can specify a maximum of 100 tests per UrlMap.\n\n    * `description`: Description of this test case.\n\n    * `host`: Host portion of the URL.\n\n    * `path`: Path portion of the URL.\n\n    * `service`: Expected BackendService resource the given URL should be mapped to.\n\n  * `default_url_redirect`: When none of the specified hostRules match, the request is redirected to a URL specified by defaultUrlRedirect. If defaultUrlRedirect is specified, defaultService or defaultRouteAction must not be set.\n\n    * `host_redirect`: The host that will be used in the redirect response instead of the one that was supplied in the request. The value must be between 1 and 255 characters.\n\n    * `https_redirect`: If set to true, the URL scheme in the redirected request is set to https. If set to false, the URL scheme of the redirected request will remain the same as that of the request. This must only be set for UrlMaps used in TargetHttpProxys. Setting this true for TargetHttpsProxy is not permitted. The default is set to false.\n\n    * `path_redirect`: The path that will be used in the redirect response instead of the one that was supplied in the request. pathRedirect cannot be supplied together with prefixRedirect. Supply one alone or neither. If neither is supplied, the path of the original request will be used for the redirect. The value must be between 1 and 1024 characters.\n\n    * `prefix_redirect`: The prefix that replaces the prefixMatch specified in the HttpRouteRuleMatch, retaining the remaining portion of the URL before redirecting the request. prefixRedirect cannot be supplied together with pathRedirect. Supply one alone or neither. If neither is supplied, the path of the original request will be used for the redirect. The value must be between 1 and 1024 characters.\n\n    * `redirect_response_code`: The HTTP Status code to use for this RedirectAction. Supported values are:  * MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds to 301.  * FOUND, which corresponds to 302.  * SEE_OTHER which corresponds to 303.  * TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request method will be retained.  * PERMANENT_REDIRECT, which corresponds to 308. In this case, the request method will be retained.\n    Possible values:\n      * FOUND\n      * MOVED_PERMANENTLY_DEFAULT\n      * PERMANENT_REDIRECT\n      * SEE_OTHER\n      * TEMPORARY_REDIRECT\n\n    * `strip_query`: If set to true, any accompanying query portion of the original URL is removed prior to redirecting the request. If set to false, the query portion of the original URL is retained. The default is set to false.\n\n  * `default_route_action`: defaultRouteAction takes effect when none of the hostRules match. The load balancer performs advanced routing actions like URL rewrites, header transformations, etc. prior to forwarding the request to the selected backend. If defaultRouteAction specifies any weightedBackendServices, defaultService must not be set. Conversely if defaultService is set, defaultRouteAction cannot contain any weightedBackendServices.  Only one of defaultRouteAction or defaultUrlRedirect must be set.\n\n    * `weighted_backend_services`: A list of weighted backend services to send traffic to when a route match occurs. The weights determine the fraction of traffic that flows to their corresponding backend service. If all traffic needs to go to a single backend service, there must be one weightedBackendService with weight set to a non 0 number.  Once a backendService is identified and before forwarding the request to the backend service, advanced routing actions like Url rewrites and header transformations are applied depending on additional settings specified in this HttpRouteAction.\n\n      * `backend_service`: The full or partial URL to the default BackendService resource. Before forwarding the request to backendService, the loadbalancer applies any relevant headerActions specified as part of this backendServiceWeight.\n\n      * `weight`: Specifies the fraction of traffic sent to backendService, computed as weight / (sum of all weightedBackendService weights in routeAction) .  The selection of a backend service is determined only for new traffic. Once a user's request has been directed to a backendService, subsequent requests will be sent to the same backendService as determined by the BackendService's session affinity policy.  The value must be between 0 and 1000\n\n      * `header_action`: Specifies changes to request and response headers that need to take effect for the selected backendService.  headerAction specified here take effect before headerAction in the enclosing HttpRouteRule, PathMatcher and UrlMap.\n\n        * `request_headers_to_remove`: A list of header names for headers that need to be removed from the request prior to forwarding the request to the backendService.\n\n        * `request_headers_to_add`: Headers to add to a matching request prior to forwarding the request to the backendService.\n\n          * `header_name`: The name of the header to add.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n        * `response_headers_to_remove`: A list of header names for headers that need to be removed from the response prior to sending the response back to the client.\n\n        * `response_headers_to_add`: Headers to add the response prior to sending the response back to the client.\n\n          * `header_name`: The name of the header to add.\n\n          * `header_value`: The value of the header to add.\n\n          * `replace`: If false, headerValue is appended to any values that already exist for the header. If true, headerValue is set for the header, discarding any values that were set for that header.\n\n    * `url_rewrite`: The spec to modify the URL of the request, prior to forwarding the request to the matched service.\n\n      * `path_prefix_rewrite`: Prior to forwarding the request to the selected backend service, the matching portion of the request's path is replaced by pathPrefixRewrite.  The value must be between 1 and 1024 characters.\n\n      * `host_rewrite`: Prior to forwarding the request to the selected service, the request's host header is replaced with contents of hostRewrite.  The value must be between 1 and 255 characters.\n\n    * `timeout`: Specifies the timeout for the selected route. Timeout is computed from the time the request has been fully processed (i.e. end-of-stream) up until the response has been completely processed. Timeout includes all retries.  If not specified, will use the largest timeout among all backend services associated with the route.\n\n      * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n      * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n    * `retry_policy`: Specifies the retry policy associated with this route.\n\n      * `retry_conditions`: Specfies one or more conditions when this retry rule applies. Valid values are:  * 5xx: Loadbalancer will attempt a retry if the backend service responds with any 5xx response code,   or if the backend service does not respond at all, example: disconnects, reset, read timeout, * connection failure, and refused streams. * gateway-error: Similar to 5xx, but only applies to response codes 502, 503 or 504. * connect-failure: Loadbalancer will retry on failures connecting to backend services,   for example due to connection timeouts. * retriable-4xx: Loadbalancer will retry for retriable 4xx response codes.   Currently the only retriable error supported is 409. * refused-stream:Loadbalancer will retry if the backend service resets the stream with a REFUSED_STREAM error code.   This reset type indicates that it is safe to retry. * cancelled: Loadbalancer will retry if the gRPC status code in the response header is set to cancelled * deadline-exceeded: Loadbalancer will retry if the gRPC status code in the response header is set to deadline-exceeded * resource-exhausted: Loadbalancer will retry if the gRPC status code in the response header is set to resource-exhausted * unavailable: Loadbalancer will retry if the gRPC status code in the response header is set to unavailable\n\n      * `num_retries`: Specifies the allowed number retries. This number must be > 0. If not specified, defaults to 1.\n\n      * `per_try_timeout`: Specifies a non-zero timeout per retry attempt.  If not specified, will use the timeout set in HttpRouteAction. If timeout in HttpRouteAction is not set, will use the largest timeout among all backend services associated with the route.\n\n        * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n        * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n    * `request_mirror_policy`: Specifies the policy on how requests intended for the route's backends are shadowed to a separate mirrored backend service. Loadbalancer does not wait for responses from the shadow service. Prior to sending traffic to the shadow service, the host / authority header is suffixed with -shadow.\n\n      * `backend_service`: The full or partial URL to the BackendService resource being mirrored to.\n\n    * `cors_policy`: The specification for allowing client side cross-origin requests. Please see [W3C Recommendation for Cross Origin Resource Sharing](https://www.w3.org/TR/cors/)\n\n      * `allow_origins`: Specifies the list of origins that will be allowed to do CORS requests. An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n      * `allow_origin_regexes`: Specifies the regular expression patterns that match allowed origins. For regular expression grammar please see en.cppreference.com/w/cpp/regex/ecmascript An origin is allowed if it matches either an item in allowOrigins or an item in allowOriginRegexes.\n\n      * `allow_methods`: Specifies the content for the Access-Control-Allow-Methods header.\n\n      * `allow_headers`: Specifies the content for the Access-Control-Allow-Headers header.\n\n      * `expose_headers`: Specifies the content for the Access-Control-Expose-Headers header.\n\n      * `max_age`: Specifies how long results of a preflight request can be cached in seconds. This translates to the Access-Control-Max-Age header.\n\n      * `allow_credentials`: In response to a preflight request, setting this to true indicates that the actual request can include user credentials. This translates to the Access-Control-Allow-Credentials header.\n\n      * `disabled`: If true, specifies the CORS policy is disabled. The default value is false, which indicates that the CORS policy is in effect.\n\n    * `fault_injection_policy`: The specification for fault injection introduced into traffic to test the resiliency of clients to backend service failure. As part of fault injection, when clients send requests to a backend service, delays can be introduced by Loadbalancer on a percentage of requests before sending those request to the backend service. Similarly requests from clients can be aborted by the Loadbalancer for a percentage of requests.  timeout and retryPolicy will be ignored by clients that are configured with a faultInjectionPolicy.\n\n      * `delay`: The specification for how client requests are delayed as part of fault injection, before being sent to a backend service.\n\n        * `fixed_delay`: Specifies the value of the fixed delay interval.\n\n          * `seconds`: Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\n          * `nanos`: Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n\n        * `percentage`: The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. The value must be between 0.0 and 100.0 inclusive.\n\n      * `abort`: The specification for how client requests are aborted as part of fault injection.\n\n        * `http_status`: The HTTP status code used to abort the request. The value must be between 200 and 599 inclusive.\n\n        * `percentage`: The percentage of traffic (connections/operations/requests) which will be aborted as part of fault injection. The value must be between 0.0 and 100.0 inclusive.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_url_maps.md",
    "content": "+++\ntitle = \"google_compute_url_maps resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_url_maps\"\nidentifier = \"inspec/resources/gcp/google_compute_url_maps resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_url_maps` is used to test a Google UrlMap resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_url_maps(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-url-map' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_url_maps` resource:\n\nSee [google_compute_url_map](google_compute_url_map) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_url_map` creation_timestamp\n  * `default_services`: an array of `google_compute_url_map` default_service\n  * `descriptions`: an array of `google_compute_url_map` description\n  * `ids`: an array of `google_compute_url_map` id\n  * `fingerprints`: an array of `google_compute_url_map` fingerprint\n  * `header_actions`: an array of `google_compute_url_map` header_action\n  * `host_rules`: an array of `google_compute_url_map` host_rules\n  * `names`: an array of `google_compute_url_map` name\n  * `path_matchers`: an array of `google_compute_url_map` path_matchers\n  * `tests`: an array of `google_compute_url_map` tests\n  * `default_url_redirects`: an array of `google_compute_url_map` default_url_redirect\n  * `default_route_actions`: an array of `google_compute_url_map` default_route_action\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_vpn_gateway.md",
    "content": "+++\ntitle = \"google_compute_vpn_gateway resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_vpn_gateway\"\nidentifier = \"inspec/resources/gcp/google_compute_vpn_gateway resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_vpn_gateway` InSpec audit resource to to test a Google Cloud VpnGateway resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_vpn_gateway(project: 'chef-gcp-inspec', region: ' value_region', vpnGateway: ' ') do\n\tit { should exist }\n\tits('kind') { should cmp 'value_kind' }\n\tits('id') { should cmp 'value_id' }\n\tits('creation_timestamp') { should cmp 'value_creationtimestamp' }\n\tits('name') { should cmp 'value_name' }\n\tits('description') { should cmp 'value_description' }\n\tits('region') { should cmp 'value_region' }\n\tits('network') { should cmp 'value_network' }\n\tits('self_link') { should cmp 'value_selflink' }\n\tits('label_fingerprint') { should cmp 'value_labelfingerprint' }\n\tits('stack_type') { should cmp 'value_stacktype' }\n\nend\n\ndescribe google_compute_vpn_gateway(project: 'chef-gcp-inspec', region: ' value_region', vpnGateway: ' ') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_vpn_gateway` resource:\n\n\n  * `kind`: [Output Only] Type of resource. Always compute#vpnGateway for VPN gateways.\n\n  * `id`: [Output Only] The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: [Output Only] Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource. Provide this property when you create the resource.\n\n  * `region`: [Output Only] URL of the region where the VPN gateway resides.\n\n  * `network`: URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.\n\n  * `self_link`: [Output Only] Server-defined URL for the resource.\n\n  * `labels`: Labels for this resource. These can only be added or modified by the setLabels method. Each label key/value pair must comply with RFC1035. Label values may be empty.\n\n    * `additional_properties`: \n\n  * `label_fingerprint`: A fingerprint for the labels being applied to this VpnGateway, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a VpnGateway.\n\n  * `vpn_interfaces`: The list of VPN interfaces associated with this VPN gateway.\n\n    * `id`: [Output Only] Numeric identifier for this VPN interface associated with the VPN gateway.\n\n    * `ip_address`: [Output Only] IP address for this VPN interface associated with the VPN gateway. The IP address could be either a regional external IP address or a regional internal IP address. The two IP addresses for a VPN gateway must be all regional external or regional internal IP addresses. There cannot be a mix of regional external IP addresses and regional internal IP addresses. For HA VPN over Cloud Interconnect, the IP addresses for both interfaces could either be regional internal IP addresses or regional external IP addresses. For regular (non HA VPN over Cloud Interconnect) HA VPN tunnels, the IP address must be a regional external IP address.\n\n    * `interconnect_attachment`: URL of the VLAN attachment (interconnectAttachment) resource for this VPN gateway interface. When the value of this field is present, the VPN gateway is used for HA VPN over Cloud Interconnect; all egress or ingress traffic for this VPN gateway interface goes through the specified VLAN attachment resource.\n\n  * `stack_type`: The stack type for this VPN gateway to identify the IP protocols that are enabled. Possible values are: IPV4_ONLY, IPV4_IPV6. If not specified, IPV4_ONLY will be used.\n  Possible values:\n    * IPV4_IPV6\n    * IPV4_ONLY\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_vpn_gateways.md",
    "content": "+++\ntitle = \"google_compute_vpn_gateways resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_vpn_gateways\"\nidentifier = \"inspec/resources/gcp/google_compute_vpn_gateways resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_vpn_gateways` InSpec audit resource to to test a Google Cloud VpnGateway resource.\n\n## Examples\n\n```ruby\n    describe google_compute_vpn_gateways(project: 'chef-gcp-inspec', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_vpn_gateways` resource:\n\nSee [google_compute_vpn_gateway](google_compute_vpn_gateway) for more detailed information.\n\n  * `kinds`: an array of `google_compute_vpn_gateway` kind\n  * `ids`: an array of `google_compute_vpn_gateway` id\n  * `creation_timestamps`: an array of `google_compute_vpn_gateway` creation_timestamp\n  * `names`: an array of `google_compute_vpn_gateway` name\n  * `descriptions`: an array of `google_compute_vpn_gateway` description\n  * `regions`: an array of `google_compute_vpn_gateway` region\n  * `networks`: an array of `google_compute_vpn_gateway` network\n  * `self_links`: an array of `google_compute_vpn_gateway` self_link\n  * `labels`: an array of `google_compute_vpn_gateway` labels\n  * `label_fingerprints`: an array of `google_compute_vpn_gateway` label_fingerprint\n  * `vpn_interfaces`: an array of `google_compute_vpn_gateway` vpn_interfaces\n  * `stack_types`: an array of `google_compute_vpn_gateway` stack_type\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_vpn_tunnel.md",
    "content": "+++\ntitle = \"google_compute_vpn_tunnel resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_vpn_tunnel\"\nidentifier = \"inspec/resources/gcp/google_compute_vpn_tunnel resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_vpn_tunnel` is used to test a Google VpnTunnel resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_vpn_tunnel(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'inspec-vpn-tunnel') do\n  it { should exist }\n  its('peer_ip') { should eq '15.0.0.120' }\nend\n\ndescribe google_compute_vpn_tunnel(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute vpn_tunnel exists\n\n    describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn-tunnel') do\n      it { should exist }\n    end\n\n### Test when a GCP compute vpn_tunnel was created\n\n    describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn-tunnel') do\n      its('creation_timestamp_date') { should be > Time.now - 365*60*60*24*10 }\n    end\n\n### Test for an expected vpn_tunnel identifier \n\n    describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn-tunnel') do\n      its('id') { should eq 12345567789 }\n    end    \n\n### Test that a vpn_tunnel peer address is as expected\n\n    describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn-tunnel') do\n      its('peer_ip') { should eq \"123.123.123.123\" }\n    end  \n\n### Test that a vpn_tunnel status is as expected\n\n    describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn_tunnel') do\n      its('status') { should eq \"ESTABLISHED\" }\n    end \n\n## Properties\n\nProperties that can be accessed from the `google_compute_vpn_tunnel` resource:\n\n\n  * `id`: The unique identifier for the resource. This identifier is defined by the server.\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `name`: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.\n\n  * `description`: An optional description of this resource.\n\n  * `target_vpn_gateway`: URL of the Target VPN gateway with which this VPN tunnel is associated.\n\n  * `vpn_gateway`: URL of the VPN gateway with which this VPN tunnel is associated. This must be used if a High Availability VPN gateway resource is created.\n\n  * `vpn_gateway_interface`: The interface ID of the VPN gateway with which this VPN tunnel is associated.\n\n  * `peer_external_gateway`: URL of the peer side external VPN gateway to which this VPN tunnel is connected.\n\n  * `peer_external_gateway_interface`: The interface ID of the external VPN gateway to which this VPN tunnel is connected.\n\n  * `peer_gcp_gateway`: URL of the peer side HA GCP VPN gateway to which this VPN tunnel is connected. If provided, the VPN tunnel will automatically use the same vpn_gateway_interface ID in the peer GCP VPN gateway.\n\n  * `router`: URL of router resource to be used for dynamic routing.\n\n  * `peer_ip`: IP address of the peer VPN gateway. Only IPv4 is supported.\n\n  * `shared_secret`: Shared secret used to set the secure session between the Cloud VPN gateway and the peer VPN gateway.\n\n  * `shared_secret_hash`: Hash of the shared secret.\n\n  * `ike_version`: IKE protocol version to use when establishing the VPN tunnel with peer VPN gateway. Acceptable IKE versions are 1 or 2. Default version is 2.\n\n  * `local_traffic_selector`: Local traffic selector to use when establishing the VPN tunnel with peer VPN gateway. The value should be a CIDR formatted string, for example `192.168.0.0/16`. The ranges should be disjoint. Only IPv4 is supported.\n\n  * `remote_traffic_selector`: Remote traffic selector to use when establishing the VPN tunnel with peer VPN gateway. The value should be a CIDR formatted string, for example `192.168.0.0/16`. The ranges should be disjoint. Only IPv4 is supported.\n\n  * `labels`: (Beta only) Labels to apply to this VpnTunnel.\n\n  * `label_fingerprint`: (Beta only) The fingerprint used for optimistic locking of this resource.  Used internally during updates.\n\n  * `region`: The region where the tunnel is located.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_vpn_tunnels.md",
    "content": "+++\ntitle = \"google_compute_vpn_tunnels resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_vpn_tunnels\"\nidentifier = \"inspec/resources/gcp/google_compute_vpn_tunnels resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_vpn_tunnels` is used to test a Google VpnTunnel resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_vpn_tunnels(project: 'chef-gcp-inspec', region: 'europe-west2') do\n\tits('vpn_tunnel_names') { should include 'inspec-vpn-tunnel' }\n  its('peer_ips') { should include '15.0.0.120' }\nend\n```\n\n### Test that there are no more than a specified number of vpn_tunnels available for the project and region\n\n    describe google_compute_vpn_tunnels(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected vpn_tunnel name is available for the project and region\n\n    describe google_compute_vpn_tunnels(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('vpn_tunnel_names') { should include \"vpn_tunnel-name\" }\n    end\n\n### Test that an expected vpn_tunnel target_vpn_gateways name is not present for the project and region\n\n    describe google_compute_vpn_tunnels(project: 'chef-inspec-gcp', region: 'europe-west2') do\n      its('vpn_tunnel_target_vpn_gateways') { should not include \"gateway-name\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_vpn_tunnels` resource:\n\nSee [google_compute_vpn_tunnel](google_compute_vpn_tunnel) for more detailed information.\n\n  * `ids`: an array of `google_compute_vpn_tunnel` id\n  * `creation_timestamps`: an array of `google_compute_vpn_tunnel` creation_timestamp\n  * `vpn_tunnel_names`: an array of `google_compute_vpn_tunnel` name\n  * `descriptions`: an array of `google_compute_vpn_tunnel` description\n  * `target_vpn_gateways`: an array of `google_compute_vpn_tunnel` target_vpn_gateway\n  * `vpn_gateways`: an array of `google_compute_vpn_tunnel` vpn_gateway\n  * `vpn_gateway_interfaces`: an array of `google_compute_vpn_tunnel` vpn_gateway_interface\n  * `peer_external_gateways`: an array of `google_compute_vpn_tunnel` peer_external_gateway\n  * `peer_external_gateway_interfaces`: an array of `google_compute_vpn_tunnel` peer_external_gateway_interface\n  * `peer_gcp_gateways`: an array of `google_compute_vpn_tunnel` peer_gcp_gateway\n  * `routers`: an array of `google_compute_vpn_tunnel` router\n  * `peer_ips`: an array of `google_compute_vpn_tunnel` peer_ip\n  * `shared_secrets`: an array of `google_compute_vpn_tunnel` shared_secret\n  * `shared_secret_hashes`: an array of `google_compute_vpn_tunnel` shared_secret_hash\n  * `ike_versions`: an array of `google_compute_vpn_tunnel` ike_version\n  * `local_traffic_selectors`: an array of `google_compute_vpn_tunnel` local_traffic_selector\n  * `remote_traffic_selectors`: an array of `google_compute_vpn_tunnel` remote_traffic_selector\n  * `labels`: (Beta only) an array of `google_compute_vpn_tunnel` labels\n  * `label_fingerprints`: (Beta only) an array of `google_compute_vpn_tunnel` label_fingerprint\n  * `regions`: an array of `google_compute_vpn_tunnel` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_xpn_resources.md",
    "content": "+++\ntitle = \"google_compute_xpn_resources resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_xpn_resources\"\nidentifier = \"inspec/resources/gcp/google_compute_xpn_resources resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_xpn_resources` InSpec audit resource to to test a Google Cloud Project resource.\n\n## Examples\n\n```ruby\n  describe google_compute_xpn_resources(project: 'chef-gcp-inspec') do\n    it { should exist }\n    its('ids') { should include xpn_resources['id']}\n    its('types') { should include xpn_resources['type']}\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_xpn_resources` resource:\n\nSee [google_compute_xpn_resources](google_compute_xpn_resources) for more detailed information.\n\n  * `kind`: Type of resource. Always compute#projectsGetXpnResources for lists of service resources (a.k.a service projects)\n  * `resources[]`: Service resources (a.k.a service projects) attached to this project as their shared VPC host.\n  * `resources[].type`: The type of the service resource.\n  * `resources[].id`: The ID of the service resource. In the case of projects, this field supports project id (e.g., my-project-123) and project number (e.g. 12345678).\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_zone.md",
    "content": "+++\ntitle = \"google_compute_zone resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_zone\"\nidentifier = \"inspec/resources/gcp/google_compute_zone resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_zone` is used to test a Google Zone resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_zone(project: 'chef-gcp-inspec', name: \"us-central1-a\") do\n  it { should exist }\n  it { should be_up }\nend\n```\n\n### Test that a GCP compute zone exists\n\n    describe google_compute_zone(project: 'chef-inspec-gcp',  zone: 'us-east1-b') do\n      it { should exist }\n    end\n\n### Test that a GCP compute zone is in the expected state\n\n    describe google_compute_zone(project: 'chef-inspec-gcp',  zone: 'us-east1-b') do\n      its('status') { should eq 'UP' }\n      # or equivalently\n      it { should be_up }\n    end\n\n### Test that a GCP compute zone has an expected CPU platform\n\n    describe google_compute_zone(project: 'chef-inspec-gcp',  zone: 'us-east1-b') do\n      its('available_cpu_platforms') { should include \"Intel Skylake\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_zone` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.\n\n  * `deprecated`: The deprecation status associated with this machine type.\n\n    * `deleted`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DELETED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `deprecated`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to DEPRECATED. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `obsolete`: An optional RFC3339 timestamp on or after which the state of this resource is intended to change to OBSOLETE. This is only informational and the status will not change unless the client explicitly changes it.\n\n    * `replacement`: The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.\n\n    * `state`: The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.\n    Possible values:\n      * DEPRECATED\n      * OBSOLETE\n      * DELETED\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `region`: The region where the zone is located.\n\n  * `status`: The status of the zone.\n  Possible values:\n    * UP\n    * DOWN\n\n  * `available_cpu_platforms`: The available CPU platforms in this zone\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_zone_operation.md",
    "content": "+++\ntitle = \"google_compute_zone_operation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_zone_operation\"\nidentifier = \"inspec/resources/gcp/google_compute_zone_operation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_zone_operation` InSpec audit resource to to test a Google Cloud ZoneOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_zone_operation(project: 'chef-gcp-inspec', zone: 'us-central1-a', name: 'operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69') do\nit { should exist }\nits('name') { should eq 'operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69' }\nits('status') { should eq '' }\nits('progress') { should eq '100' }\nend\n\ndescribe google_compute_zone_operation(project: 'chef-gcp-inspec', zone: 'us-central1-a', name: 'nonexistent') do\nit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_zone_operation` resource:\n\n\n  * `creation_timestamp`: Creation timestamp in RFC3339 text format.This field is deprecated.\n\n  * `description`: An optional textual description of the resource.\n\n  * `id`: The unique identifier for the resource.\n\n  * `name`: Name of the resource.\n\n  * `status_message`: An optional, human-readable explanation of the status.\n\n  * `target_id`: The unique target ID, which identifies a specific incarnation of the target resource.\n\n  * `status`: The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.\n  Possible values:\n    * PENDING\n    * RUNNING\n    * DONE\n\n  * `user`: User who requested the operation, for example: user@example.com.\n\n  * `insert_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `start_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `end_time`: The time that this operation was requested. This value is in RFC3339 text format.\n\n  * `progress`: An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.\n\n  * `region`: The URL of the region where the operation resides. Only applicable when performing regional operations.\n\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_zone_operations.md",
    "content": "+++\ntitle = \"google_compute_zone_operations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_zone_operations\"\nidentifier = \"inspec/resources/gcp/google_compute_zone_operations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_compute_zone_operations` InSpec audit resource to to test a Google Cloud ZoneOperation resource.\n\n## Examples\n\n```ruby\ndescribe google_compute_zone_operations(project: 'chef-gcp-inspec', zone: 'us-central1-a') do\n\tit { should exist }\n\tits('names') { should include 'operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69' }\n\tits('progresses') { should include '100' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_compute_zone_operations` resource:\n\nSee [google_compute_zone_operation](google_compute_zone_operation) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_zone_operation` creation_timestamp\n  * `descriptions`: an array of `google_compute_zone_operation` description\n  * `ids`: an array of `google_compute_zone_operation` id\n  * `names`: an array of `google_compute_zone_operation` name\n  * `status_messages`: an array of `google_compute_zone_operation` status_message\n  * `target_ids`: an array of `google_compute_zone_operation` target_id\n  * `statuses`: an array of `google_compute_zone_operation` status\n  * `users`: an array of `google_compute_zone_operation` user\n  * `insert_times`: an array of `google_compute_zone_operation` insert_time\n  * `start_times`: an array of `google_compute_zone_operation` start_time\n  * `end_times`: an array of `google_compute_zone_operation` end_time\n  * `progresses`: an array of `google_compute_zone_operation` progress\n  * `regions`: an array of `google_compute_zone_operation` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_compute_zones.md",
    "content": "+++\ntitle = \"google_compute_zones resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_compute_zones\"\nidentifier = \"inspec/resources/gcp/google_compute_zones resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_compute_zones` is used to test a Google Zone resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ngoogle_compute_zones(project: 'chef-gcp-inspec').zone_names.each do |zone_name|\n  describe google_compute_zone(project: 'chef-gcp-inspec', name: zone_name) do\n    it { should exist }\n    it { should be_up }\n  end\nend\n```\n\n### Test that there are no more than a specified number of zones available for the project\n\n    describe google_compute_zones(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test the exact number of zones in the project\n\n    describe google_compute_zones(project: 'chef-inspec-gcp') do\n      its('zone_ids.count') { should cmp 9 }\n    end\n\n### Test that an expected zone is available for the project\n\n    describe google_compute_zones(project: 'chef-inspec-gcp') do\n      its('zone_names') { should include \"us-east1-b\" }\n    end\n\n### Test whether any zones are in status \"DOWN\"\n\n    describe google_compute_zones(project: 'chef-inspec-gcp') do\n      its('zone_statuses') { should_not include \"DOWN\" }\n    end\n\n### Test that a subset of all zones matching \"us*\" are \"UP\"\n\n    google_compute_zones(project: 'chef-inspec-gcp').where(zone_name: /^us/).zone_names.each do |zone_name|\n      describe google_compute_zone(project: 'chef-inspec-gcp',  zone: zone_name) do\n        it { should exist }\n        its('status') { should eq 'UP' }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_compute_zones` resource:\n\nSee [google_compute_zone](google_compute_zone) for more detailed information.\n\n  * `creation_timestamps`: an array of `google_compute_zone` creation_timestamp\n  * `deprecateds`: an array of `google_compute_zone` deprecated\n  * `descriptions`: an array of `google_compute_zone` description\n  * `zone_ids`: an array of `google_compute_zone` id\n  * `zone_names`: an array of `google_compute_zone` name\n  * `regions`: an array of `google_compute_zone` region\n  * `zone_statuses`: an array of `google_compute_zone` status\n  * `available_cpu_platforms`: an array of `google_compute_zone` available_cpu_platforms\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_cluster.md",
    "content": "+++\ntitle = \"google_container_cluster resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_cluster\"\nidentifier = \"inspec/resources/gcp/google_container_cluster resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_cluster` InSpec audit resource to to test a Google Cloud Cluster resource.\n\n## Examples\n\n```ruby\ndescribe google_container_cluster(project: 'chef-gcp-inspec', location: 'europe-west2-a', name: 'gcp-inspec-kube-cluster') do\n  it { should exist }\n  its('locations.sort'){ should cmp [ 'europe-west2-a', 'europe-west2-b', 'europe-west2-c' ].sort }\n\n  its('master_auth.username') { should eq 'gcp-inspec-kube-admin' }\nend\n\ndescribe google_container_cluster(project: 'chef-gcp-inspec', location: 'europe-west2-a', name: 'nonexistent') do\n  it { should_not exist }\nend\n\ndescribe google_container_cluster(project: 'chef-gcp-inspec', location: 'europe-west2-a', name: 'gcp-inspec-kube-cluster', beta: true) do\n  it { should exist }\n  its('release_channel.channel') { should cmp \"RAPID\" }\nend\n```\n\n### Test that a GCP container cluster is in a particular state e.g. \"RUNNING\"\n\n    describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: 'inspec-gcp-kube-cluster') do\n      its('status') { should eq 'RUNNING' }\n    end\n\n### Test that a GCP container cluster has the expected kube master user/password\n\n    describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: 'inspec-gcp-kube-cluster') do\n      its('master_auth.username'){ should eq \"user_name\"}\n      its('master_auth.password'){ should eq \"choose_something_strong\"}\n    end\n\n### Test that the locations where the GCP container cluster is running match those expected\n\n    describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: 'inspec-gcp-kube-cluster') do\n      its('locations.sort'){should cmp [\"europe-west2-a\", \"europe-west2-b\", \"europe-west2-c\"].sort}\n    end\n\n### Test GCP container cluster network and subnetwork settings\n\n    describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: 'inspec-gcp-kube-cluster') do\n      its('network'){should eq \"default\"}\n      its('subnetwork'){should eq \"default\"}\n    end\n\n### Test GCP container cluster node pool configuration settings\n\n    describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: 'inspec-gcp-kube-cluster') do\n      its('node_config.disk_size_gb'){should eq 100}\n      its('node_config.image_type'){should eq \"COS\"}\n      its('node_config.machine_type'){should eq \"n1-standard-1\"}\n      its('node_ipv4_cidr_size'){should eq 24}\n      its('node_pools.count'){should eq 1}\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_container_cluster` resource:\n\n\n  * `name`: The name of this cluster. The name must be unique within this project and location, and can be up to 40 characters. Must be Lowercase letters, numbers, and hyphens only. Must start with a letter. Must end with a number or a letter.\n\n  * `description`: An optional description of this cluster.\n\n  * `initial_node_count`: The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota. For requests, this field should only be used in lieu of a \"nodePool\" object, since this configuration (along with the \"nodeConfig\") will be used to create a \"NodePool\" object with an auto-generated name. Do not use this and a nodePool at the same time.  This field has been deprecated. Please use nodePool.initial_node_count instead.\n\n  * `node_config`: Parameters used in creating the cluster's nodes.  For requests, this field should only be used in lieu of a \"nodePool\" object, since this configuration (along with the \"initialNodeCount\") will be used to create a \"NodePool\" object with an auto-generated name. Do not use this and a nodePool at the same time. For responses, this field will be populated with the node configuration of the first node pool. If unspecified, the defaults are used.\n\n    * `machine_type`: The name of a Google Compute Engine machine type (e.g. n1-standard-1).  If unspecified, the default machine type is n1-standard-1.\n\n    * `disk_size_gb`: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.\n\n    * `oauth_scopes`: The set of Google API scopes to be made available on all of the node VMs under the \"default\" service account.  The following scopes are recommended, but not required, and by default are not included:  https://www.googleapis.com/auth/compute is required for mounting persistent storage on your nodes. https://www.googleapis.com/auth/devstorage.read_only is required for communicating with gcr.io (the Google Container Registry).  If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.\n\n    * `service_account`: The Google Cloud Platform Service Account to be used by the node VMs.  If no Service Account is specified, the \"default\" service account is used.\n\n    * `metadata`: The metadata key/value pairs assigned to instances in the cluster.  Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: \"instance-template\", \"kube-env\", \"startup-script\", and \"user-data\"  Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB.  The total size of all keys and values must be less than 512 KB.  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `image_type`: The image type to use for this node.  Note that for a given image type, the latest version of it will be used.\n\n    * `labels`: The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see:   http://kubernetes.io/v1.1/docs/user-guide/labels.html  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `local_ssd_count`: The number of local SSD disks to be attached to the node.  The limit for this value is dependant upon the maximum number of disks available on a machine per zone. See:  https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits  for more information.\n\n    * `tags`: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during cluster or node pool creation. Each tag within the list must comply with RFC1035.\n\n    * `preemptible`: Whether the nodes are created as preemptible VM instances. See: https://cloud.google.com/compute/docs/instances/preemptible for more information about preemptible VM instances.\n\n    * `accelerators`: A list of hardware accelerators to be attached to each node. See https://cloud.google.com/compute/docs/gpus for more information about support for GPUs.\n\n      * `accelerator_count`: The number of accelerator cards exposed to an instance.\n\n      * `accelerator_type`: The accelerator type resource name\n\n    * `disk_type`: Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')  If unspecified, the default disk type is 'pd-standard'\n\n    * `min_cpu_platform`: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform.\n\n    * `taints`: List of kubernetes taints to be applied to each node. For more information, including usage and the valid values, see: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/\n\n      * `key`: Key for taint\n\n      * `value`: Value for taint\n\n      * `effect`: Effect for taint\n      Possible values:\n        * EFFECT_UNSPECIFIED\n        * NO_SCHEDULE\n        * PREFER_NO_SCHEDULE\n        * NO_EXECUTE\n\n    * `shielded_instance_config`: Shielded Instance options.\n\n      * `enable_secure_boot`: Defines whether the instance has Secure Boot enabled.  Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails.\n\n      * `enable_integrity_monitoring`: Defines whether the instance has integrity monitoring enabled.  Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created.\n\n  * `master_auth`: The authentication information for accessing the master endpoint.\n\n    * `username`: The username to use for HTTP basic authentication to the master endpoint.\n\n    * `password`: The password to use for HTTP basic authentication to the master endpoint. Because the master endpoint is open to the Internet, you should create a strong password with a minimum of 16 characters.\n\n    * `client_certificate_config`: Configuration for client certificate authentication on the cluster. For clusters before v1.12, if no configuration is specified, a client certificate is issued.\n\n      * `issue_client_certificate`: Issue a client certificate.\n\n    * `cluster_ca_certificate`: Base64-encoded public certificate that is the root of trust for the cluster.\n\n    * `client_certificate`: Base64-encoded public certificate used by clients to authenticate to the cluster endpoint.\n\n    * `client_key`: Base64-encoded private key used by clients to authenticate to the cluster endpoint.\n\n  * `fleet`: The fleet configuration for the cluster.\n    * `project`: The Fleet host project(project ID or project number) where this cluster will be registered to. This field cannot be changed after the cluster has been registered.\n    * `membership`: The full resource name of the registered fleet membership of the cluster, in the format //gkehub.googleapis.com/projects/*/locations/*/memberships/*.\n    * `pre_registered`: Whether the cluster has been registered through the fleet API.\n\n  * `logging_service`: The logging service the cluster should use to write logs. Currently available options:  logging.googleapis.com - the Google Cloud Logging service. none - no logs will be exported from the cluster.  if left as an empty string,logging.googleapis.com will be used.\n  Possible values:\n    * logging.googleapis.com\n    * none\n\n  * `monitoring_service`: The monitoring service the cluster should use to write metrics. Currently available options:  monitoring.googleapis.com - the Google Cloud Monitoring service. none - no metrics will be exported from the cluster.  if left as an empty string, monitoring.googleapis.com will be used.\n  Possible values:\n    * monitoring.googleapis.com\n    * none\n\n  * `network`: The name of the Google Compute Engine network to which the cluster is connected. If left unspecified, the default network will be used.\n\n  * `database_encryption`: Configuration of etcd encryption.\n\n    * `state`: Denotes the state of etcd encryption.\n    Possible values:\n      * ENCRYPTED\n      * DECRYPTED\n\n    * `key_name`: Name of CloudKMS key to use for the encryption of secrets in etcd. Ex. `projects/my-project/locations/global/keyRings/my-ring/cryptoKeys/my-key`\n\n  * `private_cluster_config`: Configuration for a private cluster.\n\n    * `enable_private_nodes`: Whether nodes have internal IP addresses only. If enabled, all nodes are given only RFC 1918 private addresses and communicate with the master via private networking.\n\n    * `enable_private_endpoint`: Whether the master's internal IP address is used as the cluster endpoint.\n\n    * `master_ipv4_cidr_block`: The IP range in CIDR notation to use for the hosted master network. This range will be used for assigning internal IP addresses to the master or set of masters, as well as the ILB VIP. This range must not overlap with any other ranges in use within the cluster's network.\n\n    * `private_endpoint`: The internal IP address of this cluster's master endpoint.\n\n    * `public_endpoint`: The external IP address of this cluster's master endpoint.\n\n  * `cluster_ipv4_cidr`: The IP address range of the container pods in this cluster, in CIDR notation (e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify a /14 block in 10.0.0.0/8.\n\n  * `enable_tpu`: (Optional) Whether to enable Cloud TPU resources in this cluster. See the official documentation - https://cloud.google.com/tpu/docs/kubernetes-engine-setup\n\n  * `tpu_ipv4_cidr_block`: The IP address range of the Cloud TPUs in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`).\n\n  * `addons_config`: Configurations for the various addons available to run in the cluster.\n\n    * `http_load_balancing`: Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.\n\n      * `disabled`: Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.\n\n    * `horizontal_pod_autoscaling`: Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.\n\n      * `disabled`: Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.\n\n    * `kubernetes_dashboard`: Configuration for the Kubernetes Dashboard. This addon is deprecated, and will be disabled in 1.15. It is recommended to use the Cloud Console to manage and monitor your Kubernetes clusters, workloads and applications.\n\n      * `disabled`: Whether the Kubernetes Dashboard is enabled for this cluster.\n\n    * `network_policy_config`: Configuration for NetworkPolicy. This only tracks whether the addon is enabled or not on the Master, it does not track whether network policy is enabled for the nodes.\n\n      * `disabled`: Whether NetworkPolicy is enabled for this cluster.\n\n    * `gce_persistent_disk_csi_driver_config`: Configuration for enable the automatic deployment and management of the persistent disk driver without having to manually set it up.\n\n      * `enabled`: Whether NetworkPolicy is enabled for this cluster.\n\n  * `subnetwork`: The name of the Google Compute Engine subnetwork to which the cluster is connected.\n\n  * `locations`: The list of Google Compute Engine zones in which the cluster's nodes should be located.\n\n  * `resource_labels`: The resource labels for the cluster to use to annotate any related Google Compute Engine resources.\n\n  * `label_fingerprint`: The fingerprint of the set of labels for this cluster.\n\n  * `legacy_abac`: Configuration for the legacy ABAC authorization mode.\n\n    * `enabled`: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM.\n\n  * `network_policy`: Configuration options for the NetworkPolicy feature.\n\n    * `provider`: The selected network policy provider.\n    Possible values:\n      * PROVIDER_UNSPECIFIED\n      * CALICO\n\n    * `enabled`: Whether network policy is enabled on the cluster.\n\n  * `default_max_pods_constraint`: The default constraint on the maximum number of pods that can be run simultaneously on a node in the node pool of this cluster. Only honored if cluster created with IP Alias support.\n\n    * `max_pods_per_node`: Constraint enforced on the max num of pods per node.\n\n  * `ip_allocation_policy`: Configuration for controlling how IPs are allocated in the cluster\n\n    * `use_ip_aliases`: Whether alias IPs will be used for pod IPs in the cluster\n\n    * `create_subnetwork`: Whether a new subnetwork will be created automatically for the cluster\n\n    * `subnetwork_name`: A custom subnetwork name to be used if createSubnetwork is true. If this field is empty, then an automatic name will be chosen for the new subnetwork.\n\n    * `cluster_secondary_range_name`: The name of the secondary range to be used for the cluster CIDR block. The secondary range will be used for pod IP addresses. This must be an existing secondary range associated with the cluster subnetwork\n\n    * `services_secondary_range_name`: The name of the secondary range to be used as for the services CIDR block. The secondary range will be used for service ClusterIPs. This must be an existing secondary range associated with the cluster subnetwork.\n\n    * `cluster_ipv4_cidr_block`: The IP address range for the cluster pod IPs. If this field is set, then cluster.cluster_ipv4_cidr must be left blank.  This field is only applicable when useIpAliases is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `node_ipv4_cidr_block`: The IP address range of the instance IPs in this cluster.  This is applicable only if createSubnetwork is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `services_ipv4_cidr_block`: The IP address range of the services IPs in this cluster. If blank, a range will be automatically chosen with the default size.  This field is only applicable when useIpAliases is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `tpu_ipv4_cidr_block`: The IP address range of the Cloud TPUs in this cluster. If unspecified, a range will be automatically chosen with the default size.  This field is only applicable when useIpAliases is true.  If unspecified, the range will use the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n  * `endpoint`: The IP address of this cluster's master endpoint.  The endpoint can be accessed from the internet at https://username:password@endpoint/  See the masterAuth property of this resource for username and password information.\n\n  * `initial_cluster_version`: The software version of the master endpoint and kubelets used in the cluster when it was first created. The version can be upgraded over time.\n\n  * `current_master_version`: The current software version of the master endpoint.\n\n  * `current_node_version`: The current version of the node software components. If they are currently at multiple versions because they're in the process of being upgraded, this reflects the minimum version of all nodes.\n\n  * `create_time`: The time the cluster was created, in RFC3339 text format.\n\n  * `status`: The current status of this cluster.\n  Possible values:\n    * STATUS_UNSPECIFIED\n    * PROVISIONING\n    * RUNNING\n    * RECONCILING\n    * STOPPING\n    * ERROR\n    * DEGRADED\n\n  * `status_message`: Additional information about the current status of this cluster, if available.\n\n  * `node_ipv4_cidr_size`: The size of the address space on each node for hosting containers. This is provisioned from within the container_ipv4_cidr range.\n\n  * `services_ipv4_cidr`: The IP address range of the Kubernetes services in this cluster, in CIDR notation (e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from the container CIDR.\n\n  * `current_node_count`: The number of nodes currently in the cluster.\n\n  * `expire_time`: The time the cluster will be automatically deleted in RFC3339 text format.\n\n  * `conditions`: Which conditions caused the current cluster state.\n\n    * `code`: Machine-friendly representation of the condition\n\n    * `message`: Human-friendly representation of the condition\n\n  * `master_authorized_networks_config`: Configuration for controlling how IPs are allocated in the cluster\n\n    * `enabled`: Whether or not master authorized networks is enabled.\n\n    * `cidr_blocks`: Define up to 50 external networks that could access Kubernetes master through HTTPS.\n\n      * `display_name`: Optional field used to identify cidr blocks\n\n      * `cidr_block`: Block specified in CIDR notation\n\n  * `node_pools`: Node pools belonging to this cluster\n\n    * `name`: Name of the node pool\n\n  * `binary_authorization`: Configuration for the BinaryAuthorization feature.\n\n    * `enabled`: If enabled, all container images will be validated by Binary Authorization.\n\n  * `release_channel`: ReleaseChannel indicates which release channel a cluster is subscribed to. Release channels are arranged in order of risk and frequency of updates.\n\n    * `channel`: Which release channel the cluster is subscribed to.\n    Possible values:\n      * UNSPECIFIED\n      * RAPID\n      * REGULAR\n      * STABLE\n\n  * `shielded_nodes`: Shielded Nodes configuration.\n\n    * `enabled`: Whether Shielded Nodes features are enabled on all nodes in this cluster.\n\n  * `network_config`: Network configurations\n\n    * `enable_intra_node_visibility`: Whether Intra-node visibility is enabled for this cluster. This makes same node pod to pod traffic visible for VPC network.\n\n    * `network`: The relative name of the Google Compute Engine network to which the cluster is connected. Example: projects/my-project/global/networks/my-network\n\n    * `subnetwork`: The relative name of the Google Compute Engine subnetwork to which the cluster is connected. Example: projects/my-project/regions/us-central1/subnetworks/my-subnet\n\n    * `default_snat_status`: Whether the cluster disables default in-node sNAT rules. In-node sNAT rules will be disabled when defaultSnatStatus is disabled.\n\n  * `enable_kubernetes_alpha`: Kubernetes alpha features are enabled on this cluster. This includes alpha API groups (e.g. v1alpha1) and features that may not be production ready in the kubernetes version of the master and nodes.\n\n  * `location`: The location where the cluster is deployed\n\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_clusters.md",
    "content": "+++\ntitle = \"google_container_clusters resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_clusters\"\nidentifier = \"inspec/resources/gcp/google_container_clusters resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_clusters` InSpec audit resource to to test a Google Cloud Cluster resource.\n\n## Examples\n\n```ruby\ndescribe google_container_clusters(project: 'chef-gcp-inspec', location: 'europe-west2-a') do\n  its('cluster_names') { should include 'gcp-inspec-kube-cluster' }\nend\n```\n\n### Test that there are no more than a specified number of clusters available for the project in a particular zone\n\n    describe google_container_clusters(project: 'chef-inspec-gcp', location: 'europe-west2-a') do\n      its('count') { should be <= 5}\n    end\n\n### Test that an expected cluster is available for the project\n\n    describe google_container_clusters(project: 'chef-inspec-gcp', location: 'europe-west2-a') do\n      its('cluster_names') { should include \"my-cluster\" }\n    end\n\n### Test whether any clusters are in status \"STOPPING\"\n\n    describe google_container_clusters(project: 'chef-inspec-gcp', location: 'europe-west2-a') do\n      its('cluster_statuses') { should_not include \"STOPPING\" }\n    end\n\n### Test that a subset of all clusters matching \"kube*\" are \"RUNNING\"\n\n    google_container_clusters(project: gcp_project_id).where(cluster_name: /^kube/).cluster_names.each do |cluster_name|\n      describe google_container_cluster(project: 'chef-inspec-gcp', location: 'europe-west2-a', name: cluster_name) do\n        it { should exist }\n        its('status') { should eq 'RUNNING' }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_container_clusters` resource:\n\nSee [google_container_cluster](google_container_cluster) for more detailed information.\n\n  * `cluster_names`: an array of `google_container_cluster` name\n  * `descriptions`: an array of `google_container_cluster` description\n  * `initial_node_counts`: an array of `google_container_cluster` initial_node_count\n  * `node_configs`: an array of `google_container_cluster` node_config\n  * `master_auths`: an array of `google_container_cluster` master_auth\n  * `logging_services`: an array of `google_container_cluster` logging_service\n  * `monitoring_services`: an array of `google_container_cluster` monitoring_service\n  * `cluster_networks`: an array of `google_container_cluster` network\n  * `database_encryptions`: an array of `google_container_cluster` database_encryption\n  * `private_cluster_configs`: an array of `google_container_cluster` private_cluster_config\n  * `cluster_ipv4_cidrs`: an array of `google_container_cluster` cluster_ipv4_cidr\n  * `enable_tpus`: an array of `google_container_cluster` enable_tpu\n  * `tpu_ipv4_cidr_blocks`: an array of `google_container_cluster` tpu_ipv4_cidr_block\n  * `addons_configs`: an array of `google_container_cluster` addons_config\n  * `subnetworks`: an array of `google_container_cluster` subnetwork\n  * `locations`: an array of `google_container_cluster` locations\n  * `resource_labels`: an array of `google_container_cluster` resource_labels\n  * `label_fingerprints`: an array of `google_container_cluster` label_fingerprint\n  * `legacy_abacs`: an array of `google_container_cluster` legacy_abac\n  * `network_policies`: an array of `google_container_cluster` network_policy\n  * `default_max_pods_constraints`: an array of `google_container_cluster` default_max_pods_constraint\n  * `ip_allocation_policies`: an array of `google_container_cluster` ip_allocation_policy\n  * `endpoints`: an array of `google_container_cluster` endpoint\n  * `initial_cluster_versions`: an array of `google_container_cluster` initial_cluster_version\n  * `current_master_versions`: an array of `google_container_cluster` current_master_version\n  * `current_node_versions`: an array of `google_container_cluster` current_node_version\n  * `create_times`: an array of `google_container_cluster` create_time\n  * `cluster_statuses`: an array of `google_container_cluster` status\n  * `status_messages`: an array of `google_container_cluster` status_message\n  * `node_ipv4_cidr_sizes`: an array of `google_container_cluster` node_ipv4_cidr_size\n  * `services_ipv4_cidrs`: an array of `google_container_cluster` services_ipv4_cidr\n  * `current_node_counts`: an array of `google_container_cluster` current_node_count\n  * `expire_times`: an array of `google_container_cluster` expire_time\n  * `conditions`: an array of `google_container_cluster` conditions\n  * `master_authorized_networks_configs`: an array of `google_container_cluster` master_authorized_networks_config\n  * `node_pools`: an array of `google_container_cluster` node_pools\n  * `binary_authorizations`: an array of `google_container_cluster` binary_authorization\n  * `release_channels`: an array of `google_container_cluster` release_channel\n  * `shielded_nodes`: an array of `google_container_cluster` shielded_nodes\n  * `network_configs`: an array of `google_container_cluster` network_config\n  * `enable_kubernetes_alphas`: an array of `google_container_cluster` enable_kubernetes_alpha\n  * `locations`: an array of `google_container_cluster` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_node_pool.md",
    "content": "+++\ntitle = \"google_container_node_pool resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_node_pool\"\nidentifier = \"inspec/resources/gcp/google_container_node_pool resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_container_node_pool` is used to test a Google NodePool resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_container_node_pool(project: 'chef-gcp-inspec', location: 'europe-west2-a', cluster_name: 'gcp-inspec-kube-cluster', nodepool_name: 'inspec-gcp-regional-node-pool') do\n  it { should exist }\n  its('initial_node_count') { should eq '1'}\nend\n\ndescribe google_container_node_pool(project: 'chef-gcp-inspec', location: 'europe-west2-a', cluster_name: 'gcp-inspec-kube-cluster', nodepool_name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP container node pool is in a particular state e.g. \"RUNNING\"\n\n    describe google_container_node_pool(project: 'chef-inspec-gcp', locations: 'europe-west2-a', cluster_name: 'inspec-gcp-kube-cluster', nodepool_name: 'inspec-gcp-kube-node-pool') do\n      its('status') { should eq 'RUNNING' }\n    end\n\n### Test GCP container node pool disk size in GB is as expected\n\n    describe google_container_node_pool(project: 'chef-inspec-gcp', locations: 'europe-west2-a', cluster_name: 'inspec-gcp-kube-cluster', nodepool_name: 'inspec-gcp-kube-node-pool') do\n      its('config.disk_size_gb'){should eq 100}\n    end\n\n### Test GCP container node pool machine type is as expected\n\n    describe google_container_node_pool(project: 'chef-inspec-gcp', locations: 'europe-west2-a', cluster_name: 'inspec-gcp-kube-cluster', nodepool_name: 'inspec-gcp-kube-node-pool') do\n      its('config.machine_type'){should eq \"n1-standard-1\"}\n    end\n\n### Test GCP container node pool node image type is as expected\n\n    describe google_container_node_pool(project: 'chef-inspec-gcp', locations: 'europe-west2-a', cluster_name: 'inspec-gcp-kube-cluster', nodepool_name: 'inspec-gcp-kube-node-pool') do\n      its('config.image_type'){should eq \"COS\"}\n    end\n\n### Test GCP container node pool initial node count is as expected\n\n    describe google_container_node_pool(project: 'chef-inspec-gcp', locations: 'europe-west2-a', cluster_name: 'inspec-gcp-kube-cluster', nodepool_name: 'inspec-gcp-kube-node-pool') do\n      its('initial_node_count'){should eq 3}\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_container_node_pool` resource:\n\n\n  * `name`: The name of the node pool.\n\n  * `config`: The node configuration of the pool.\n\n    * `machine_type`: The name of a Google Compute Engine machine type (e.g. n1-standard-1).  If unspecified, the default machine type is n1-standard-1.\n\n    * `disk_size_gb`: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.\n\n    * `oauth_scopes`: The set of Google API scopes to be made available on all of the node VMs under the \"default\" service account.  The following scopes are recommended, but not required, and by default are not included:  https://www.googleapis.com/auth/compute is required for mounting persistent storage on your nodes. https://www.googleapis.com/auth/devstorage.read_only is required for communicating with gcr.io (the Google Container Registry).  If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.\n\n    * `service_account`: The Google Cloud Platform Service Account to be used by the node VMs.  If no Service Account is specified, the \"default\" service account is used.\n\n    * `metadata`: The metadata key/value pairs assigned to instances in the cluster.  Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: \"instance-template\", \"kube-env\", \"startup-script\", and \"user-data\"  Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB.  The total size of all keys and values must be less than 512 KB.  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `image_type`: The image type to use for this node.  Note that for a given image type, the latest version of it will be used.\n\n    * `labels`: The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see:   http://kubernetes.io/v1.1/docs/user-guide/labels.html  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `local_ssd_count`: The number of local SSD disks to be attached to the node.  The limit for this value is dependant upon the maximum number of disks available on a machine per zone. See:  https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits  for more information.\n\n    * `tags`: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during cluster or node pool creation. Each tag within the list must comply with RFC1035.\n\n    * `preemptible`: Whether the nodes are created as preemptible VM instances. See: https://cloud.google.com/compute/docs/instances/preemptible for more information about preemptible VM instances.\n\n    * `accelerators`: A list of hardware accelerators to be attached to each node\n\n      * `accelerator_count`: The number of the accelerator cards exposed to an instance.\n\n      * `accelerator_type`: The accelerator type resource name\n\n    * `disk_type`: Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')  If unspecified, the default disk type is 'pd-standard'\n\n    * `min_cpu_platform`: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform\n\n    * `taints`: List of kubernetes taints to be applied to each node.\n\n      * `key`: Key for taint\n\n      * `value`: Value for taint\n\n      * `effect`: Effect for taint\n\n    * `shielded_instance_config`: Shielded Instance options.\n\n      * `enable_secure_boot`: Defines whether the instance has Secure Boot enabled.  Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails.\n\n      * `enable_integrity_monitoring`: Defines whether the instance has integrity monitoring enabled.  Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created.\n\n    * `workload_meta_config`: WorkloadMetadataConfig defines the metadata configuration to expose to workloads on the node pool.\n\n      * `mode`: Mode is the configuration for how to expose metadata to workloads running on the node pool.\n      Possible values:\n        * GCE_METADATA\n        * GKE_METADATA\n\n  * `initial_node_count`: The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.\n\n  * `status`: Status of nodes in this pool instance\n\n  * `status_message`: Additional information about the current status of this node pool instance\n\n  * `version`: The version of the Kubernetes of this node.\n\n  * `autoscaling`: Autoscaler configuration for this NodePool. Autoscaler is enabled only if a valid configuration is present.\n\n    * `enabled`: Is autoscaling enabled for this node pool.\n\n    * `min_node_count`: Minimum number of nodes in the NodePool. Must be >= 1 and <= maxNodeCount.\n\n    * `max_node_count`: Maximum number of nodes in the NodePool. Must be >= minNodeCount. There has to enough quota to scale up the cluster.\n\n  * `management`: Management configuration for this NodePool.\n\n    * `auto_upgrade`: A flag that specifies whether node auto-upgrade is enabled for the node pool. If enabled, node auto-upgrade helps keep the nodes in your node pool up to date with the latest release version of Kubernetes.\n\n    * `auto_repair`: A flag that specifies whether the node auto-repair is enabled for the node pool. If enabled, the nodes in this node pool will be monitored and, if they fail health checks too many times, an automatic repair action will be triggered.\n\n    * `upgrade_options`: Specifies the Auto Upgrade knobs for the node pool.\n\n      * `auto_upgrade_start_time`: This field is set when upgrades are about to commence with the approximate start time for the upgrades, in RFC3339 text format.\n\n      * `description`: This field is set when upgrades are about to commence with the description of the upgrade.\n\n  * `max_pods_constraint`: The constraint on the maximum number of pods that can be run simultaneously on a node in the node pool.\n\n    * `max_pods_per_node`: Constraint enforced on the max num of pods per node.\n\n  * `conditions`: Which conditions caused the current node pool state.\n\n    * `code`: Machine-friendly representation of the condition\n    Possible values:\n      * UNKNOWN\n      * GCE_STOCKOUT\n      * GKE_SERVICE_ACCOUNT_DELETED\n      * GCE_QUOTA_EXCEEDED\n      * SET_BY_OPERATOR\n\n  * `pod_ipv4_cidr_size`: The pod CIDR block size per node in this node pool.\n\n  * `cluster`: The cluster this node pool belongs to.\n\n  * `location`: The location where the node pool is deployed\n\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_node_pools.md",
    "content": "+++\ntitle = \"google_container_node_pools resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_node_pools\"\nidentifier = \"inspec/resources/gcp/google_container_node_pools resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_container_node_pools` is used to test a Google NodePool resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_container_node_pools(project: 'chef-gcp-inspec', location: 'europe-west2-a', cluster_name: 'gcp-inspec-kube-cluster') do\n  its('initial_node_counts') { should include '1'}\nend\n```\n\n### Test that there are no more than a specified number of node pools available for the project\n\n    describe google_container_node_pools(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 10}\n    end\n\n### Test that an expected node pool is available for the project\n\n    describe google_container_node_pools(project: 'chef-inspec-gcp') do\n      its('node_pool_names') { should include \"us-east1-b\" }\n    end\n\n### Test that a subset of all node pools matching \"mypool*\" are \"UP\"\n\n    google_container_node_pools(project: 'chef-inspec-gcp', location: 'europe-west2-a', cluster_name: 'inspec-gcp-cluster').where(node_pool_name: /^mypool/).node_pool_names.each do |node_pool_name|\n      describe google_container_node_pool(project: 'chef-inspec-gcp', location: 'europe-west2-a', cluster_name: 'inspec-gcp-cluster', nodepool_name: node_pool_name) do\n        it { should exist }\n        its('status') { should eq 'RUNNING' }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_container_node_pools` resource:\n\nSee [google_container_node_pool](google_container_node_pool) for more detailed information.\n\n  * `node_pool_names`: an array of `google_container_node_pool` name\n  * `configs`: an array of `google_container_node_pool` config\n  * `initial_node_counts`: an array of `google_container_node_pool` initial_node_count\n  * `node_pool_statuses`: an array of `google_container_node_pool` status\n  * `status_messages`: an array of `google_container_node_pool` status_message\n  * `versions`: an array of `google_container_node_pool` version\n  * `autoscalings`: an array of `google_container_node_pool` autoscaling\n  * `managements`: an array of `google_container_node_pool` management\n  * `max_pods_constraints`: an array of `google_container_node_pool` max_pods_constraint\n  * `conditions`: an array of `google_container_node_pool` conditions\n  * `pod_ipv4_cidr_sizes`: an array of `google_container_node_pool` pod_ipv4_cidr_size\n  * `clusters`: an array of `google_container_node_pool` cluster\n  * `locations`: an array of `google_container_node_pool` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_regional_cluster.md",
    "content": "+++\ntitle = \"google_container_regional_cluster resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_regional_cluster\"\nidentifier = \"inspec/resources/gcp/google_container_regional_cluster resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_regional_cluster` InSpec audit resource to to test a Google Cloud RegionalCluster resource.\n\n## Examples\n\n```ruby\ndescribe google_container_regional_cluster(project: 'chef-gcp-inspec', location: 'europe-west2', name: 'inspec-gcp-regional-cluster') do\n  it { should exist }\n  its('initial_node_count') { should eq '1'}\n  its('location') { should eq 'europe-west2'}\nend\n\ndescribe google_container_regional_cluster(project: 'chef-gcp-inspec', location: 'europe-west2', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_container_regional_cluster` resource:\n\n\n  * `name`: The name of this cluster. The name must be unique within this project and location, and can be up to 40 characters. Must be Lowercase letters, numbers, and hyphens only. Must start with a letter. Must end with a number or a letter.\n\n  * `description`: An optional description of this cluster.\n\n  * `initial_node_count`: The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota. For requests, this field should only be used in lieu of a \"nodePool\" object, since this configuration (along with the \"nodeConfig\") will be used to create a \"NodePool\" object with an auto-generated name. Do not use this and a nodePool at the same time.  This field has been deprecated. Please use nodePool.initial_node_count instead.\n\n  * `node_config`: Parameters used in creating the cluster's nodes.  For requests, this field should only be used in lieu of a \"nodePool\" object, since this configuration (along with the \"initialNodeCount\") will be used to create a \"NodePool\" object with an auto-generated name. Do not use this and a nodePool at the same time. For responses, this field will be populated with the node configuration of the first node pool. If unspecified, the defaults are used.\n\n    * `machine_type`: The name of a Google Compute Engine machine type (e.g. n1-standard-1).  If unspecified, the default machine type is n1-standard-1.\n\n    * `disk_size_gb`: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.\n\n    * `oauth_scopes`: The set of Google API scopes to be made available on all of the node VMs under the \"default\" service account.  The following scopes are recommended, but not required, and by default are not included:  https://www.googleapis.com/auth/compute is required for mounting persistent storage on your nodes. https://www.googleapis.com/auth/devstorage.read_only is required for communicating with gcr.io (the Google Container Registry).  If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.\n\n    * `service_account`: The Google Cloud Platform Service Account to be used by the node VMs.  If no Service Account is specified, the \"default\" service account is used.\n\n    * `metadata`: The metadata key/value pairs assigned to instances in the cluster.  Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: \"instance-template\", \"kube-env\", \"startup-script\", and \"user-data\"  Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB.  The total size of all keys and values must be less than 512 KB.  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `image_type`: The image type to use for this node.  Note that for a given image type, the latest version of it will be used.\n\n    * `labels`: The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see:   http://kubernetes.io/v1.1/docs/user-guide/labels.html  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `local_ssd_count`: The number of local SSD disks to be attached to the node.  The limit for this value is dependant upon the maximum number of disks available on a machine per zone. See:  https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits  for more information.\n\n    * `tags`: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during cluster or node pool creation. Each tag within the list must comply with RFC1035.\n\n    * `preemptible`: Whether the nodes are created as preemptible VM instances. See: https://cloud.google.com/compute/docs/instances/preemptible for more information about preemptible VM instances.\n\n    * `accelerators`: A list of hardware accelerators to be attached to each node. See https://cloud.google.com/compute/docs/gpus for more information about support for GPUs.\n\n      * `accelerator_count`: The number of accelerator cards exposed to an instance.\n\n      * `accelerator_type`: The accelerator type resource name\n\n    * `disk_type`: Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')  If unspecified, the default disk type is 'pd-standard'\n\n    * `min_cpu_platform`: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform.\n\n    * `taints`: List of kubernetes taints to be applied to each node. For more information, including usage and the valid values, see: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/\n\n      * `key`: Key for taint\n\n      * `value`: Value for taint\n\n      * `effect`: Effect for taint\n\n  * `master_auth`: The authentication information for accessing the master endpoint.\n\n    * `username`: The username to use for HTTP basic authentication to the master endpoint.\n\n    * `password`: The password to use for HTTP basic authentication to the master endpoint. Because the master endpoint is open to the Internet, you should create a strong password with a minimum of 16 characters.\n\n    * `client_certificate_config`: Configuration for client certificate authentication on the cluster. For clusters before v1.12, if no configuration is specified, a client certificate is issued.\n\n      * `issue_client_certificate`: Issue a client certificate.\n\n    * `cluster_ca_certificate`: Base64-encoded public certificate that is the root of trust for the cluster.\n\n    * `client_certificate`: Base64-encoded public certificate used by clients to authenticate to the cluster endpoint.\n\n    * `client_key`: Base64-encoded private key used by clients to authenticate to the cluster endpoint.\n\n  * `logging_service`: The logging service the cluster should use to write logs. Currently available options:  logging.googleapis.com - the Google Cloud Logging service. none - no logs will be exported from the cluster.  if left as an empty string,logging.googleapis.com will be used.\n\n  * `monitoring_service`: The monitoring service the cluster should use to write metrics. Currently available options:  monitoring.googleapis.com - the Google Cloud Monitoring service. none - no metrics will be exported from the cluster.  if left as an empty string, monitoring.googleapis.com will be used.\n\n  * `network`: The name of the Google Compute Engine network to which the cluster is connected. If left unspecified, the default network will be used.\n\n  * `private_cluster_config`: Configuration for a private cluster.\n\n    * `enable_private_nodes`: Whether nodes have internal IP addresses only. If enabled, all nodes are given only RFC 1918 private addresses and communicate with the master via private networking.\n\n    * `enable_private_endpoint`: Whether the master's internal IP address is used as the cluster endpoint.\n\n    * `master_ipv4_cidr_block`: The IP range in CIDR notation to use for the hosted master network. This range will be used for assigning internal IP addresses to the master or set of masters, as well as the ILB VIP. This range must not overlap with any other ranges in use within the cluster's network.\n\n    * `private_endpoint`: The internal IP address of this cluster's master endpoint.\n\n    * `public_endpoint`: The external IP address of this cluster's master endpoint.\n\n  * `cluster_ipv4_cidr`: The IP address range of the container pods in this cluster, in CIDR notation (e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify a /14 block in 10.0.0.0/8.\n\n  * `enable_tpu`: (Optional) Whether to enable Cloud TPU resources in this cluster. See the official documentation - https://cloud.google.com/tpu/docs/kubernetes-engine-setup\n\n  * `tpu_ipv4_cidr_block`: The IP address range of the Cloud TPUs in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`).\n\n  * `addons_config`: Configurations for the various addons available to run in the cluster.\n\n    * `http_load_balancing`: Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.\n\n      * `disabled`: Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.\n\n    * `horizontal_pod_autoscaling`: Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.\n\n      * `disabled`: Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.\n\n    * `kubernetes_dashboard`: Configuration for the Kubernetes Dashboard. This addon is deprecated, and will be disabled in 1.15. It is recommended to use the Cloud Console to manage and monitor your Kubernetes clusters, workloads and applications.\n\n      * `disabled`: Whether the Kubernetes Dashboard is enabled for this cluster.\n\n    * `network_policy_config`: Configuration for NetworkPolicy. This only tracks whether the addon is enabled or not on the Master, it does not track whether network policy is enabled for the nodes.\n\n      * `disabled`: Whether NetworkPolicy is enabled for this cluster.\n\n  * `subnetwork`: The name of the Google Compute Engine subnetwork to which the cluster is connected.\n\n  * `locations`: The list of Google Compute Engine zones in which the cluster's nodes should be located.\n\n  * `resource_labels`: The resource labels for the cluster to use to annotate any related Google Compute Engine resources.\n\n  * `label_fingerprint`: The fingerprint of the set of labels for this cluster.\n\n  * `legacy_abac`: Configuration for the legacy ABAC authorization mode.\n\n    * `enabled`: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM.\n\n  * `network_policy`: Configuration options for the NetworkPolicy feature.\n\n    * `provider`: The selected network policy provider.\n\n    * `enabled`: Whether network policy is enabled on the cluster.\n\n  * `default_max_pods_constraint`: The default constraint on the maximum number of pods that can be run simultaneously on a node in the node pool of this cluster. Only honored if cluster created with IP Alias support.\n\n    * `max_pods_per_node`: Constraint enforced on the max num of pods per node.\n\n  * `ip_allocation_policy`: Configuration for controlling how IPs are allocated in the cluster\n\n    * `use_ip_aliases`: Whether alias IPs will be used for pod IPs in the cluster\n\n    * `create_subnetwork`: Whether a new subnetwork will be created automatically for the cluster\n\n    * `subnetwork_name`: A custom subnetwork name to be used if createSubnetwork is true. If this field is empty, then an automatic name will be chosen for the new subnetwork.\n\n    * `cluster_secondary_range_name`: The name of the secondary range to be used for the cluster CIDR block. The secondary range will be used for pod IP addresses. This must be an existing secondary range associated with the cluster subnetwork\n\n    * `services_secondary_range_name`: The name of the secondary range to be used as for the services CIDR block. The secondary range will be used for service ClusterIPs. This must be an existing secondary range associated with the cluster subnetwork.\n\n    * `cluster_ipv4_cidr_block`: The IP address range for the cluster pod IPs. If this field is set, then cluster.cluster_ipv4_cidr must be left blank.  This field is only applicable when useIpAliases is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `node_ipv4_cidr_block`: The IP address range of the instance IPs in this cluster.  This is applicable only if createSubnetwork is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `services_ipv4_cidr_block`: The IP address range of the services IPs in this cluster. If blank, a range will be automatically chosen with the default size.  This field is only applicable when useIpAliases is true.  Set to blank to have a range chosen with the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n    * `tpu_ipv4_cidr_block`: The IP address range of the Cloud TPUs in this cluster. If unspecified, a range will be automatically chosen with the default size.  This field is only applicable when useIpAliases is true.  If unspecified, the range will use the default size.  Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.\n\n  * `endpoint`: The IP address of this cluster's master endpoint.  The endpoint can be accessed from the internet at https://username:password@endpoint/  See the masterAuth property of this resource for username and password information.\n\n  * `initial_cluster_version`: The software version of the master endpoint and kubelets used in the cluster when it was first created. The version can be upgraded over time.\n\n  * `current_master_version`: The current software version of the master endpoint.\n\n  * `current_node_version`: The current version of the node software components. If they are currently at multiple versions because they're in the process of being upgraded, this reflects the minimum version of all nodes.\n\n  * `create_time`: The time the cluster was created, in RFC3339 text format.\n\n  * `status`: The current status of this cluster.\n\n  * `status_message`: Additional information about the current status of this cluster, if available.\n\n  * `node_ipv4_cidr_size`: The size of the address space on each node for hosting containers. This is provisioned from within the container_ipv4_cidr range.\n\n  * `services_ipv4_cidr`: The IP address range of the Kubernetes services in this cluster, in CIDR notation (e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from the container CIDR.\n\n  * `current_node_count`: The number of nodes currently in the cluster.\n\n  * `expire_time`: The time the cluster will be automatically deleted in RFC3339 text format.\n\n  * `conditions`: Which conditions caused the current cluster state.\n\n    * `code`: Machine-friendly representation of the condition\n\n    * `message`: Human-friendly representation of the condition\n\n  * `master_authorized_networks_config`: Configuration for controlling how IPs are allocated in the cluster\n\n    * `enabled`: Whether or not master authorized networks is enabled.\n\n    * `cidr_blocks`: Define up to 50 external networks that could access Kubernetes master through HTTPS.\n\n      * `display_name`: Optional field used to identify cidr blocks\n\n      * `cidr_block`: Block specified in CIDR notation\n\n  * `location`: The location where the cluster is deployed\n\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_regional_clusters.md",
    "content": "+++\ntitle = \"google_container_regional_clusters resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_regional_clusters\"\nidentifier = \"inspec/resources/gcp/google_container_regional_clusters resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_regional_clusters` InSpec audit resource to to test a Google Cloud RegionalCluster resource.\n\n## Examples\n\n```ruby\ndescribe google_container_regional_clusters(project: 'chef-gcp-inspec', location: 'europe-west2') do\n  its('count') { should be >= 1 }\n  its('names') { should include 'inspec-gcp-regional-cluster' }\n  its('initial_node_counts') { should include '1'}\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_container_regional_clusters` resource:\n\nSee [google_container_regional_cluster](google_container_regional_cluster) for more detailed information.\n\n  * `names`: an array of `google_container_regional_cluster` name\n  * `descriptions`: an array of `google_container_regional_cluster` description\n  * `initial_node_counts`: an array of `google_container_regional_cluster` initial_node_count\n  * `node_configs`: an array of `google_container_regional_cluster` node_config\n  * `master_auths`: an array of `google_container_regional_cluster` master_auth\n  * `logging_services`: an array of `google_container_regional_cluster` logging_service\n  * `monitoring_services`: an array of `google_container_regional_cluster` monitoring_service\n  * `networks`: an array of `google_container_regional_cluster` network\n  * `private_cluster_configs`: an array of `google_container_regional_cluster` private_cluster_config\n  * `cluster_ipv4_cidrs`: an array of `google_container_regional_cluster` cluster_ipv4_cidr\n  * `enable_tpus`: an array of `google_container_regional_cluster` enable_tpu\n  * `tpu_ipv4_cidr_blocks`: an array of `google_container_regional_cluster` tpu_ipv4_cidr_block\n  * `addons_configs`: an array of `google_container_regional_cluster` addons_config\n  * `subnetworks`: an array of `google_container_regional_cluster` subnetwork\n  * `locations`: an array of `google_container_regional_cluster` locations\n  * `resource_labels`: an array of `google_container_regional_cluster` resource_labels\n  * `label_fingerprints`: an array of `google_container_regional_cluster` label_fingerprint\n  * `legacy_abacs`: an array of `google_container_regional_cluster` legacy_abac\n  * `network_policies`: an array of `google_container_regional_cluster` network_policy\n  * `default_max_pods_constraints`: an array of `google_container_regional_cluster` default_max_pods_constraint\n  * `ip_allocation_policies`: an array of `google_container_regional_cluster` ip_allocation_policy\n  * `endpoints`: an array of `google_container_regional_cluster` endpoint\n  * `initial_cluster_versions`: an array of `google_container_regional_cluster` initial_cluster_version\n  * `current_master_versions`: an array of `google_container_regional_cluster` current_master_version\n  * `current_node_versions`: an array of `google_container_regional_cluster` current_node_version\n  * `create_times`: an array of `google_container_regional_cluster` create_time\n  * `statuses`: an array of `google_container_regional_cluster` status\n  * `status_messages`: an array of `google_container_regional_cluster` status_message\n  * `node_ipv4_cidr_sizes`: an array of `google_container_regional_cluster` node_ipv4_cidr_size\n  * `services_ipv4_cidrs`: an array of `google_container_regional_cluster` services_ipv4_cidr\n  * `current_node_counts`: an array of `google_container_regional_cluster` current_node_count\n  * `expire_times`: an array of `google_container_regional_cluster` expire_time\n  * `conditions`: an array of `google_container_regional_cluster` conditions\n  * `master_authorized_networks_configs`: an array of `google_container_regional_cluster` master_authorized_networks_config\n  * `locations`: an array of `google_container_regional_cluster` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_regional_node_pool.md",
    "content": "+++\ntitle = \"google_container_regional_node_pool resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_regional_node_pool\"\nidentifier = \"inspec/resources/gcp/google_container_regional_node_pool resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_regional_node_pool` InSpec audit resource to to test a Google Cloud RegionalNodePool resource.\n\n## Examples\n\n```ruby\ndescribe google_container_regional_node_pool(project: 'chef-gcp-inspec', location: 'europe-west2', cluster: 'inspec-gcp-regional-cluster', name: 'inspec-gcp-regional-node-pool') do\n  it { should exist }\n  its('initial_node_count') { should eq '1'}\nend\n\ndescribe google_container_regional_node_pool(project: 'chef-gcp-inspec', location: 'europe-west2', cluster: 'inspec-gcp-regional-cluster', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_container_regional_node_pool` resource:\n\n\n  * `name`: The name of the node pool.\n\n  * `config`: The node configuration of the pool.\n\n    * `machine_type`: The name of a Google Compute Engine machine type (e.g. n1-standard-1).  If unspecified, the default machine type is n1-standard-1.\n\n    * `disk_size_gb`: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.\n\n    * `oauth_scopes`: The set of Google API scopes to be made available on all of the node VMs under the \"default\" service account.  The following scopes are recommended, but not required, and by default are not included:  https://www.googleapis.com/auth/compute is required for mounting persistent storage on your nodes. https://www.googleapis.com/auth/devstorage.read_only is required for communicating with gcr.io (the Google Container Registry).  If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.\n\n    * `service_account`: The Google Cloud Platform Service Account to be used by the node VMs.  If no Service Account is specified, the \"default\" service account is used.\n\n    * `metadata`: The metadata key/value pairs assigned to instances in the cluster.  Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: \"instance-template\", \"kube-env\", \"startup-script\", and \"user-data\"  Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB.  The total size of all keys and values must be less than 512 KB.  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `image_type`: The image type to use for this node.  Note that for a given image type, the latest version of it will be used.\n\n    * `labels`: The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see:   http://kubernetes.io/v1.1/docs/user-guide/labels.html  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n    * `local_ssd_count`: The number of local SSD disks to be attached to the node.  The limit for this value is dependant upon the maximum number of disks available on a machine per zone. See:  https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits  for more information.\n\n    * `tags`: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during cluster or node pool creation. Each tag within the list must comply with RFC1035.\n\n    * `preemptible`: Whether the nodes are created as preemptible VM instances. See: https://cloud.google.com/compute/docs/instances/preemptible for more information about preemptible VM instances.\n\n    * `accelerators`: A list of hardware accelerators to be attached to each node\n\n      * `accelerator_count`: The number of the accelerator cards exposed to an instance.\n\n      * `accelerator_type`: The accelerator type resource name\n\n    * `disk_type`: Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')  If unspecified, the default disk type is 'pd-standard'\n\n    * `min_cpu_platform`: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform\n\n    * `taints`: List of kubernetes taints to be applied to each node.\n\n      * `key`: Key for taint\n\n      * `value`: Value for taint\n\n      * `effect`: Effect for taint\n\n  * `initial_node_count`: The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.\n\n  * `status`: Status of nodes in this pool instance\n\n  * `status_message`: Additional information about the current status of this node pool instance\n\n  * `version`: The version of the Kubernetes of this node.\n\n  * `autoscaling`: Autoscaler configuration for this NodePool. Autoscaler is enabled only if a valid configuration is present.\n\n    * `enabled`: Is autoscaling enabled for this node pool.\n\n    * `min_node_count`: Minimum number of nodes in the NodePool. Must be >= 1 and <= maxNodeCount.\n\n    * `max_node_count`: Maximum number of nodes in the NodePool. Must be >= minNodeCount. There has to enough quota to scale up the cluster.\n\n  * `management`: Management configuration for this NodePool.\n\n    * `auto_upgrade`: A flag that specifies whether node auto-upgrade is enabled for the node pool. If enabled, node auto-upgrade helps keep the nodes in your node pool up to date with the latest release version of Kubernetes.\n\n    * `auto_repair`: A flag that specifies whether the node auto-repair is enabled for the node pool. If enabled, the nodes in this node pool will be monitored and, if they fail health checks too many times, an automatic repair action will be triggered.\n\n    * `upgrade_options`: Specifies the Auto Upgrade knobs for the node pool.\n\n      * `auto_upgrade_start_time`: This field is set when upgrades are about to commence with the approximate start time for the upgrades, in RFC3339 text format.\n\n      * `description`: This field is set when upgrades are about to commence with the description of the upgrade.\n\n  * `max_pods_constraint`: The constraint on the maximum number of pods that can be run simultaneously on a node in the node pool.\n\n    * `max_pods_per_node`: Constraint enforced on the max num of pods per node.\n\n  * `conditions`: Which conditions caused the current node pool state.\n\n    * `code`: Machine-friendly representation of the condition\n\n  * `pod_ipv4_cidr_size`: The pod CIDR block size per node in this node pool.\n\n  * `cluster`: The cluster this node pool belongs to.\n\n  * `location`: The location where the node pool is deployed\n\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_regional_node_pools.md",
    "content": "+++\ntitle = \"google_container_regional_node_pools resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_regional_node_pools\"\nidentifier = \"inspec/resources/gcp/google_container_regional_node_pools resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_regional_node_pools` InSpec audit resource to to test a Google Cloud RegionalNodePool resource.\n\n## Examples\n\n```ruby\ndescribe google_container_regional_node_pools(project: 'chef-gcp-inspec', location: 'europe-west2', cluster: 'inspec-gcp-regional-cluster') do\n  its('initial_node_counts') { should include '1'}\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_container_regional_node_pools` resource:\n\nSee [google_container_regional_node_pool](google_container_regional_node_pool) for more detailed information.\n\n  * `names`: an array of `google_container_regional_node_pool` name\n  * `configs`: an array of `google_container_regional_node_pool` config\n  * `initial_node_counts`: an array of `google_container_regional_node_pool` initial_node_count\n  * `statuses`: an array of `google_container_regional_node_pool` status\n  * `status_messages`: an array of `google_container_regional_node_pool` status_message\n  * `versions`: an array of `google_container_regional_node_pool` version\n  * `autoscalings`: an array of `google_container_regional_node_pool` autoscaling\n  * `managements`: an array of `google_container_regional_node_pool` management\n  * `max_pods_constraints`: an array of `google_container_regional_node_pool` max_pods_constraint\n  * `conditions`: an array of `google_container_regional_node_pool` conditions\n  * `pod_ipv4_cidr_sizes`: an array of `google_container_regional_node_pool` pod_ipv4_cidr_size\n  * `clusters`: an array of `google_container_regional_node_pool` cluster\n  * `locations`: an array of `google_container_regional_node_pool` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_container_server_config.md",
    "content": "+++\ntitle = \"google_container_server_config resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_container_server_config\"\nidentifier = \"inspec/resources/gcp/google_container_server_config resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_container_server_config` InSpec audit resource to to test a Google Cloud ServerConfig resource.\n\n## Examples\n\n```ruby\ndescribe google_container_server_config(project: 'chef-gcp-inspec', location: 'europe-west2-a') do\n  its('valid_master_versions') { should include '1.21.5-gke.1802'}\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_container_server_config` resource:\n\n\n  * `default_cluster_version`: Version of Kubernetes the service deploys by default.\n\n  * `default_image_type`: Default image type.\n\n  * `valid_image_types`: List of valid image types.\n\n  * `valid_node_versions`: List of valid node upgrade target versions, in descending order.\n\n  * `valid_master_versions`: List of valid master versions, in descending order.\n\n  * `channels`: List of release channel configurations.\n\n    * `channel`: The release channel this configuration applies to.\n    Possible values:\n      * UNSPECIFIED\n      * RAPID\n      * REGULAR\n      * STABLE\n\n    * `default_version`: The default version for newly created clusters on the channel.\n\n    * `valid_versions`: List of valid versions for the channel.\n\n  * `location`: The name of the Google Compute Engine location to return ServerConfig for.\n\n\n## GCP permissions\n\nEnsure the [Kubernetes Engine API](https://console.cloud.google.com/apis/library/container.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_data_fusion_instance.md",
    "content": "+++\ntitle = \"google_data_fusion_instance resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_data_fusion_instance\"\nidentifier = \"inspec/resources/gcp/google_data_fusion_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_data_fusion_instance` InSpec audit resource to test the properties of a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\ndescribe google_data_fusion_instance(name: 'projects/*/locations/*/instances/inspec-instance') do\n\tit { should exist }\n\tits('name') { should cmp 'inspec-instance' }\n\tits('description') { should cmp 'value_description' }\n\tits('type') { should cmp 'value_type' }\n\tits('create_time') { should cmp 'value_create_time' }\n\tits('update_time') { should cmp 'value_update_time' }\n\tits('state') { should cmp 'value_state' }\n\tits('state_message') { should cmp 'value_state_message' }\n\tits('service_endpoint') { should cmp 'value_service_endpoint' }\n\tits('zone') { should cmp 'value_zone' }\n\tits('version') { should cmp 'value_version' }\n\tits('service_account') { should cmp 'value_service_account' }\n\tits('display_name') { should cmp 'value_display_name' }\n\tits('api_endpoint') { should cmp 'value_api_endpoint' }\n\tits('gcs_bucket') { should cmp 'value_gcs_bucket' }\n\tits('p4service_account') { should cmp 'value_p4service_account' }\n\tits('tenant_project_id') { should cmp 'value_tenant_project_id' }\n\tits('dataproc_service_account') { should cmp 'value_dataproc_service_account' }\n\tits('workforce_identity_service_endpoint') { should cmp 'value_workforce_identity_service_endpoint' }\n\tits('patch_revision') { should cmp 'value_patch_revision' }\nend\n\ndescribe google_data_fusion_instance(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_data_fusion_instance` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_data_fusion_instance` resource:\n\n\n  * `name`: Output only. The name of this instance is in the form of projects/{project}/locations/{location}/instances/{instance}.\n\n  * `description`: A description of this instance.\n\n  * `type`: Required. Instance type.\n  Possible values:\n    * TYPE_UNSPECIFIED\n    * BASIC\n    * ENTERPRISE\n    * DEVELOPER\n\n  * `enable_stackdriver_logging`: Option to enable Stackdriver Logging.\n\n  * `enable_stackdriver_monitoring`: Option to enable Stackdriver Monitoring.\n\n  * `private_instance`: Specifies whether the Data Fusion instance should be private. If set to true, all Data Fusion nodes will have private IP addresses and will not be able to access the public internet.\n\n  * `network_config`: Network configuration for a Data Fusion instance. These configurations are used for peering with the customer network. Configurations are optional when a public Data Fusion instance is to be created. However, providing these configurations allows several benefits, such as reduced network latency while accessing the customer resources from managed Data Fusion instance nodes, as well as access to the customer on-prem resources.\n\n    * `network`: Optional. Name of the network in the customer project with which the Tenant Project will be peered for executing pipelines. In case of shared VPC where the network resides in another host project the network should specified in the form of projects/{host-project-id}/global/networks/{network}. This is only required for connectivity type VPC_PEERING.\n\n    * `ip_allocation`: Optional. The IP range in CIDR notation to use for the managed Data Fusion instance nodes. This range must not overlap with any other ranges used in the Data Fusion instance network. This is required only when using connection type VPC_PEERING. Format: a.b.c.d/22 Example: 192.168.0.0/22\n\n    * `connection_type`: Optional. Type of connection for establishing private IP connectivity between the Data Fusion customer project VPC and the corresponding tenant project from a predefined list of available connection modes. If this field is unspecified for a private instance, VPC peering is used.\n    Possible values:\n      * CONNECTION_TYPE_UNSPECIFIED\n      * VPC_PEERING\n      * PRIVATE_SERVICE_CONNECT_INTERFACES\n\n    * `private_service_connect_config`: Configuration for using Private Service Connect to establish connectivity between the Data Fusion consumer project and the corresponding tenant project.\n\n      * `network_attachment`: Required. The reference to the network attachment used to establish private connectivity. It will be of the form projects/{project-id}/regions/{region}/networkAttachments/{network-attachment-id}.\n\n      * `unreachable_cidr_block`: Optional. Input only. The CIDR block to which the CDF instance can't route traffic to in the consumer project VPC. The size of this block should be at least /25. This range should not overlap with the primary address range of any subnetwork used by the network attachment. This range can be used for other purposes in the consumer VPC as long as there is no requirement for CDF to reach destinations using these addresses. If this value is not provided, the server chooses a non RFC 1918 address range. The format of this field is governed by RFC 4632. Example: 192.168.0.0/25\n\n      * `effective_unreachable_cidr_block`: Output only. The CIDR block to which the CDF instance can't route traffic to in the consumer project VPC. The size of this block is /25. The format of this field is governed by RFC 4632. Example: 240.0.0.0/25\n\n  * `labels`: The resource labels for instance to use to annotate any related underlying resources such as Compute Engine VMs. The character '=' is not allowed to be used within the labels.\n\n    * `additional_properties`:\n\n  * `options`: Map of additional options used to configure the behavior of Data Fusion instance.\n\n    * `additional_properties`:\n\n  * `create_time`: Output only. The time the instance was created.\n\n  * `update_time`: Output only. The time the instance was last updated.\n\n  * `state`: Output only. The current state of this Data Fusion instance.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * FAILED\n    * DELETING\n    * UPGRADING\n    * RESTARTING\n    * UPDATING\n    * AUTO_UPDATING\n    * AUTO_UPGRADING\n    * DISABLED\n\n  * `state_message`: Output only. Additional information about the current state of this Data Fusion instance if available.\n\n  * `service_endpoint`: Output only. Endpoint on which the Data Fusion UI is accessible.\n\n  * `zone`: Name of the zone in which the Data Fusion instance will be created. Only DEVELOPER instances use this field.\n\n  * `version`: Current version of the Data Fusion. Only specifiable in Update.\n\n  * `service_account`: Output only. Deprecated. Use tenant_project_id instead to extract the tenant project ID.\n\n  * `display_name`: Display name for an instance.\n\n  * `available_version`: Output only. Available versions that the instance can be upgraded to using UpdateInstanceRequest.\n\n    * `version_number`: The version number of the Data Fusion instance, such as '6.0.1.0'.\n\n    * `default_version`: Whether this is currently the default version for Cloud Data Fusion\n\n    * `available_features`: Represents a list of available feature names for a given version.\n\n    * `type`: Type represents the release availability of the version\n    Possible values:\n      * TYPE_UNSPECIFIED\n      * TYPE_PREVIEW\n      * TYPE_GENERAL_AVAILABILITY\n\n  * `api_endpoint`: Output only. Endpoint on which the REST APIs is accessible.\n\n  * `gcs_bucket`: Output only. Cloud Storage bucket generated by Data Fusion in the customer project.\n\n  * `accelerators`: Output only. List of accelerators enabled for this CDF instance.\n\n    * `accelerator_type`: Optional. The type of an accelator for a Cloud Data Fusion instance.\n    Possible values:\n      * ACCELERATOR_TYPE_UNSPECIFIED\n      * CDC\n      * HEALTHCARE\n      * CCAI_INSIGHTS\n      * CLOUDSEARCH\n\n    * `state`: Output only. The state of the accelerator.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * ENABLED\n      * DISABLED\n      * UNKNOWN\n\n  * `p4_service_account`: Output only. Service agent for the customer project.\n\n  * `tenant_project_id`: Output only. The name of the tenant project.\n\n  * `dataproc_service_account`: User-managed service account to set on Dataproc when Cloud Data Fusion creates Dataproc to run data processing pipelines. This allows users to have fine-grained access control on Dataproc's accesses to cloud resources.\n\n  * `enable_rbac`: Option to enable granular role-based access control.\n\n  * `crypto_key_config`: The crypto key configuration. This field is used by the Customer-managed encryption keys (CMEK) feature.\n\n    * `key_reference`: The name of the key which is used to encrypt/decrypt customer data. For key in Cloud KMS, the key should be in the format of `projects/*/locations/*/keyRings/*/cryptoKeys/*`.\n\n  * `disabled_reason`: Output only. If the instance state is DISABLED, the reason for disabling the instance.\n\n  * `event_publish_config`: Confirguration of PubSubEventWriter.\n\n    * `enabled`: Required. Option to enable Event Publishing.\n\n    * `topic`: Required. The resource name of the Pub/Sub topic. Format: projects/{project_id}/topics/{topic_id}\n\n  * `enable_zone_separation`: Option to enable granular zone separation.\n\n  * `satisfies_pzs`: Output only. Reserved for future use.\n\n  * `workforce_identity_service_endpoint`: Output only. Endpoint on which the Data Fusion UI is accessible to third-party users\n\n  * `patch_revision`: Optional. Current patch revision of the Data Fusion.\n\n  * `dataplex_data_lineage_integration_enabled`: Optional. Option to enable the Dataplex Lineage Integration feature.\n\n  * `maintenance_policy`: Maintenance policy of the instance.\n\n    * `maintenance_window`: Maintenance window of the instance.\n\n      * `recurring_time_window`: Represents an arbitrary window of time that recurs.\n\n        * `window`: Represents an arbitrary window of time.\n\n          * `start_time`: Required. The start time of the time window provided in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. Example: \"2024-01-01T12:04:06-04:00\"\n\n          * `end_time`: Required. The end time of the time window provided in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. The end time should take place after the start time. Example: \"2024-01-02T12:04:06-06:00\"\n\n        * `recurrence`: Required. An RRULE with format [RFC-5545](https://tools.ietf.org/html/rfc5545#section-3.8.5.3) for how this window reccurs. They go on for the span of time between the start and end time. The only supported FREQ value is \"WEEKLY\". To have something repeat every weekday, use: \"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\". This specifies how frequently the window starts. To have a 9 am - 5 pm UTC-4 window every weekday, use something like: ``` start time = 2019-01-01T09:00:00-0400 end time = 2019-01-01T17:00:00-0400 recurrence = FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR ```\n\n    * `maintenance_exclusion_window`: Represents an arbitrary window of time.\n\n      * `start_time`: Required. The start time of the time window provided in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. Example: \"2024-01-01T12:04:06-04:00\"\n\n      * `end_time`: Required. The end time of the time window provided in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. The end time should take place after the start time. Example: \"2024-01-02T12:04:06-06:00\"\n\n\n## GCP permissions\n\nEnsure the [Cloud Data Fusion API](https://console.cloud.google.com/apis/library/datafusion.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_data_fusion_instances.md",
    "content": "+++\ntitle = \"google_data_fusion_instances resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_data_fusion_instances\"\nidentifier = \"inspec/resources/gcp/google_data_fusion_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_data_fusion_instances` InSpec audit resource to test the properties of a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\n  describe google_data_fusion_instances(parent: 'projects/*/locations/*') do\n    it { should exist }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_data_fusion_instances` resource:\n\nSee [google_data_fusion_instance](google_data_fusion_instance) for more detailed information.\n\n* `names`: an array of `google_data_fusion_instance` name\n* `descriptions`: an array of `google_data_fusion_instance` description\n* `types`: an array of `google_data_fusion_instance` type\n* `enable_stackdriver_loggings`: an array of `google_data_fusion_instance` enable_stackdriver_logging\n* `enable_stackdriver_monitorings`: an array of `google_data_fusion_instance` enable_stackdriver_monitoring\n* `private_instances`: an array of `google_data_fusion_instance` private_instance\n* `network_configs`: an array of `google_data_fusion_instance` network_config\n* `labels`: an array of `google_data_fusion_instance` labels\n* `options`: an array of `google_data_fusion_instance` options\n* `create_times`: an array of `google_data_fusion_instance` create_time\n* `update_times`: an array of `google_data_fusion_instance` update_time\n* `states`: an array of `google_data_fusion_instance` state\n* `state_messages`: an array of `google_data_fusion_instance` state_message\n* `service_endpoints`: an array of `google_data_fusion_instance` service_endpoint\n* `zones`: an array of `google_data_fusion_instance` zone\n* `versions`: an array of `google_data_fusion_instance` version\n* `service_accounts`: an array of `google_data_fusion_instance` service_account\n* `display_names`: an array of `google_data_fusion_instance` display_name\n* `available_versions`: an array of `google_data_fusion_instance` available_version\n* `api_endpoints`: an array of `google_data_fusion_instance` api_endpoint\n* `gcs_buckets`: an array of `google_data_fusion_instance` gcs_bucket\n* `accelerators`: an array of `google_data_fusion_instance` accelerators\n* `p4_service_accounts`: an array of `google_data_fusion_instance` p4_service_account\n* `tenant_project_ids`: an array of `google_data_fusion_instance` tenant_project_id\n* `dataproc_service_accounts`: an array of `google_data_fusion_instance` dataproc_service_account\n* `enable_rbacs`: an array of `google_data_fusion_instance` enable_rbac\n* `crypto_key_configs`: an array of `google_data_fusion_instance` crypto_key_config\n* `disabled_reasons`: an array of `google_data_fusion_instance` disabled_reason\n* `event_publish_configs`: an array of `google_data_fusion_instance` event_publish_config\n* `enable_zone_separations`: an array of `google_data_fusion_instance` enable_zone_separation\n* `satisfies_pzs`: an array of `google_data_fusion_instance` satisfies_pzs\n* `workforce_identity_service_endpoints`: an array of `google_data_fusion_instance` workforce_identity_service_endpoint\n* `patch_revisions`: an array of `google_data_fusion_instance` patch_revision\n* `dataplex_data_lineage_integration_enableds`: an array of `google_data_fusion_instance` dataplex_data_lineage_integration_enabled\n* `maintenance_policies`: an array of `google_data_fusion_instance` maintenance_policy\n\n## Properties\n\nProperties that can be accessed from the `google_data_fusion_instances` resource:\n\nSee [google_data_fusion_instance](google_data_fusion_instance) for more detailed information.\n\n* `names`: an array of `google_data_fusion_instance` name\n* `descriptions`: an array of `google_data_fusion_instance` description\n* `types`: an array of `google_data_fusion_instance` type\n* `enable_stackdriver_loggings`: an array of `google_data_fusion_instance` enable_stackdriver_logging\n* `enable_stackdriver_monitorings`: an array of `google_data_fusion_instance` enable_stackdriver_monitoring\n* `private_instances`: an array of `google_data_fusion_instance` private_instance\n* `network_configs`: an array of `google_data_fusion_instance` network_config\n* `labels`: an array of `google_data_fusion_instance` labels\n* `options`: an array of `google_data_fusion_instance` options\n* `create_times`: an array of `google_data_fusion_instance` create_time\n* `update_times`: an array of `google_data_fusion_instance` update_time\n* `states`: an array of `google_data_fusion_instance` state\n* `state_messages`: an array of `google_data_fusion_instance` state_message\n* `service_endpoints`: an array of `google_data_fusion_instance` service_endpoint\n* `zones`: an array of `google_data_fusion_instance` zone\n* `versions`: an array of `google_data_fusion_instance` version\n* `service_accounts`: an array of `google_data_fusion_instance` service_account\n* `display_names`: an array of `google_data_fusion_instance` display_name\n* `available_versions`: an array of `google_data_fusion_instance` available_version\n* `api_endpoints`: an array of `google_data_fusion_instance` api_endpoint\n* `gcs_buckets`: an array of `google_data_fusion_instance` gcs_bucket\n* `accelerators`: an array of `google_data_fusion_instance` accelerators\n* `p4_service_accounts`: an array of `google_data_fusion_instance` p4_service_account\n* `tenant_project_ids`: an array of `google_data_fusion_instance` tenant_project_id\n* `dataproc_service_accounts`: an array of `google_data_fusion_instance` dataproc_service_account\n* `enable_rbacs`: an array of `google_data_fusion_instance` enable_rbac\n* `crypto_key_configs`: an array of `google_data_fusion_instance` crypto_key_config\n* `disabled_reasons`: an array of `google_data_fusion_instance` disabled_reason\n* `event_publish_configs`: an array of `google_data_fusion_instance` event_publish_config\n* `enable_zone_separations`: an array of `google_data_fusion_instance` enable_zone_separation\n* `satisfies_pzs`: an array of `google_data_fusion_instance` satisfies_pzs\n* `workforce_identity_service_endpoints`: an array of `google_data_fusion_instance` workforce_identity_service_endpoint\n* `patch_revisions`: an array of `google_data_fusion_instance` patch_revision\n* `dataplex_data_lineage_integration_enableds`: an array of `google_data_fusion_instance` dataplex_data_lineage_integration_enabled\n* `maintenance_policies`: an array of `google_data_fusion_instance` maintenance_policy\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Data Fusion API](https://console.cloud.google.com/apis/library/datafusion.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataflow_project_location_job.md",
    "content": "+++\ntitle = \"google_dataflow_project_location_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataflow_project_location_job\"\nidentifier = \"inspec/resources/gcp/google_dataflow_project_location_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataflow_project_location_job` InSpec audit resource to to test a Google Cloud ProjectLocationJob resource.\n\n## Examples\n\n```ruby\ndescribe google_dataflow_project_location_job(job: 'value_job_id', location: 'value_location', project: 'value_project') do\n\tit { should exist }\n\tits('id') { should cmp 'value_id' }\n\tits('project_id') { should cmp 'value_projectid' }\n\tits('name') { should cmp 'value_name' }\n\tits('type') { should cmp 'value_type' }\n\tits('steps_location') { should cmp 'value_stepslocation' }\n\tits('current_state') { should cmp 'value_currentstate' }\n\tits('current_state_time') { should cmp 'value_currentstatetime' }\n\tits('requested_state') { should cmp 'value_requestedstate' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('replace_job_id') { should cmp 'value_replacejobid' }\n\tits('client_request_id') { should cmp 'value_clientrequestid' }\n\tits('replaced_by_job_id') { should cmp 'value_replacedbyjobid' }\n\tits('location') { should cmp 'value_location' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('created_from_snapshot_id') { should cmp 'value_createdfromsnapshotid' }\n\nend\n\ndescribe google_dataflow_project_location_job(job: 'value_job_id', location: 'value_location', projectId: 'value_project') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataflow_project_location_job` resource:\n\n\n  * `id`: The unique ID of this job. This field is set by the Dataflow service when the job is created, and is immutable for the life of the job.\n\n  * `project_id`: The ID of the Google Cloud project that the job belongs to.\n\n  * `name`: The user-specified Dataflow job name. Only one active job with a given name can exist in a project within one region at any given time. Jobs in different regions can have the same name. If a caller attempts to create a job with the same name as an active job that already exists, the attempt returns the existing job. The name must match the regular expression `[a-z]([-a-z0-9]{0,1022}[a-z0-9])?`\n\n  * `type`: The type of Dataflow job.\n  Possible values:\n    * JOB_TYPE_UNKNOWN\n    * JOB_TYPE_BATCH\n    * JOB_TYPE_STREAMING\n\n  * `environment`: Describes the environment in which a Dataflow Job runs.\n\n    * `temp_storage_prefix`: The prefix of the resources the system should use for temporary storage. The system will append the suffix \"/temp-{JOBNAME} to this resource prefix, where {JOBNAME} is the value of the job_name field. The resulting bucket and object prefix is used as the prefix of the resources used to store temporary data needed during the job execution. NOTE: This will override the value in taskrunner_settings. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}\n\n    * `cluster_manager_api_service`: The type of cluster manager API to use. If unknown or unspecified, the service will attempt to choose a reasonable default. This should be in the form of the API service name, e.g. \"compute.googleapis.com\".\n\n    * `experiments`: The list of experiments to enable. This field should be used for SDK related experiments and not for service related experiments. The proper field for service related experiments is service_options.\n\n    * `service_options`: The list of service options to enable. This field should be used for service related experiments only. These experiments, when graduating to GA, should be replaced by dedicated fields or become default (i.e. always on).\n\n    * `service_kms_key_name`: If set, contains the Cloud KMS key identifier used to encrypt data at rest, AKA a Customer Managed Encryption Key (CMEK). Format: projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY\n\n    * `worker_pools`: The worker pools. At least one \"harness\" worker pool must be specified in order for the job to have workers.\n\n      * `kind`: The kind of the worker pool; currently only `harness` and `shuffle` are supported.\n\n      * `num_workers`: Number of Google Compute Engine workers in this pool needed to execute the job. If zero or unspecified, the service will attempt to choose a reasonable default.\n\n      * `packages`: Packages to be installed on workers.\n\n        * `name`: The name of the package.\n\n        * `location`: The resource to read the package from. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket} bucket.storage.googleapis.com/\n\n      * `default_package_set`: The default package set to install. This allows the service to select a default set of packages which are useful to worker harnesses written in a particular language.\n      Possible values:\n        * DEFAULT_PACKAGE_SET_UNKNOWN\n        * DEFAULT_PACKAGE_SET_NONE\n        * DEFAULT_PACKAGE_SET_JAVA\n        * DEFAULT_PACKAGE_SET_PYTHON\n\n      * `machine_type`: Machine type (e.g. \"n1-standard-1\"). If empty or unspecified, the service will attempt to choose a reasonable default.\n\n      * `teardown_policy`: Sets the policy for determining when to turndown worker pool. Allowed values are: `TEARDOWN_ALWAYS`, `TEARDOWN_ON_SUCCESS`, and `TEARDOWN_NEVER`. `TEARDOWN_ALWAYS` means workers are always torn down regardless of whether the job succeeds. `TEARDOWN_ON_SUCCESS` means workers are torn down if the job succeeds. `TEARDOWN_NEVER` means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the `TEARDOWN_ALWAYS` policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.\n      Possible values:\n        * TEARDOWN_POLICY_UNKNOWN\n        * TEARDOWN_ALWAYS\n        * TEARDOWN_ON_SUCCESS\n        * TEARDOWN_NEVER\n\n      * `disk_size_gb`: Size of root disk for VMs, in GB. If zero or unspecified, the service will attempt to choose a reasonable default.\n\n      * `disk_type`: Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.\n\n      * `disk_source_image`: Fully qualified source image for disks.\n\n      * `zone`: Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.\n\n      * `taskrunner_settings`: Taskrunner configuration settings.\n\n        * `task_user`: The UNIX user ID on the worker VM to use for tasks launched by taskrunner; e.g. \"root\".\n\n        * `task_group`: The UNIX group ID on the worker VM to use for tasks launched by taskrunner; e.g. \"wheel\".\n\n        * `oauth_scopes`: The OAuth2 scopes to be requested by the taskrunner in order to access the Cloud Dataflow API.\n\n        * `base_url`: The base URL for the taskrunner to use when accessing Google Cloud APIs. When workers access Google Cloud APIs, they logically do so via relative URLs. If this field is specified, it supplies the base URL to use for resolving these relative URLs. The normative algorithm used is defined by RFC 1808, \"Relative Uniform Resource Locators\". If not specified, the default value is \"http://www.googleapis.com/\"\n\n        * `dataflow_api_version`: The API version of endpoint, e.g. \"v1b3\"\n\n        * `parallel_worker_settings`: Provides data to pass through to the worker harness.\n\n          * `base_url`: The base URL for accessing Google Cloud APIs. When workers access Google Cloud APIs, they logically do so via relative URLs. If this field is specified, it supplies the base URL to use for resolving these relative URLs. The normative algorithm used is defined by RFC 1808, \"Relative Uniform Resource Locators\". If not specified, the default value is \"http://www.googleapis.com/\"\n\n          * `reporting_enabled`: Whether to send work progress updates to the service.\n\n          * `service_path`: The Cloud Dataflow service path relative to the root URL, for example, \"dataflow/v1b3/projects\".\n\n          * `shuffle_service_path`: The Shuffle service path relative to the root URL, for example, \"shuffle/v1beta1\".\n\n          * `worker_id`: The ID of the worker running this pipeline.\n\n          * `temp_storage_prefix`: The prefix of the resources the system should use for temporary storage. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}\n\n        * `base_task_dir`: The location on the worker for task-specific subdirectories.\n\n        * `continue_on_exception`: Whether to continue taskrunner if an exception is hit.\n\n        * `log_to_serialconsole`: Whether to send taskrunner log info to Google Compute Engine VM serial console.\n\n        * `alsologtostderr`: Whether to also send taskrunner log info to stderr.\n\n        * `log_upload_location`: Indicates where to put logs. If this is not specified, the logs will not be uploaded. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}\n\n        * `log_dir`: The directory on the VM to store logs.\n\n        * `temp_storage_prefix`: The prefix of the resources the taskrunner should use for temporary storage. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}\n\n        * `harness_command`: The command to launch the worker harness.\n\n        * `workflow_file_name`: The file to store the workflow in.\n\n        * `commandlines_file_name`: The file to store preprocessing commands in.\n\n        * `vm_id`: The ID string of the VM.\n\n        * `language_hint`: The suggested backend language.\n\n        * `streaming_worker_main_class`: The streaming worker main class name.\n\n      * `on_host_maintenance`: The action to take on host maintenance, as defined by the Google Compute Engine API.\n\n      * `data_disks`: Data disks that are used by a VM in this workflow.\n\n        * `size_gb`: Size of disk in GB. If zero or unspecified, the service will attempt to choose a reasonable default.\n\n        * `disk_type`: Disk storage type, as defined by Google Compute Engine. This must be a disk type appropriate to the project and zone in which the workers will run. If unknown or unspecified, the service will attempt to choose a reasonable default. For example, the standard persistent disk type is a resource name typically ending in \"pd-standard\". If SSD persistent disks are available, the resource name typically ends with \"pd-ssd\". The actual valid values are defined the Google Compute Engine API, not by the Cloud Dataflow API; consult the Google Compute Engine documentation for more information about determining the set of available disk types for a particular project and zone. Google Compute Engine Disk types are local to a particular project in a particular zone, and so the resource name will typically look something like this: compute.googleapis.com/projects/project-id/zones/zone/diskTypes/pd-standard\n\n        * `mount_point`: Directory in a VM where disk is mounted.\n\n      * `metadata`: Metadata to set on the Google Compute Engine VMs.\n\n        * `additional_properties`:\n\n      * `autoscaling_settings`: Settings for WorkerPool autoscaling.\n\n        * `algorithm`: The algorithm to use for autoscaling.\n        Possible values:\n          * AUTOSCALING_ALGORITHM_UNKNOWN\n          * AUTOSCALING_ALGORITHM_NONE\n          * AUTOSCALING_ALGORITHM_BASIC\n\n        * `max_num_workers`: The maximum number of workers to cap scaling at.\n\n      * `pool_args`: Extra arguments for this worker pool.\n\n        * `additional_properties`: Properties of the object. Contains field @type with type URL.\n\n      * `network`: Network to which VMs will be assigned. If empty or unspecified, the service will use the network \"default\".\n\n      * `subnetwork`: Subnetwork to which VMs will be assigned, if desired. Expected to be of the form \"regions/REGION/subnetworks/SUBNETWORK\".\n\n      * `worker_harness_container_image`: Required. Docker container image that executes the Cloud Dataflow worker harness, residing in Google Container Registry. Deprecated for the Fn API path. Use sdk_harness_container_images instead.\n\n      * `num_threads_per_worker`: The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).\n\n      * `ip_configuration`: Configuration for VM IPs.\n      Possible values:\n        * WORKER_IP_UNSPECIFIED\n        * WORKER_IP_PUBLIC\n        * WORKER_IP_PRIVATE\n\n      * `sdk_harness_container_images`: Set of SDK harness containers needed to execute this pipeline. This will only be set in the Fn API path. For non-cross-language pipelines this should have only one entry. Cross-language pipelines will have two or more entries.\n\n        * `container_image`: A docker container image that resides in Google Container Registry.\n\n        * `use_single_core_per_container`: If true, recommends the Dataflow service to use only one core per SDK container instance with this image. If false (or unset) recommends using more than one core per SDK container instance with this image for efficiency. Note that Dataflow service may choose to override this property if needed.\n\n        * `environment_id`: Environment ID for the Beam runner API proto Environment that corresponds to the current SDK Harness.\n\n        * `capabilities`: The set of capabilities enumerated in the above Environment proto. See also [beam_runner_api.proto](https://github.com/apache/beam/blob/master/model/pipeline/src/main/proto/org/apache/beam/model/pipeline/v1/beam_runner_api.proto)\n\n    * `user_agent`: A description of the process that generated the request.\n\n      * `additional_properties`: Properties of the object.\n\n    * `version`: A structure describing which components and their versions of the service are required in order to run the job.\n\n      * `additional_properties`: Properties of the object.\n\n    * `dataset`: The dataset for the current project where various workflow related tables are stored. The supported resource type is: Google BigQuery: bigquery.googleapis.com/{dataset}\n\n    * `sdk_pipeline_options`: The Cloud Dataflow SDK pipeline options specified by the user. These options are passed through the service and are used to recreate the SDK pipeline options on the worker in a language agnostic and platform independent way.\n\n      * `additional_properties`: Properties of the object.\n\n    * `internal_experiments`: Experimental settings.\n\n      * `additional_properties`: Properties of the object. Contains field @type with type URL.\n\n    * `service_account_email`: Identity to run virtual machines as. Defaults to the default account.\n\n    * `flex_resource_scheduling_goal`: Which Flexible Resource Scheduling mode to run in.\n    Possible values:\n      * FLEXRS_UNSPECIFIED\n      * FLEXRS_SPEED_OPTIMIZED\n      * FLEXRS_COST_OPTIMIZED\n\n    * `worker_region`: The Compute Engine region (https://cloud.google.com/compute/docs/regions-zones/regions-zones) in which worker processing should occur, e.g. \"us-west1\". Mutually exclusive with worker_zone. If neither worker_region nor worker_zone is specified, default to the control plane's region.\n\n    * `worker_zone`: The Compute Engine zone (https://cloud.google.com/compute/docs/regions-zones/regions-zones) in which worker processing should occur, e.g. \"us-west1-a\". Mutually exclusive with worker_region. If neither worker_region nor worker_zone is specified, a zone in the control plane's region is chosen based on available capacity.\n\n    * `shuffle_mode`: Output only. The shuffle mode used for the job.\n    Possible values:\n      * SHUFFLE_MODE_UNSPECIFIED\n      * VM_BASED\n      * SERVICE_BASED\n\n    * `debug_options`: Describes any options that have an effect on the debugging of pipelines.\n\n      * `enable_hot_key_logging`: When true, enables the logging of the literal hot key to the user's Cloud Logging.\n\n      * `data_sampling`: Configuration options for sampling elements.\n\n        * `behaviors`: List of given sampling behaviors to enable. For example, specifying behaviors = [ALWAYS_ON] samples in-flight elements but does not sample exceptions. Can be used to specify multiple behaviors like, behaviors = [ALWAYS_ON, EXCEPTIONS] for specifying periodic sampling and exception sampling. If DISABLED is in the list, then sampling will be disabled and ignore the other given behaviors. Ordering does not matter.\n\n    * `use_streaming_engine_resource_based_billing`: Output only. Whether the job uses the Streaming Engine resource-based billing model.\n\n    * `streaming_mode`: Optional. Specifies the Streaming Engine message processing guarantees. Reduces cost and latency but might result in duplicate messages committed to storage. Designed to run simple mapping streaming ETL jobs at the lowest cost. For example, Change Data Capture (CDC) to BigQuery is a canonical use case.\n    Possible values:\n      * STREAMING_MODE_UNSPECIFIED\n      * STREAMING_MODE_EXACTLY_ONCE\n      * STREAMING_MODE_AT_LEAST_ONCE\n\n  * `steps`: Exactly one of step or steps_location should be specified. The top-level steps that constitute the entire job. Only retrieved with JOB_VIEW_ALL.\n\n    * `kind`: The kind of step in the Cloud Dataflow job.\n\n    * `name`: The name that identifies the step. This must be unique for each step with respect to all other steps in the Cloud Dataflow job.\n\n    * `properties`: Named properties associated with the step. Each kind of predefined step has its own required set of properties. Must be provided on Create. Only retrieved with JOB_VIEW_ALL.\n\n      * `additional_properties`: Properties of the object.\n\n  * `steps_location`: The Cloud Storage location where the steps are stored.\n\n  * `current_state`: The current state of the job. Jobs are created in the `JOB_STATE_STOPPED` state unless otherwise specified. A job in the `JOB_STATE_RUNNING` state may asynchronously enter a terminal state. After a job has reached a terminal state, no further state updates may be made. This field might be mutated by the Dataflow service; callers cannot mutate it.\n  Possible values:\n    * JOB_STATE_UNKNOWN\n    * JOB_STATE_STOPPED\n    * JOB_STATE_RUNNING\n    * JOB_STATE_DONE\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_UPDATED\n    * JOB_STATE_DRAINING\n    * JOB_STATE_DRAINED\n    * JOB_STATE_PENDING\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_QUEUED\n    * JOB_STATE_RESOURCE_CLEANING_UP\n\n  * `current_state_time`: The timestamp associated with the current state.\n\n  * `requested_state`: The job's requested state. Applies to `UpdateJob` requests. Set `requested_state` with `UpdateJob` requests to switch between the states `JOB_STATE_STOPPED` and `JOB_STATE_RUNNING`. You can also use `UpdateJob` requests to change a job's state from `JOB_STATE_RUNNING` to `JOB_STATE_CANCELLED`, `JOB_STATE_DONE`, or `JOB_STATE_DRAINED`. These states irrevocably terminate the job if it hasn't already reached a terminal state. This field has no effect on `CreateJob` requests.\n  Possible values:\n    * JOB_STATE_UNKNOWN\n    * JOB_STATE_STOPPED\n    * JOB_STATE_RUNNING\n    * JOB_STATE_DONE\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_UPDATED\n    * JOB_STATE_DRAINING\n    * JOB_STATE_DRAINED\n    * JOB_STATE_PENDING\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_QUEUED\n    * JOB_STATE_RESOURCE_CLEANING_UP\n\n  * `execution_info`: Additional information about how a Cloud Dataflow job will be executed that isn't contained in the submitted job.\n\n    * `stages`: A mapping from each stage to the information about that stage.\n\n      * `additional_properties`: Contains information about how a particular google.dataflow.v1beta3.Step will be executed.\n\n  * `create_time`: The timestamp when the job was initially created. Immutable and set by the Cloud Dataflow service.\n\n  * `replace_job_id`: If this job is an update of an existing job, this field is the job ID of the job it replaced. When sending a `CreateJobRequest`, you can update a job by specifying it here. The job named here is stopped, and its intermediate state is transferred to this job.\n\n  * `transform_name_mapping`: The map of transform name prefixes of the job to be replaced to the corresponding name prefixes of the new job.\n\n    * `additional_properties`:\n\n  * `client_request_id`: The client's unique identifier of the job, re-used across retried attempts. If this field is set, the service will ensure its uniqueness. The request to create a job will fail if the service has knowledge of a previously submitted job with the same client's ID and job name. The caller may use this field to ensure idempotence of job creation across retried attempts to create a job. By default, the field is empty and, in that case, the service ignores it.\n\n  * `replaced_by_job_id`: If another job is an update of this job (and thus, this job is in `JOB_STATE_UPDATED`), this field contains the ID of that job.\n\n  * `temp_files`: A set of files the system should be aware of that are used for temporary storage. These temporary files will be removed on job completion. No duplicates are allowed. No file patterns are supported. The supported files are: Google Cloud Storage: storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}\n\n  * `labels`: User-defined labels for this job. The labels map can contain no more than 64 entries. Entries of the labels map are UTF8 strings that comply with the following restrictions: * Keys must conform to regexp: \\p{Ll}\\p{Lo}{0,62} * Values must conform to regexp: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} * Both keys and values are additionally constrained to be <= 128 bytes in size.\n\n    * `additional_properties`:\n\n  * `location`: The [regional endpoint] (https://cloud.google.com/dataflow/docs/concepts/regional-endpoints) that contains this job.\n\n  * `pipeline_description`: A descriptive representation of submitted pipeline as well as the executed form. This data is provided by the Dataflow service for ease of visualizing the pipeline and interpreting Dataflow provided metrics.\n\n    * `original_pipeline_transform`: Description of each transform in the pipeline and collections between them.\n\n      * `kind`: Type of transform.\n      Possible values:\n        * UNKNOWN_KIND\n        * PAR_DO_KIND\n        * GROUP_BY_KEY_KIND\n        * FLATTEN_KIND\n        * READ_KIND\n        * WRITE_KIND\n        * CONSTANT_KIND\n        * SINGLETON_KIND\n        * SHUFFLE_KIND\n\n      * `id`: SDK generated id of this transform instance.\n\n      * `name`: User provided name for this transform instance.\n\n      * `display_data`: Transform-specific display data.\n\n        * `key`: The key identifying the display data. This is intended to be used as a label for the display data when viewed in a dax monitoring system.\n\n        * `namespace`: The namespace for the key. This is usually a class name or programming language namespace (i.e. python module) which defines the display data. This allows a dax monitoring system to specially handle the data and perform custom rendering.\n\n        * `str_value`: Contains value if the data is of string type.\n\n        * `int64_value`: Contains value if the data is of int64 type.\n\n        * `float_value`: Contains value if the data is of float type.\n\n        * `java_class_value`: Contains value if the data is of java class type.\n\n        * `timestamp_value`: Contains value if the data is of timestamp type.\n\n        * `duration_value`: Contains value if the data is of duration type.\n\n        * `bool_value`: Contains value if the data is of a boolean type.\n\n        * `short_str_value`: A possible additional shorter value to display. For example a java_class_name_value of com.mypackage.MyDoFn will be stored with MyDoFn as the short_str_value and com.mypackage.MyDoFn as the java_class_name value. short_str_value can be displayed and java_class_name_value will be displayed as a tooltip.\n\n        * `url`: An optional full URL.\n\n        * `label`: An optional label to display in a dax UI for the element.\n\n      * `output_collection_name`: User names for all collection outputs to this transform.\n\n      * `input_collection_name`: User names for all collection inputs to this transform.\n\n    * `execution_pipeline_stage`: Description of each stage of execution of the pipeline.\n\n      * `name`: Dataflow service generated name for this stage.\n\n      * `id`: Dataflow service generated id for this stage.\n\n      * `kind`: Type of transform this stage is executing.\n      Possible values:\n        * UNKNOWN_KIND\n        * PAR_DO_KIND\n        * GROUP_BY_KEY_KIND\n        * FLATTEN_KIND\n        * READ_KIND\n        * WRITE_KIND\n        * CONSTANT_KIND\n        * SINGLETON_KIND\n        * SHUFFLE_KIND\n\n      * `input_source`: Input sources for this stage.\n\n        * `user_name`: Human-readable name for this source; may be user or system generated.\n\n        * `name`: Dataflow service generated name for this source.\n\n        * `original_transform_or_collection`: User name for the original user transform or collection with which this source is most closely associated.\n\n        * `size_bytes`: Size of the source, if measurable.\n\n      * `output_source`: Output sources for this stage.\n\n        * `user_name`: Human-readable name for this source; may be user or system generated.\n\n        * `name`: Dataflow service generated name for this source.\n\n        * `original_transform_or_collection`: User name for the original user transform or collection with which this source is most closely associated.\n\n        * `size_bytes`: Size of the source, if measurable.\n\n      * `prerequisite_stage`: Other stages that must complete before this stage can run.\n\n      * `component_transform`: Transforms that comprise this execution stage.\n\n        * `user_name`: Human-readable name for this transform; may be user or system generated.\n\n        * `name`: Dataflow service generated name for this source.\n\n        * `original_transform`: User name for the original user transform with which this transform is most closely associated.\n\n      * `component_source`: Collections produced and consumed by component transforms of this stage.\n\n        * `user_name`: Human-readable name for this transform; may be user or system generated.\n\n        * `name`: Dataflow service generated name for this source.\n\n        * `original_transform_or_collection`: User name for the original user transform or collection with which this source is most closely associated.\n\n    * `display_data`: Pipeline level display data.\n\n      * `key`: The key identifying the display data. This is intended to be used as a label for the display data when viewed in a dax monitoring system.\n\n      * `namespace`: The namespace for the key. This is usually a class name or programming language namespace (i.e. python module) which defines the display data. This allows a dax monitoring system to specially handle the data and perform custom rendering.\n\n      * `str_value`: Contains value if the data is of string type.\n\n      * `int64_value`: Contains value if the data is of int64 type.\n\n      * `float_value`: Contains value if the data is of float type.\n\n      * `java_class_value`: Contains value if the data is of java class type.\n\n      * `timestamp_value`: Contains value if the data is of timestamp type.\n\n      * `duration_value`: Contains value if the data is of duration type.\n\n      * `bool_value`: Contains value if the data is of a boolean type.\n\n      * `short_str_value`: A possible additional shorter value to display. For example a java_class_name_value of com.mypackage.MyDoFn will be stored with MyDoFn as the short_str_value and com.mypackage.MyDoFn as the java_class_name value. short_str_value can be displayed and java_class_name_value will be displayed as a tooltip.\n\n      * `url`: An optional full URL.\n\n      * `label`: An optional label to display in a dax UI for the element.\n\n    * `step_names_hash`: A hash value of the submitted pipeline portable graph step names if exists.\n\n  * `stage_states`: This field may be mutated by the Cloud Dataflow service; callers cannot mutate it.\n\n    * `execution_stage_name`: The name of the execution stage.\n\n    * `execution_stage_state`: Executions stage states allow the same set of values as JobState.\n    Possible values:\n      * JOB_STATE_UNKNOWN\n      * JOB_STATE_STOPPED\n      * JOB_STATE_RUNNING\n      * JOB_STATE_DONE\n      * JOB_STATE_FAILED\n      * JOB_STATE_CANCELLED\n      * JOB_STATE_UPDATED\n      * JOB_STATE_DRAINING\n      * JOB_STATE_DRAINED\n      * JOB_STATE_PENDING\n      * JOB_STATE_CANCELLING\n      * JOB_STATE_QUEUED\n      * JOB_STATE_RESOURCE_CLEANING_UP\n\n    * `current_state_time`: The time at which the stage transitioned to this state.\n\n  * `job_metadata`: Metadata available primarily for filtering jobs. Will be included in the ListJob response and Job SUMMARY view.\n\n    * `sdk_version`: The version of the SDK used to run the job.\n\n      * `version`: The version of the SDK used to run the job.\n\n      * `version_display_name`: A readable string describing the version of the SDK.\n\n      * `sdk_support_status`: The support status for this SDK version.\n      Possible values:\n        * UNKNOWN\n        * SUPPORTED\n        * STALE\n        * DEPRECATED\n        * UNSUPPORTED\n\n      * `bugs`: Output only. Known bugs found in this SDK version.\n\n        * `type`: Output only. Describes the impact of this SDK bug.\n        Possible values:\n          * TYPE_UNSPECIFIED\n          * GENERAL\n          * PERFORMANCE\n          * DATALOSS\n\n        * `severity`: Output only. How severe the SDK bug is.\n        Possible values:\n          * SEVERITY_UNSPECIFIED\n          * NOTICE\n          * WARNING\n          * SEVERE\n\n        * `uri`: Output only. Link to more information on the bug.\n\n    * `spanner_details`: Identification of a Spanner source used in the Dataflow job.\n\n      * `project_id`: ProjectId accessed in the connection.\n\n      * `instance_id`: InstanceId accessed in the connection.\n\n      * `database_id`: DatabaseId accessed in the connection.\n\n    * `bigquery_details`: Identification of a BigQuery source used in the Dataflow job.\n\n      * `table`: Table accessed in the connection.\n\n      * `dataset`: Dataset accessed in the connection.\n\n      * `project_id`: Project accessed in the connection.\n\n      * `query`: Query used to access data in the connection.\n\n    * `big_table_details`: Identification of a Cloud Bigtable source used in the Dataflow job.\n\n      * `project_id`: ProjectId accessed in the connection.\n\n      * `instance_id`: InstanceId accessed in the connection.\n\n      * `table_id`: TableId accessed in the connection.\n\n    * `pubsub_details`: Identification of a Pub/Sub source used in the Dataflow job.\n\n      * `topic`: Topic accessed in the connection.\n\n      * `subscription`: Subscription used in the connection.\n\n    * `file_details`: Identification of a File source used in the Dataflow job.\n\n      * `file_pattern`: File Pattern used to access files by the connector.\n\n    * `datastore_details`: Identification of a Datastore source used in the Dataflow job.\n\n      * `namespace`: Namespace used in the connection.\n\n      * `project_id`: ProjectId accessed in the connection.\n\n    * `user_display_properties`: List of display properties to help UI filter jobs.\n\n      * `additional_properties`:\n\n  * `start_time`: The timestamp when the job was started (transitioned to JOB_STATE_PENDING). Flexible resource scheduling jobs are started with some delay after job creation, so start_time is unset before start and is updated when the job is started by the Cloud Dataflow service. For other jobs, start_time always equals to create_time and is immutable and set by the Cloud Dataflow service.\n\n  * `created_from_snapshot_id`: If this is specified, the job's initial state is populated from the given snapshot.\n\n  * `satisfies_pzs`: Reserved for future use. This field is set only in responses from the server; it is ignored if it is set in any requests.\n\n  * `runtime_updatable_params`: Additional job parameters that can only be updated during runtime using the projects.jobs.update method. These fields have no effect when specified during job creation.\n\n    * `max_num_workers`: The maximum number of workers to cap autoscaling at. This field is currently only supported for Streaming Engine jobs.\n\n    * `min_num_workers`: The minimum number of workers to scale down to. This field is currently only supported for Streaming Engine jobs.\n\n    * `worker_utilization_hint`: Target worker utilization, compared against the aggregate utilization of the worker pool by autoscaler, to determine upscaling and downscaling when absent other constraints such as backlog.\n\n  * `satisfies_pzi`: Output only. Reserved for future use. This field is set only in responses from the server; it is ignored if it is set in any requests.\n\n\n## GCP permissions\n\nEnsure the [https://dataflow.googleapis.com/](https://console.cloud.google.com/apis/library/dataflow.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataflow_project_location_jobs.md",
    "content": "+++\ntitle = \"google_dataflow_project_location_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataflow_project_location_jobs\"\nidentifier = \"inspec/resources/gcp/google_dataflow_project_location_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataflow_project_location_jobs` InSpec audit resource to to test a Google Cloud ProjectLocationJob resource.\n\n## Examples\n\n```ruby\n    describe google_dataflow_project_location_jobs(location: 'value_location', project: 'value_project') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataflow_project_location_jobs` resource:\n\nSee [google_dataflow_project_location_job](google_dataflow_project_location_job) for more detailed information.\n\n  * `ids`: an array of `google_dataflow_project_location_job` id\n  * `project_ids`: an array of `google_dataflow_project_location_job` project_id\n  * `names`: an array of `google_dataflow_project_location_job` name\n  * `types`: an array of `google_dataflow_project_location_job` type\n  * `environments`: an array of `google_dataflow_project_location_job` environment\n  * `steps`: an array of `google_dataflow_project_location_job` steps\n  * `steps_locations`: an array of `google_dataflow_project_location_job` steps_location\n  * `current_states`: an array of `google_dataflow_project_location_job` current_state\n  * `current_state_times`: an array of `google_dataflow_project_location_job` current_state_time\n  * `requested_states`: an array of `google_dataflow_project_location_job` requested_state\n  * `execution_infos`: an array of `google_dataflow_project_location_job` execution_info\n  * `create_times`: an array of `google_dataflow_project_location_job` create_time\n  * `replace_job_ids`: an array of `google_dataflow_project_location_job` replace_job_id\n  * `transform_name_mappings`: an array of `google_dataflow_project_location_job` transform_name_mapping\n  * `client_request_ids`: an array of `google_dataflow_project_location_job` client_request_id\n  * `replaced_by_job_ids`: an array of `google_dataflow_project_location_job` replaced_by_job_id\n  * `temp_files`: an array of `google_dataflow_project_location_job` temp_files\n  * `labels`: an array of `google_dataflow_project_location_job` labels\n  * `locations`: an array of `google_dataflow_project_location_job` location\n  * `pipeline_descriptions`: an array of `google_dataflow_project_location_job` pipeline_description\n  * `stage_states`: an array of `google_dataflow_project_location_job` stage_states\n  * `job_metadata`: an array of `google_dataflow_project_location_job` job_metadata\n  * `start_times`: an array of `google_dataflow_project_location_job` start_time\n  * `created_from_snapshot_ids`: an array of `google_dataflow_project_location_job` created_from_snapshot_id\n  * `satisfies_pzs`: an array of `google_dataflow_project_location_job` satisfies_pzs\n  * `runtime_updatable_params`: an array of `google_dataflow_project_location_job` runtime_updatable_params\n  * `satisfies_pzis`: an array of `google_dataflow_project_location_job` satisfies_pzi\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://dataflow.googleapis.com/](https://console.cloud.google.com/apis/library/dataflow.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_autoscaling_policies.md",
    "content": "+++\ntitle = \"google_dataproc_autoscaling_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_autoscaling_policies\"\nidentifier = \"inspec/resources/gcp/google_dataproc_autoscaling_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_autoscaling_policies` InSpec audit resource to to test a Google Cloud ProjectRegionAutoscalingPolicy resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_autoscaling_policies(parent: 'value_parent') do\n    it { should exist }\n    its('ids') { should include 'value_id' }\n  \tits('names') { should include 'value_name' }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_autoscaling_policies` resource:\n\nSee [google_dataproc_autoscaling_policy](google_dataproc_autoscaling_policy) for more detailed information.\n\n* `ids`: an array of `google_dataproc_autoscaling_policy` id\n* `names`: an array of `google_dataproc_autoscaling_policy` name\n* `basic_algorithms`: an array of `google_dataproc_autoscaling_policy` basic_algorithm\n* `worker_configs`: an array of `google_dataproc_autoscaling_policy` worker_config\n* `secondary_worker_configs`: an array of `google_dataproc_autoscaling_policy` secondary_worker_config\n* `labels`: an array of `google_dataproc_autoscaling_policy` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_autoscaling_policy.md",
    "content": "+++\ntitle = \"google_dataproc_autoscaling_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_autoscaling_policy\"\nidentifier = \"inspec/resources/gcp/google_dataproc_autoscaling_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_autoscaling_policy` InSpec audit resource to to test a Google Cloud ProjectRegionAutoscalingPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_autoscaling_policy(name: 'value_name') do\n\tit { should exist }\n\tits('id') { should cmp 'value_id' }\n\tits('name') { should cmp 'value_name' }\nend\n\ndescribe google_dataproc_autoscaling_policy(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_autoscaling_policy` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_autoscaling_policy` resource:\n\n\n  * `id`: Required. The policy id.The id must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), and hyphens (-). Cannot begin or end with underscore or hyphen. Must consist of between 3 and 50 characters.\n\n  * `name`: Output only. The \"resource name\" of the autoscaling policy, as described in https://cloud.google.com/apis/design/resource_names. For projects.regions.autoscalingPolicies, the resource name of the policy has the following format: projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id} For projects.locations.autoscalingPolicies, the resource name of the policy has the following format: projects/{project_id}/locations/{location}/autoscalingPolicies/{policy_id}\n\n  * `basic_algorithm`: Basic algorithm for autoscaling.\n\n    * `yarn_config`: Basic autoscaling configurations for YARN.\n\n      * `graceful_decommission_timeout`: Required. Timeout for YARN graceful decommissioning of Node Managers. Specifies the duration to wait for jobs to complete before forcefully removing workers (and potentially interrupting jobs). Only applicable to downscaling operations.Bounds: 0s, 1d.\n\n      * `scale_up_factor`: Required. Fraction of average YARN pending memory in the last cooldown period for which to add workers. A scale-up factor of 1.0 will result in scaling up so that there is no pending memory remaining after the update (more aggressive scaling). A scale-up factor closer to 0 will result in a smaller magnitude of scaling up (less aggressive scaling). See How autoscaling works (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#how_autoscaling_works) for more information.Bounds: 0.0, 1.0.\n\n      * `scale_down_factor`: Required. Fraction of average YARN pending memory in the last cooldown period for which to remove workers. A scale-down factor of 1 will result in scaling down so that there is no available memory remaining after the update (more aggressive scaling). A scale-down factor of 0 disables removing workers, which can be beneficial for autoscaling a single job. See How autoscaling works (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#how_autoscaling_works) for more information.Bounds: 0.0, 1.0.\n\n      * `scale_up_min_worker_fraction`: Optional. Minimum scale-up threshold as a fraction of total cluster size before scaling occurs. For example, in a 20-worker cluster, a threshold of 0.1 means the autoscaler must recommend at least a 2-worker scale-up for the cluster to scale. A threshold of 0 means the autoscaler will scale up on any recommended change.Bounds: 0.0, 1.0. Default: 0.0.\n\n      * `scale_down_min_worker_fraction`: Optional. Minimum scale-down threshold as a fraction of total cluster size before scaling occurs. For example, in a 20-worker cluster, a threshold of 0.1 means the autoscaler must recommend at least a 2 worker scale-down for the cluster to scale. A threshold of 0 means the autoscaler will scale down on any recommended change.Bounds: 0.0, 1.0. Default: 0.0.\n\n    * `spark_standalone_config`: Basic autoscaling configurations for Spark Standalone.\n\n      * `graceful_decommission_timeout`: Required. Timeout for Spark graceful decommissioning of spark workers. Specifies the duration to wait for spark worker to complete spark decommissioning tasks before forcefully removing workers. Only applicable to downscaling operations.Bounds: 0s, 1d.\n\n      * `scale_up_factor`: Required. Fraction of required workers to add to Spark Standalone clusters. A scale-up factor of 1.0 will result in scaling up so that there are no more required workers for the Spark Job (more aggressive scaling). A scale-up factor closer to 0 will result in a smaller magnitude of scaling up (less aggressive scaling).Bounds: 0.0, 1.0.\n\n      * `scale_down_factor`: Required. Fraction of required executors to remove from Spark Serverless clusters. A scale-down factor of 1.0 will result in scaling down so that there are no more executors for the Spark Job.(more aggressive scaling). A scale-down factor closer to 0 will result in a smaller magnitude of scaling donw (less aggressive scaling).Bounds: 0.0, 1.0.\n\n      * `scale_up_min_worker_fraction`: Optional. Minimum scale-up threshold as a fraction of total cluster size before scaling occurs. For example, in a 20-worker cluster, a threshold of 0.1 means the autoscaler must recommend at least a 2-worker scale-up for the cluster to scale. A threshold of 0 means the autoscaler will scale up on any recommended change.Bounds: 0.0, 1.0. Default: 0.0.\n\n      * `scale_down_min_worker_fraction`: Optional. Minimum scale-down threshold as a fraction of total cluster size before scaling occurs. For example, in a 20-worker cluster, a threshold of 0.1 means the autoscaler must recommend at least a 2 worker scale-down for the cluster to scale. A threshold of 0 means the autoscaler will scale down on any recommended change.Bounds: 0.0, 1.0. Default: 0.0.\n\n      * `remove_only_idle_workers`: Optional. Remove only idle workers when scaling down cluster\n\n    * `cooldown_period`: Optional. Duration between scaling events. A scaling period starts after the update operation from the previous event has completed.Bounds: 2m, 1d. Default: 2m.\n\n  * `worker_config`: Configuration for the size bounds of an instance group, including its proportional size to other groups.\n\n    * `min_instances`: Optional. Minimum number of instances for this group.Primary workers - Bounds: 2, max_instances. Default: 2. Secondary workers - Bounds: 0, max_instances. Default: 0.\n\n    * `max_instances`: Required. Maximum number of instances for this group. Required for primary workers. Note that by default, clusters will not use secondary workers. Required for secondary workers if the minimum secondary instances is set.Primary workers - Bounds: [min_instances, ). Secondary workers - Bounds: [min_instances, ). Default: 0.\n\n    * `weight`: Optional. Weight for the instance group, which is used to determine the fraction of total workers in the cluster from this instance group. For example, if primary workers have weight 2, and secondary workers have weight 1, the cluster will have approximately 2 primary workers for each secondary worker.The cluster may not reach the specified balance if constrained by min/max bounds or other autoscaling settings. For example, if max_instances for secondary workers is 0, then only primary workers will be added. The cluster can also be out of balance when created.If weight is not set on any instance group, the cluster will default to equal weight for all groups: the cluster will attempt to maintain an equal number of workers in each group within the configured size bounds for each group. If weight is set for one group only, the cluster will default to zero weight on the unset group. For example if weight is set only on primary workers, the cluster will use primary workers only and no secondary workers.\n\n  * `secondary_worker_config`: Configuration for the size bounds of an instance group, including its proportional size to other groups.\n\n    * `min_instances`: Optional. Minimum number of instances for this group.Primary workers - Bounds: 2, max_instances. Default: 2. Secondary workers - Bounds: 0, max_instances. Default: 0.\n\n    * `max_instances`: Required. Maximum number of instances for this group. Required for primary workers. Note that by default, clusters will not use secondary workers. Required for secondary workers if the minimum secondary instances is set.Primary workers - Bounds: [min_instances, ). Secondary workers - Bounds: [min_instances, ). Default: 0.\n\n    * `weight`: Optional. Weight for the instance group, which is used to determine the fraction of total workers in the cluster from this instance group. For example, if primary workers have weight 2, and secondary workers have weight 1, the cluster will have approximately 2 primary workers for each secondary worker.The cluster may not reach the specified balance if constrained by min/max bounds or other autoscaling settings. For example, if max_instances for secondary workers is 0, then only primary workers will be added. The cluster can also be out of balance when created.If weight is not set on any instance group, the cluster will default to equal weight for all groups: the cluster will attempt to maintain an equal number of workers in each group within the configured size bounds for each group. If weight is set for one group only, the cluster will default to zero weight on the unset group. For example if weight is set only on primary workers, the cluster will use primary workers only and no secondary workers.\n\n  * `labels`: Optional. The labels to associate with this autoscaling policy. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with an autoscaling policy.\n\n    * `additional_properties`:\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_batch.md",
    "content": "+++\ntitle = \"google_dataproc_batch resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_batch\"\nidentifier = \"inspec/resources/gcp/google_dataproc_batch resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_batch` InSpec audit resource to test the properties of a Google Cloud Batch resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_batch(name: 'projects/*/locations/*/batches/value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('uuid') { should cmp 'value_uuid' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('state') { should cmp 'value_state' }\n\tits('state_message') { should cmp 'value_statemessage' }\n\tits('state_time') { should cmp 'value_statetime' }\n\tits('creator') { should cmp 'value_creator' }\n\tits('operation') { should cmp 'value_operation' }\nend\n\ndescribe google_dataproc_batch(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_batch` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_batch` resource:\n\n\n  * `name`: Output only. The resource name of the batch.\n\n  * `uuid`: Output only. A batch UUID (Unique Universal Identifier). The service generates this value when it creates the batch.\n\n  * `create_time`: Output only. The time when the batch was created.\n\n  * `pyspark_batch`: A configuration for running an Apache PySpark (https://spark.apache.org/docs/latest/api/python/getting_started/quickstart.html) batch workload.\n\n    * `main_python_file_uri`: Required. The HCFS URI of the main Python file to use as the Spark driver. Must be a .py file.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments that can be set as batch properties, such as --conf, since a collision can occur that causes an incorrect batch submission.\n\n    * `python_file_uris`: Optional. HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the classpath of the Spark driver and tasks.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n  * `spark_batch`: A configuration for running an Apache Spark (https://spark.apache.org/) batch workload.\n\n    * `main_jar_file_uri`: Optional. The HCFS URI of the jar file that contains the main class.\n\n    * `main_class`: Optional. The name of the driver main class. The jar file that contains the class must be in the classpath or specified in jar_file_uris.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments that can be set as batch properties, such as --conf, since a collision can occur that causes an incorrect batch submission.\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the classpath of the Spark driver and tasks.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n  * `spark_r_batch`: A configuration for running an Apache SparkR (https://spark.apache.org/docs/latest/sparkr.html) batch workload.\n\n    * `main_r_file_uri`: Required. The HCFS URI of the main R file to use as the driver. Must be a .R or .r file.\n\n    * `args`: Optional. The arguments to pass to the Spark driver. Do not include arguments that can be set as batch properties, such as --conf, since a collision can occur that causes an incorrect batch submission.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n  * `spark_sql_batch`: A configuration for running Apache Spark SQL (https://spark.apache.org/sql/) queries as a batch workload.\n\n    * `query_file_uri`: Required. The HCFS URI of the script that contains Spark SQL queries to execute.\n\n    * `query_variables`: Optional. Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).\n\n      * `additional_properties`:\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH.\n\n  * `runtime_info`: Runtime information about workload execution.\n\n    * `endpoints`: Output only. Map of remote access endpoints (such as web interfaces and APIs) to their URIs.\n\n      * `additional_properties`:\n\n    * `output_uri`: Output only. A URI pointing to the location of the stdout and stderr of the workload.\n\n    * `diagnostic_output_uri`: Output only. A URI pointing to the location of the diagnostics tarball.\n\n    * `approximate_usage`: Usage metrics represent approximate total resources consumed by a workload.\n\n      * `milli_dcu_seconds`: Optional. DCU (Dataproc Compute Units) usage in (milliDCU x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb_seconds`: Optional. Shuffle storage usage in (GB x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `milli_accelerator_seconds`: Optional. Accelerator usage in (milliAccelerator x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `accelerator_type`: Optional. Accelerator type being used, if any\n\n    * `current_usage`: The usage snapshot represents the resources consumed by a workload at a specified time.\n\n      * `milli_dcu`: Optional. Milli (one-thousandth) Dataproc Compute Units (DCUs) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb`: Optional. Shuffle Storage in gigabytes (GB). (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `milli_dcu_premium`: Optional. Milli (one-thousandth) Dataproc Compute Units (DCUs) charged at premium tier (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb_premium`: Optional. Shuffle Storage in gigabytes (GB) charged at premium tier. (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `milli_accelerator`: Optional. Milli (one-thousandth) accelerator. (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `accelerator_type`: Optional. Accelerator type being used, if any\n\n      * `snapshot_time`: Optional. The timestamp of the usage snapshot.\n\n  * `state`: Output only. The state of the batch.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * PENDING\n    * RUNNING\n    * CANCELLING\n    * CANCELLED\n    * SUCCEEDED\n    * FAILED\n\n  * `state_message`: Output only. Batch state details, such as a failure description if the state is FAILED.\n\n  * `state_time`: Output only. The time when the batch entered a current state.\n\n  * `creator`: Output only. The email address of the user who created the batch.\n\n  * `labels`: Optional. The labels to associate with this batch. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a batch.\n\n    * `additional_properties`:\n\n  * `runtime_config`: Runtime configuration for a workload.\n\n    * `version`: Optional. Version of the batch runtime.\n\n    * `container_image`: Optional. Optional custom container image for the job runtime environment. If not specified, a default container image will be used.\n\n    * `properties`: Optional. A mapping of property names to values, which are used to configure workload execution.\n\n      * `additional_properties`:\n\n    * `repository_config`: Configuration for dependency repositories\n\n      * `pypi_repository_config`: Configuration for PyPi repository\n\n        * `pypi_repository`: Optional. PyPi repository address\n\n  * `environment_config`: Environment configuration for a workload.\n\n    * `execution_config`: Execution configuration for a workload.\n\n      * `service_account`: Optional. Service account that used to execute workload.\n\n      * `network_uri`: Optional. Network URI to connect workload to.\n\n      * `subnetwork_uri`: Optional. Subnetwork URI to connect workload to.\n\n      * `network_tags`: Optional. Tags used for network traffic control.\n\n      * `kms_key`: Optional. The Cloud KMS key to use for encryption.\n\n      * `idle_ttl`: Optional. Applies to sessions only. The duration to keep the session alive while it's idling. Exceeding this threshold causes the session to terminate. This field cannot be set on a batch workload. Minimum value is 10 minutes; maximum value is 14 days (see JSON representation of Duration (https://developers.google.com/protocol-buffers/docs/proto3#json)). Defaults to 1 hour if not set. If both ttl and idle_ttl are specified for an interactive session, the conditions are treated as OR conditions: the workload will be terminated when it has been idle for idle_ttl or when ttl has been exceeded, whichever occurs first.\n\n      * `ttl`: Optional. The duration after which the workload will be terminated, specified as the JSON representation for Duration (https://protobuf.dev/programming-guides/proto3/#json). When the workload exceeds this duration, it will be unconditionally terminated without waiting for ongoing work to finish. If ttl is not specified for a batch workload, the workload will be allowed to run until it exits naturally (or run forever without exiting). If ttl is not specified for an interactive session, it defaults to 24 hours. If ttl is not specified for a batch that uses 2.1+ runtime version, it defaults to 4 hours. Minimum value is 10 minutes; maximum value is 14 days. If both ttl and idle_ttl are specified (for an interactive session), the conditions are treated as OR conditions: the workload will be terminated when it has been idle for idle_ttl or when ttl has been exceeded, whichever occurs first.\n\n      * `staging_bucket`: Optional. A Cloud Storage bucket used to stage workload dependencies, config files, and store workload output and other ephemeral data, such as Spark history files. If you do not specify a staging bucket, Cloud Dataproc will determine a Cloud Storage location according to the region where your workload is running, and then create and manage project-level, per-location staging and temporary buckets. This field requires a Cloud Storage bucket name, not a gs://... URI to a Cloud Storage bucket.\n\n    * `peripherals_config`: Auxiliary services configuration for a workload.\n\n      * `metastore_service`: Optional. Resource name of an existing Dataproc Metastore service.Example: projects/[project_id]/locations/[region]/services/[service_id]\n\n      * `spark_history_server_config`: Spark History Server configuration for the workload.\n\n        * `dataproc_cluster`: Optional. Resource name of an existing Dataproc Cluster to act as a Spark History Server for the workload.Example: projects/[project_id]/regions/[region]/clusters/[cluster_name]\n\n  * `operation`: Output only. The resource name of the operation associated with this batch.\n\n  * `state_history`: Output only. Historical state information for the batch.\n\n    * `state`: Output only. The state of the batch at this point in history.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * PENDING\n      * RUNNING\n      * CANCELLING\n      * CANCELLED\n      * SUCCEEDED\n      * FAILED\n\n    * `state_message`: Output only. Details about the state at this point in history.\n\n    * `state_start_time`: Output only. The time when the batch entered the historical state.\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_batches.md",
    "content": "+++\ntitle = \"google_dataproc_batches resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_batches\"\nidentifier = \"inspec/resources/gcp/google_dataproc_batches resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_batches` InSpec audit resource to test the properties of a Google Cloud Batch resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_batches(parent: 'projects/*/locations/*') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('uuids') { should include 'value_uuid' }\n    its('create_times') { should include 'value_createtime' }\n    its('states') { should include 'value_state' }\n    its('state_messages') { should include 'value_statemessage' }\n    its('state_times') { should include 'value_statetime' }\n    its('creators') { should include 'value_creator' }\n    its('operations') { should include 'value_operation' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_batches` resource:\n\nSee [google_dataproc_batch](google_dataproc_batch) for more detailed information.\n\n* `names`: an array of `google_dataproc_batch` name\n* `uuids`: an array of `google_dataproc_batch` uuid\n* `create_times`: an array of `google_dataproc_batch` create_time\n* `pyspark_batches`: an array of `google_dataproc_batch` pyspark_batch\n* `spark_batches`: an array of `google_dataproc_batch` spark_batch\n* `spark_r_batches`: an array of `google_dataproc_batch` spark_r_batch\n* `spark_sql_batches`: an array of `google_dataproc_batch` spark_sql_batch\n* `runtime_infos`: an array of `google_dataproc_batch` runtime_info\n* `states`: an array of `google_dataproc_batch` state\n* `state_messages`: an array of `google_dataproc_batch` state_message\n* `state_times`: an array of `google_dataproc_batch` state_time\n* `creators`: an array of `google_dataproc_batch` creator\n* `labels`: an array of `google_dataproc_batch` labels\n* `runtime_configs`: an array of `google_dataproc_batch` runtime_config\n* `environment_configs`: an array of `google_dataproc_batch` environment_config\n* `operations`: an array of `google_dataproc_batch` operation\n* `state_histories`: an array of `google_dataproc_batch` state_history\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_batches` resource:\n\nSee [google_dataproc_batch](google_dataproc_batch) for more detailed information.\n\n* `names`: an array of `google_dataproc_batch` name\n* `uuids`: an array of `google_dataproc_batch` uuid\n* `create_times`: an array of `google_dataproc_batch` create_time\n* `pyspark_batches`: an array of `google_dataproc_batch` pyspark_batch\n* `spark_batches`: an array of `google_dataproc_batch` spark_batch\n* `spark_r_batches`: an array of `google_dataproc_batch` spark_r_batch\n* `spark_sql_batches`: an array of `google_dataproc_batch` spark_sql_batch\n* `runtime_infos`: an array of `google_dataproc_batch` runtime_info\n* `states`: an array of `google_dataproc_batch` state\n* `state_messages`: an array of `google_dataproc_batch` state_message\n* `state_times`: an array of `google_dataproc_batch` state_time\n* `creators`: an array of `google_dataproc_batch` creator\n* `labels`: an array of `google_dataproc_batch` labels\n* `runtime_configs`: an array of `google_dataproc_batch` runtime_config\n* `environment_configs`: an array of `google_dataproc_batch` environment_config\n* `operations`: an array of `google_dataproc_batch` operation\n* `state_histories`: an array of `google_dataproc_batch` state_history\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_cluster.md",
    "content": "+++\ntitle = \"google_dataproc_cluster resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_cluster\"\nidentifier = \"inspec/resources/gcp/google_dataproc_cluster resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dataproc_cluster` is used to test a Google Cluster resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_cluster(project: 'chef-gcp-inspec', region: 'europe-west2', cluster_name: 'inspec-dataproc-cluster') do\n  it { should exist }\n  its('labels') { should include('label' => 'value') }\n  its('config.master_config.num_instances') { should cmp '1' }\n  its('config.worker_config.num_instances') { should cmp '2' }\n  its('config.master_config.machine_type_uri') { should match 'n1-standard-1' }\n  its('config.worker_config.machine_type_uri') { should match 'n1-standard-1' }\n  its('config.software_config.properties') { should include('dataproc:dataproc.allow.zero.workers' => 'true') }\nend\n\ndescribe google_dataproc_cluster(project: 'chef-gcp-inspec', region: 'europe-west2', cluster_name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_cluster` resource:\n\n\n  * `cluster_name`: The name of the cluster, unique within the project and region.\n\n  * `labels`: Labels to apply to this cluster.  A list of key->value pairs.\n\n  * `config`: Configuration for the cluster\n\n    * `config_bucket`: The Cloud Storage staging bucket used to stage files, such as Hadoop jars, between client machines and the cluster.\n\n    * `gce_cluster_config`: Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.\n\n      * `zone_uri`: The zone where the Compute Engine cluster will be located\n\n      * `network_uri`: The Compute Engine network to be used for machine communications\n\n      * `subnetwork_uri`: The Compute Engine subnetwork to be used for machine communications\n\n      * `internal_ip_only`: If true, all instances int he cluster will only have internal IP addresses\n\n      * `service_account_scopes`: The URIs of service account scopes to be included in Compute Engine instances The following base set of scopes is always included:  https://www.googleapis.com/auth/cloud.useraccounts.readonly  https://www.googleapis.com/auth/devstorage.read_write  https://www.googleapis.com/auth/logging.write\n\n      * `tags`: The Compute Engine tags to add to all instances\n\n      * `metadata`: The map of metadata entries to add to all instances\n\n    * `master_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n      * `num_instances`: The number of VM instances in the instance group. For master instance groups, must be set to 1.\n\n      * `instance_names`: The list of instance names.\n\n      * `image_uri`: The Compute Engine image resource used for cluster instances.\n\n      * `machine_type_uri`: The Compute Engine machine type used for cluster instances\n\n      * `disk_config`: Disk option config settings\n\n        * `boot_disk_type`: Type of the boot disk. Valid values are \"pd-ssd\" or \"pd-standard\"\n\n        * `boot_disk_size_gb`: Size in GB of the boot disk.\n\n        * `num_local_ssds`: Number of attached SSDs, from 0 to 4.\n\n      * `is_preemptible`: Specifies if this instance group contains preemptible instances.\n\n      * `managed_group_config`: The config for Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups.\n\n        * `instance_template_name`: The name of the Instance Template used for the Managed Instance Group.\n\n        * `instance_group_manager_name`: The name of the Instance Group Manager for this group\n\n    * `worker_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n      * `num_instances`: The number of VM instances in the instance group. For master instance groups, must be set to 1.\n\n      * `instance_names`: The list of instance names.\n\n      * `image_uri`: The Compute Engine image resource used for cluster instances.\n\n      * `machine_type_uri`: The Compute Engine machine type used for cluster instances\n\n      * `disk_config`: Disk option config settings\n\n        * `boot_disk_type`: Type of the boot disk. Valid values are \"pd-ssd\" or \"pd-standard\"\n\n        * `boot_disk_size_gb`: Size in GB of the boot disk.\n\n        * `num_local_ssds`: Number of attached SSDs, from 0 to 4.\n\n      * `is_preemptible`: Specifies if this instance group contains preemptible instances.\n\n      * `managed_group_config`: The config for Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups.\n\n        * `instance_template_name`: The name of the Instance Template used for the Managed Instance Group.\n\n        * `instance_group_manager_name`: The name of the Instance Group Manager for this group\n\n    * `secondary_worker_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n      * `num_instances`: The number of VM instances in the instance group. For master instance groups, must be set to 1.\n\n      * `instance_names`: The list of instance names.\n\n      * `image_uri`: The Compute Engine image resource used for cluster instances.\n\n      * `machine_type_uri`: The Compute Engine machine type used for cluster instances\n\n      * `disk_config`: Disk option config settings\n\n        * `boot_disk_type`: Type of the boot disk. Valid values are \"pd-ssd\" or \"pd-standard\"\n\n        * `boot_disk_size_gb`: Size in GB of the boot disk.\n\n        * `num_local_ssds`: Number of attached SSDs, from 0 to 4.\n\n      * `is_preemptible`: Specifies if this instance group contains preemptible instances.\n\n      * `managed_group_config`: The config for Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups.\n\n        * `instance_template_name`: The name of the Instance Template used for the Managed Instance Group.\n\n        * `instance_group_manager_name`: The name of the Instance Group Manager for this group\n\n    * `software_config`: Specifies the selection and config of software inside the cluster\n\n      * `image_version`: The version of software inside the cluster. It must be one of the supported Cloud Dataproc Versions, such as \"1.2\" (including a subminor version, such as \"1.2.29\"), or the \"preview\" version.\n\n      * `properties`: The properties to set on daemon config files. Property keys are specified in the prefix:property format, for example `core:hadoop.tmp.dir`\n\n      * `optional_components`: The set of optional components to activate on the cluster.  Possible values include: COMPONENT_UNSPECIFIED, ANACONDA, HIVE_WEBHCAT, JUPYTER, ZEPPELIN, HBASE, SOLR, and RANGER\n      Possible values:\n        * COMPONENT_UNSPECIFIED\n        * ANACONDA\n        * HBASE\n        * RANGER\n        * SOLR\n        * HIVE_WEBHCAT\n        * JUPYTER\n        * ZEPPELIN\n\n    * `initialization_actions`: Specifies an executable to run on a fully configured node and a timeout period for executable completion.\n\n      * `executable_file`: Cloud Storage URI of the executable file\n\n      * `execution_timeout`: Amount of time executable has to complete\n\n    * `encryption_config`: Encryption settings for the cluster.\n\n      * `gce_pd_kms_key_name`: The Cloud KMS key name to use for PD disk encryption for all instances in the cluster.\n\n    * `security_config`: Kerberos config holder.\n\n      * `kerberos_config`: Kerberos related configuration.\n\n        * `enable_kerberos`: Flag to indicate whether to Kerberize the cluster.\n\n        * `rootprincipal_password_uri`: The cloud Storage URI of a KMS encrypted file containing the root principal password.\n\n        * `kms_key_uri`: The uri of the KMS key used to encrypt various sensitive files.\n\n        * `keystore_uri`: The Cloud Storage URI of the keystore file used for SSL encryption.\n\n        * `truststore_uri`: The Cloud Storage URI of a KMS encrypted file containing the password to the user provided keystore.\n\n        * `key_password_uri`: The Cloud Storage URI of a KMS encrypted file containing the password to the user provided key.\n\n        * `truststore_password_uri`: The Cloud Storage URI of a KMS encrypted file containing the password to the user provided truststore.\n\n        * `cross_realm_trust_realm`: The remote realm the Dataproc on-cluster KDC will trust, should the user enable cross realm trust.\n\n        * `cross_realm_trust_admin_server`: The admin server (IP or hostname) for the remote trusted realm in a cross realm trust relationship.\n\n        * `cross_realm_trust_shared_password_uri`: The Cloud Storage URI of a KMS encrypted file containing the shared password between the on-cluster Kerberos realm and the remote trusted realm, in a cross realm trust relationship.\n\n        * `kdc_db_key_uri`: The Cloud Storage URI of a KMS encrypted file containing the master key of the KDC database.\n\n        * `tgt_lifetime_hours`: The lifetime of the ticket granting ticket, in hours.\n\n        * `realm`: The name of the on-cluster Kerberos realm.\n\n  * `region`: The region in which the cluster and associated nodes will be created in.\n\n  * `project_id`: The Google Cloud Platform project ID that the cluster belongs to.\n\n  * `virtual_cluster_config`: Optional. The virtual cluster config is used when creating a Dataproc cluster that does not directly control the underlying compute resources, for example, when creating a Dataproc-on-GKE cluster (https://cloud.google.com/dataproc/docs/guides/dpgke/dataproc-gke-overview). Dataproc may set default values, and values may change when clusters are updated. Exactly one of config or virtual_cluster_config must be specified.\n\n  * `status`: Output only. Cluster status.\n\n  * `status_history`: Output only. The previous cluster status.\n\n  * `cluster_uuid`: Output only. A cluster UUID (Unique Universal Identifier). Dataproc generates this value when it creates the cluster.\n\n  * `metrics`: Output only. Contains cluster daemon metrics such as HDFS and YARN stats.Beta Feature: This report is available for testing purposes only. It may be changed before final release.\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_clusters.md",
    "content": "+++\ntitle = \"google_dataproc_clusters resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_clusters\"\nidentifier = \"inspec/resources/gcp/google_dataproc_clusters resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dataproc_clusters` is used to test a Google Cluster resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_clusters(project: 'chef-gcp-inspec', region: 'europe-west2') do\n  its('count') { should be >= 1 }\n  its('cluster_names') { should include 'inspec-dataproc-cluster' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_clusters` resource:\n\nSee [google_dataproc_cluster](google_dataproc_cluster) for more detailed information.\n\n  * `cluster_names`: an array of `google_dataproc_cluster` cluster_name\n  * `labels`: an array of `google_dataproc_cluster` labels\n  * `configs`: an array of `google_dataproc_cluster` config\n  * `regions`: an array of `google_dataproc_cluster` region\n  * `project_ids`: an array of `google_dataproc_cluster` project_id\n  * `virtual_cluster_configs`: an array of `google_dataproc_cluster` virtual_cluster_config\n  * `statuses`: an array of `google_dataproc_cluster` status\n  * `status_histories`: an array of `google_dataproc_cluster` status_history\n  * `cluster_uuids`: an array of `google_dataproc_cluster` cluster_uuid\n  * `metrics`: an array of `google_dataproc_cluster` metrics\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_job.md",
    "content": "+++\ntitle = \"google_dataproc_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_job\"\nidentifier = \"inspec/resources/gcp/google_dataproc_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_job` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_job(job_id: 'value_job_id', project_id: 'value_project_id', region: ' value_region') do\n\tit { should exist }\n\tits('driver_output_resource_uri') { should cmp 'value_driveroutputresourceuri' }\n\tits('driver_control_files_uri') { should cmp 'value_drivercontrolfilesuri' }\n\tits('job_uuid') { should cmp 'value_jobuuid' }\nend\n\ndescribe google_dataproc_job(job_id: 'doesnotexist', project_id: 'value_project_id', region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_job` resource:\n\n\n  * `reference`: Encapsulates the full scoping used to reference a job.\n\n    * `project_id`: Optional. The ID of the Google Cloud Platform project that the job belongs to. If specified, must match the request project ID.\n\n    * `job_id`: Optional. The job ID, which must be unique within the project.The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens (-). The maximum length is 100 characters.If not specified by the caller, the job ID will be provided by the server.\n\n  * `placement`: Dataproc job config.\n\n    * `cluster_name`: Required. The name of the cluster where the job will be submitted.\n\n    * `cluster_uuid`: Output only. A cluster UUID generated by the Dataproc service when the job is submitted.\n\n    * `cluster_labels`: Optional. Cluster labels to identify a cluster where the job will be submitted.\n\n      * `additional_properties`:\n\n  * `hadoop_job`: A Dataproc job for running Apache Hadoop MapReduce (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) jobs on Apache Hadoop YARN (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).\n\n    * `main_jar_file_uri`: The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'\n\n    * `main_class`: The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as -libjars or -Dfoo=bar, that can be set as job properties, since a collision might occur that causes an incorrect job submission.\n\n    * `jar_file_uris`: Optional. Jar file URIs to add to the CLASSPATHs of the Hadoop driver and tasks.\n\n    * `file_uris`: Optional. HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.\n\n    * `properties`: Optional. A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `spark_job`: A Dataproc job for running Apache Spark (https://spark.apache.org/) applications on YARN.\n\n    * `main_jar_file_uri`: The HCFS URI of the jar file that contains the main class.\n\n    * `main_class`: The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in SparkJob.jar_file_uris.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n    * `properties`: Optional. A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `pyspark_job`: A Dataproc job for running Apache PySpark (https://spark.apache.org/docs/0.9.0/python-programming-guide.html) applications on YARN.\n\n    * `main_python_file_uri`: Required. The HCFS URI of the main Python file to use as the driver. Must be a .py file.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n    * `python_file_uris`: Optional. HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n    * `properties`: Optional. A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `hive_job`: A Dataproc job for running Apache Hive (https://hive.apache.org/) queries on YARN.\n\n    * `query_file_uri`: The HCFS URI of the script that contains Hive queries.\n\n    * `query_list`: A list of queries to run on a cluster.\n\n      * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n    * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n    * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";).\n\n      * `additional_properties`:\n\n    * `properties`: Optional. A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.\n\n      * `additional_properties`:\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.\n\n  * `pig_job`: A Dataproc job for running Apache Pig (https://pig.apache.org/) queries on YARN.\n\n    * `query_file_uri`: The HCFS URI of the script that contains the Pig queries.\n\n    * `query_list`: A list of queries to run on a cluster.\n\n      * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n    * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n    * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Pig command: name=[value]).\n\n      * `additional_properties`:\n\n    * `properties`: Optional. A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.\n\n      * `additional_properties`:\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `spark_r_job`: A Dataproc job for running Apache SparkR (https://spark.apache.org/docs/latest/sparkr.html) applications on YARN.\n\n    * `main_r_file_uri`: Required. The HCFS URI of the main R file to use as the driver. Must be a .R file.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n    * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n    * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n    * `properties`: Optional. A mapping of property names to values, used to configure SparkR. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `spark_sql_job`: A Dataproc job for running Apache Spark SQL (https://spark.apache.org/sql/) queries.\n\n    * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n    * `query_list`: A list of queries to run on a cluster.\n\n      * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n    * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).\n\n      * `additional_properties`:\n\n    * `properties`: Optional. A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Dataproc API might be overwritten.\n\n      * `additional_properties`:\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH.\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `presto_job`: A Dataproc job for running Presto (https://prestosql.io/) queries. IMPORTANT: The Dataproc Presto Optional Component (https://cloud.google.com/dataproc/docs/concepts/components/presto) must be enabled when the cluster is created to submit a Presto job to the cluster.\n\n    * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n    * `query_list`: A list of queries to run on a cluster.\n\n      * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n    * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n    * `output_format`: Optional. The format in which query output will be displayed. See the Presto documentation for supported output formats\n\n    * `client_tags`: Optional. Presto client tags to attach to this query\n\n    * `properties`: Optional. A mapping of property names to values. Used to set Presto session properties (https://prestodb.io/docs/current/sql/set-session.html) Equivalent to using the --session flag in the Presto CLI\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `trino_job`: A Dataproc job for running Trino (https://trino.io/) queries. IMPORTANT: The Dataproc Trino Optional Component (https://cloud.google.com/dataproc/docs/concepts/components/trino) must be enabled when the cluster is created to submit a Trino job to the cluster.\n\n    * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n    * `query_list`: A list of queries to run on a cluster.\n\n      * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n    * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n    * `output_format`: Optional. The format in which query output will be displayed. See the Trino documentation for supported output formats\n\n    * `client_tags`: Optional. Trino client tags to attach to this query\n\n    * `properties`: Optional. A mapping of property names to values. Used to set Trino session properties (https://trino.io/docs/current/sql/set-session.html) Equivalent to using the --session flag in the Trino CLI\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `flink_job`: A Dataproc job for running Apache Flink applications on YARN.\n\n    * `main_jar_file_uri`: The HCFS URI of the jar file that contains the main class.\n\n    * `main_class`: The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in jarFileUris.\n\n    * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision might occur that causes an incorrect job submission.\n\n    * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Flink driver and tasks.\n\n    * `savepoint_uri`: Optional. HCFS URI of the savepoint, which contains the last saved progress for starting the current job.\n\n    * `properties`: Optional. A mapping of property names to values, used to configure Flink. Properties that conflict with values set by the Dataproc API might beoverwritten. Can include properties set in/etc/flink/conf/flink-defaults.conf and classes in user code.\n\n      * `additional_properties`:\n\n    * `logging_config`: The runtime logging config of the job.\n\n      * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n        * `additional_properties`:\n\n  * `status`: Dataproc job status.\n\n    * `state`: Output only. A state message specifying the overall job state.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * PENDING\n      * SETUP_DONE\n      * RUNNING\n      * CANCEL_PENDING\n      * CANCEL_STARTED\n      * CANCELLED\n      * DONE\n      * ERROR\n      * ATTEMPT_FAILURE\n\n    * `details`: Optional. Output only. Job state details, such as an error description if the state is ERROR.\n\n    * `state_start_time`: Output only. The time when this state was entered.\n\n    * `substate`: Output only. Additional state information, which includes status reported by the agent.\n    Possible values:\n      * UNSPECIFIED\n      * SUBMITTED\n      * QUEUED\n      * STALE_STATUS\n\n  * `status_history`: Output only. The previous job status.\n\n    * `state`: Output only. A state message specifying the overall job state.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * PENDING\n      * SETUP_DONE\n      * RUNNING\n      * CANCEL_PENDING\n      * CANCEL_STARTED\n      * CANCELLED\n      * DONE\n      * ERROR\n      * ATTEMPT_FAILURE\n\n    * `details`: Optional. Output only. Job state details, such as an error description if the state is ERROR.\n\n    * `state_start_time`: Output only. The time when this state was entered.\n\n    * `substate`: Output only. Additional state information, which includes status reported by the agent.\n    Possible values:\n      * UNSPECIFIED\n      * SUBMITTED\n      * QUEUED\n      * STALE_STATUS\n\n  * `yarn_applications`: Output only. The collection of YARN applications spun up by this job.Beta Feature: This report is available for testing purposes only. It might be changed before final release.\n\n    * `name`: Required. The application name.\n\n    * `state`: Required. The application state.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * NEW\n      * NEW_SAVING\n      * SUBMITTED\n      * ACCEPTED\n      * RUNNING\n      * FINISHED\n      * FAILED\n      * KILLED\n\n    * `progress`: Required. The numerical progress of the application, from 1 to 100.\n\n    * `tracking_url`: Optional. The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.\n\n  * `driver_output_resource_uri`: Output only. A URI pointing to the location of the stdout of the job's driver program.\n\n  * `driver_control_files_uri`: Output only. If present, the location of miscellaneous control files which can be used as part of job setup and handling. If not present, control files might be placed in the same location as driver_output_uri.\n\n  * `labels`: Optional. The labels to associate with this job. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values can be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a job.\n\n    * `additional_properties`:\n\n  * `scheduling`: Job scheduling options.\n\n    * `max_failures_per_hour`: Optional. Maximum number of times per hour a driver can be restarted as a result of driver exiting with non-zero code before job is reported failed.A job might be reported as thrashing if the driver exits with a non-zero code four times within a 10-minute window.Maximum value is 10.Note: This restartable job option is not supported in Dataproc workflow templates (https://cloud.google.com/dataproc/docs/concepts/workflows/using-workflows#adding_jobs_to_a_template).\n\n    * `max_failures_total`: Optional. Maximum total number of times a driver can be restarted as a result of the driver exiting with a non-zero code. After the maximum number is reached, the job will be reported as failed.Maximum value is 240.Note: Currently, this restartable job option is not supported in Dataproc workflow templates (https://cloud.google.com/dataproc/docs/concepts/workflows/using-workflows#adding_jobs_to_a_template).\n\n  * `job_uuid`: Output only. A UUID that uniquely identifies a job within the project over time. This is in contrast to a user-settable reference.job_id that might be reused over time.\n\n  * `done`: Output only. Indicates whether the job is completed. If the value is false, the job is still in progress. If true, the job is completed, and status.state field will indicate if it was successful, failed, or cancelled.\n\n  * `driver_scheduling_config`: Driver scheduling configuration.\n\n    * `memory_mb`: Required. The amount of memory in MB the driver is requesting.\n\n    * `vcores`: Required. The number of vCPUs the driver is requesting.\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_jobs.md",
    "content": "+++\ntitle = \"google_dataproc_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_jobs\"\nidentifier = \"inspec/resources/gcp/google_dataproc_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_jobs` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_jobs(project_id: 'value_project_id', region: 'value_region') do\n    it { should exist }\n    its('driver_output_resource_uris') { should include 'value_driveroutputresourceuri' }\n    its('driver_control_files_uris') { should include 'value_drivercontrolfilesuri' }\n    its('job_uuids') { should include 'value_jobuuid' }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_jobs` resource:\n\nSee [google_dataproc_job](google_dataproc_job) for more detailed information.\n\n* `references`: an array of `google_dataproc_job` reference\n* `placements`: an array of `google_dataproc_job` placement\n* `hadoop_jobs`: an array of `google_dataproc_job` hadoop_job\n* `spark_jobs`: an array of `google_dataproc_job` spark_job\n* `pyspark_jobs`: an array of `google_dataproc_job` pyspark_job\n* `hive_jobs`: an array of `google_dataproc_job` hive_job\n* `pig_jobs`: an array of `google_dataproc_job` pig_job\n* `spark_r_jobs`: an array of `google_dataproc_job` spark_r_job\n* `spark_sql_jobs`: an array of `google_dataproc_job` spark_sql_job\n* `presto_jobs`: an array of `google_dataproc_job` presto_job\n* `trino_jobs`: an array of `google_dataproc_job` trino_job\n* `flink_jobs`: an array of `google_dataproc_job` flink_job\n* `statuses`: an array of `google_dataproc_job` status\n* `status_histories`: an array of `google_dataproc_job` status_history\n* `yarn_applications`: an array of `google_dataproc_job` yarn_applications\n* `driver_output_resource_uris`: an array of `google_dataproc_job` driver_output_resource_uri\n* `driver_control_files_uris`: an array of `google_dataproc_job` driver_control_files_uri\n* `labels`: an array of `google_dataproc_job` labels\n* `schedulings`: an array of `google_dataproc_job` scheduling\n* `job_uuids`: an array of `google_dataproc_job` job_uuid\n* `dones`: an array of `google_dataproc_job` done\n* `driver_scheduling_configs`: an array of `google_dataproc_job` driver_scheduling_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_federation.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_federation resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_federation\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_federation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_federation` InSpec audit resource to test the properties of a Google Cloud Federation resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_metastore_federation(name: 'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('version') { should cmp 'value_version' }\n\tits('endpoint_uri') { should cmp 'value_endpointuri' }\n\tits('state') { should cmp 'value_state' }\n\tits('state_message') { should cmp 'value_statemessage' }\n\tits('uid') { should cmp 'value_uid' }\nend\n\ndescribe google_dataproc_metastore_federation(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_federation` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_federation` resource:\n\n\n  * `name`: Immutable. The relative resource name of the federation, of the form: projects/{project_number}/locations/{location_id}/federations/{federation_id}`.\n\n  * `create_time`: Output only. The time when the metastore federation was created.\n\n  * `update_time`: Output only. The time when the metastore federation was last updated.\n\n  * `labels`: User-defined labels for the metastore federation.\n\n    * `additional_properties`:\n\n  * `version`: Immutable. The Apache Hive metastore version of the federation. All backend metastore versions must be compatible with the federation version.\n\n  * `backend_metastores`: A map from BackendMetastore rank to BackendMetastores from which the federation service serves metadata at query time. The map key represents the order in which BackendMetastores should be evaluated to resolve database names at query time and should be greater than or equal to zero. A BackendMetastore with a lower number will be evaluated before a BackendMetastore with a higher number.\n\n    * `additional_properties`: Represents a backend metastore for the federation.\n\n  * `endpoint_uri`: Output only. The federation endpoint.\n\n  * `state`: Output only. The current state of the federation.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * UPDATING\n    * DELETING\n    * ERROR\n\n  * `state_message`: Output only. Additional information about the current state of the metastore federation, if available.\n\n  * `uid`: Output only. The globally unique resource identifier of the metastore federation.\n\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_federations.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_federations resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_federations\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_federations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_federations` InSpec audit resource to test the properties of a Google Cloud Federation resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_metastore_federations(parent: 'value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('create_times') { should include 'value_createtime' }\n    its('update_times') { should include 'value_updatetime' }\n    its('versions') { should include 'value_version' }\n    its('endpoint_uris') { should include 'value_endpointuri' }\n    its('states') { should include 'value_state' }\n    its('state_messages') { should include 'value_statemessage' }\n    its('uids') { should include 'value_uid' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_federations` resource:\n\nSee [google_dataproc_metastore_federation](google_dataproc_metastore_federation) for more detailed information.\n\n* `names`: an array of `google_dataproc_metastore_federation` name\n* `create_times`: an array of `google_dataproc_metastore_federation` create_time\n* `update_times`: an array of `google_dataproc_metastore_federation` update_time\n* `labels`: an array of `google_dataproc_metastore_federation` labels\n* `versions`: an array of `google_dataproc_metastore_federation` version\n* `backend_metastores`: an array of `google_dataproc_metastore_federation` backend_metastores\n* `endpoint_uris`: an array of `google_dataproc_metastore_federation` endpoint_uri\n* `states`: an array of `google_dataproc_metastore_federation` state\n* `state_messages`: an array of `google_dataproc_metastore_federation` state_message\n* `uids`: an array of `google_dataproc_metastore_federation` uid\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_federations` resource:\n\nSee [google_dataproc_metastore_federation](google_dataproc_metastore_federation) for more detailed information.\n\n* `names`: an array of `google_dataproc_metastore_federation` name\n* `create_times`: an array of `google_dataproc_metastore_federation` create_time\n* `update_times`: an array of `google_dataproc_metastore_federation` update_time\n* `labels`: an array of `google_dataproc_metastore_federation` labels\n* `versions`: an array of `google_dataproc_metastore_federation` version\n* `backend_metastores`: an array of `google_dataproc_metastore_federation` backend_metastores\n* `endpoint_uris`: an array of `google_dataproc_metastore_federation` endpoint_uri\n* `states`: an array of `google_dataproc_metastore_federation` state\n* `state_messages`: an array of `google_dataproc_metastore_federation` state_message\n* `uids`: an array of `google_dataproc_metastore_federation` uid\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_service.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_service resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_service\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_service` InSpec audit resource to test the properties of a Google Cloud Service resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_metastore_service(name: 'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('network') { should cmp 'value_network' }\n\tits('endpoint_uri') { should cmp 'value_endpointuri' }\n\tits('state') { should cmp 'value_state' }\n\tits('state_message') { should cmp 'value_statemessage' }\n\tits('artifact_gcs_uri') { should cmp 'value_artifactgcsuri' }\n\tits('tier') { should cmp 'value_tier' }\n\tits('uid') { should cmp 'value_uid' }\n\tits('release_channel') { should cmp 'value_releasechannel' }\n\tits('database_type') { should cmp 'value_databasetype' }\nend\n\ndescribe google_dataproc_metastore_service(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_service` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_service` resource:\n\n\n  * `hive_metastore_config`: Specifies configuration information specific to running Hive metastore software as the metastore service.\n\n    * `version`: Immutable. The Hive metastore schema version.\n\n    * `config_overrides`: A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in hive-site.xml). The mappings override system defaults (some keys cannot be overridden). These overrides are also applied to auxiliary versions and can be further customized in the auxiliary version's AuxiliaryVersionConfig.\n\n      * `additional_properties`:\n\n    * `kerberos_config`: Configuration information for a Kerberos principal.\n\n      * `keytab`: A securely stored value.\n\n        * `cloud_secret`: The relative resource name of a Secret Manager secret version, in the following form:projects/{project_number}/secrets/{secret_id}/versions/{version_id}.\n\n      * `principal`: A Kerberos principal that exists in the both the keytab the KDC to authenticate as. A typical principal is of the form primary/instance@REALM, but there is no exact format.\n\n      * `krb5_config_gcs_uri`: A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form gs://{bucket_name}/path/to/krb5.conf, although the file does not need to be named krb5.conf explicitly.\n\n    * `endpoint_protocol`: The protocol to use for the metastore service endpoint. If unspecified, defaults to THRIFT.\n    Possible values:\n      * ENDPOINT_PROTOCOL_UNSPECIFIED\n      * THRIFT\n      * GRPC\n\n    * `auxiliary_versions`: A mapping of Hive metastore version to the auxiliary version configuration. When specified, a secondary Hive metastore service is created along with the primary service. All auxiliary versions must be less than the service's primary version. The key is the auxiliary service name and it must match the regular expression a-z?. This means that the first character must be a lowercase letter, and all the following characters must be hyphens, lowercase letters, or digits, except the last character, which cannot be a hyphen.\n\n      * `additional_properties`: Configuration information for the auxiliary service versions.\n\n  * `name`: Immutable. The relative resource name of the metastore service, in the following format:projects/{project_number}/locations/{location_id}/services/{service_id}.\n\n  * `create_time`: Output only. The time when the metastore service was created.\n\n  * `update_time`: Output only. The time when the metastore service was last updated.\n\n  * `labels`: User-defined labels for the metastore service.\n\n    * `additional_properties`:\n\n  * `network`: Immutable. The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:projects/{project_number}/global/networks/{network_id}.\n\n  * `endpoint_uri`: Output only. The URI of the endpoint used to access the metastore service.\n\n  * `port`: The TCP port at which the metastore service is reached. Default: 9083.\n\n  * `state`: Output only. The current state of the metastore service.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * SUSPENDING\n    * SUSPENDED\n    * UPDATING\n    * DELETING\n    * ERROR\n    * MIGRATING\n\n  * `state_message`: Output only. Additional information about the current state of the metastore service, if available.\n\n  * `artifact_gcs_uri`: Output only. A Cloud Storage URI (starting with gs://) that specifies where artifacts related to the metastore service are stored.\n\n  * `tier`: The tier of the service.\n  Possible values:\n    * TIER_UNSPECIFIED\n    * DEVELOPER\n    * ENTERPRISE\n\n  * `metadata_integration`: Specifies how metastore metadata should be integrated with external services.\n\n    * `data_catalog_config`: Specifies how metastore metadata should be integrated with the Data Catalog service.\n\n      * `enabled`: Optional. Defines whether the metastore metadata should be synced to Data Catalog. The default value is to disable syncing metastore metadata to Data Catalog.\n\n    * `dataplex_config`: Specifies how metastore metadata should be integrated with the Dataplex service.\n\n      * `lake_resources`: A reference to the Lake resources that this metastore service is attached to. The key is the lake resource name. Example: projects/{project_number}/locations/{location_id}/lakes/{lake_id}.\n\n        * `additional_properties`: Represents a Lake resource\n\n  * `maintenance_window`: Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service.\n\n    * `hour_of_day`: The hour of day (0-23) when the window starts.\n\n    * `day_of_week`: The day of week, when the window starts.\n    Possible values:\n      * DAY_OF_WEEK_UNSPECIFIED\n      * MONDAY\n      * TUESDAY\n      * WEDNESDAY\n      * THURSDAY\n      * FRIDAY\n      * SATURDAY\n      * SUNDAY\n\n  * `uid`: Output only. The globally unique resource identifier of the metastore service.\n\n  * `metadata_management_activity`: The metadata management activities of the metastore service.\n\n    * `metadata_exports`: Output only. The latest metadata exports of the metastore service.\n\n      * `destination_gcs_uri`: Output only. A Cloud Storage URI of a folder that metadata are exported to, in the form of gs:////, where is automatically generated.\n\n      * `start_time`: Output only. The time when the export started.\n\n      * `end_time`: Output only. The time when the export ended.\n\n      * `state`: Output only. The current state of the export.\n      Possible values:\n        * STATE_UNSPECIFIED\n        * RUNNING\n        * SUCCEEDED\n        * FAILED\n        * CANCELLED\n\n      * `database_dump_type`: Output only. The type of the database dump.\n      Possible values:\n        * TYPE_UNSPECIFIED\n        * MYSQL\n        * AVRO\n\n    * `restores`: Output only. The latest restores of the metastore service.\n\n      * `start_time`: Output only. The time when the restore started.\n\n      * `end_time`: Output only. The time when the restore ended.\n\n      * `state`: Output only. The current state of the restore.\n      Possible values:\n        * STATE_UNSPECIFIED\n        * RUNNING\n        * SUCCEEDED\n        * FAILED\n        * CANCELLED\n\n      * `backup`: Output only. The relative resource name of the metastore service backup to restore from, in the following form:projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}.\n\n      * `type`: Output only. The type of restore.\n      Possible values:\n        * RESTORE_TYPE_UNSPECIFIED\n        * FULL\n        * METADATA_ONLY\n\n      * `details`: Output only. The restore details containing the revision of the service to be restored to, in format of JSON.\n\n      * `backup_location`: Optional. A Cloud Storage URI specifying where the backup artifacts are stored, in the format gs:///.\n\n  * `release_channel`: Immutable. The release channel of the service. If unspecified, defaults to STABLE.\n  Possible values:\n    * RELEASE_CHANNEL_UNSPECIFIED\n    * CANARY\n    * STABLE\n\n  * `encryption_config`: Encryption settings for the service.\n\n    * `kms_key`: The fully qualified customer provided Cloud KMS key name to use for customer data encryption, in the following format:projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}.\n\n  * `network_config`: Network configuration for the Dataproc Metastore service.\n\n    * `consumers`: Immutable. The consumer-side network configuration for the Dataproc Metastore instance.\n\n      * `subnetwork`: Immutable. The subnetwork of the customer project from which an IP address is reserved and used as the Dataproc Metastore service's endpoint. It is accessible to hosts in the subnet and to all hosts in a subnet in the same region and same network. There must be at least one IP address available in the subnet's primary range. The subnet is specified in the following form:projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id}\n\n      * `endpoint_uri`: Output only. The URI of the endpoint used to access the metastore service.\n\n      * `endpoint_location`: Output only. The location of the endpoint URI. Format: projects/{project}/locations/{location}.\n\n    * `custom_routes_enabled`: Enables custom routes to be imported and exported for the Dataproc Metastore service's peered VPC network.\n\n  * `database_type`: Immutable. The database type that the Metastore service stores its data.\n  Possible values:\n    * DATABASE_TYPE_UNSPECIFIED\n    * MYSQL\n    * SPANNER\n\n  * `telemetry_config`: Telemetry Configuration for the Dataproc Metastore service.\n\n    * `log_format`: The output format of the Dataproc Metastore service's logs.\n    Possible values:\n      * LOG_FORMAT_UNSPECIFIED\n      * LEGACY\n      * JSON\n\n  * `scaling_config`: Represents the scaling configuration of a metastore service.\n\n    * `instance_size`: An enum of readable instance sizes, with each instance size mapping to a float value (e.g. InstanceSize.EXTRA_SMALL = scaling_factor(0.1))\n    Possible values:\n      * INSTANCE_SIZE_UNSPECIFIED\n      * EXTRA_SMALL\n      * SMALL\n      * MEDIUM\n      * LARGE\n      * EXTRA_LARGE\n\n    * `scaling_factor`: Scaling factor, increments of 0.1 for values less than 1.0, and increments of 1.0 for values greater than 1.0.\n\n    * `autoscaling_config`: Represents the autoscaling configuration of a metastore service.\n\n      * `autoscaling_factor`: Output only. The scaling factor of a service with autoscaling enabled.\n\n      * `autoscaling_enabled`: Optional. Whether or not autoscaling is enabled for this service.\n\n      * `limit_config`: Represents the autoscaling limit configuration of a metastore service.\n\n        * `max_scaling_factor`: Optional. The highest scaling factor that the service should be autoscaled to.\n\n        * `min_scaling_factor`: Optional. The lowest scaling factor that the service should be autoscaled to.\n\n  * `scheduled_backup`: This specifies the configuration of scheduled backup.\n\n    * `enabled`: Optional. Defines whether the scheduled backup is enabled. The default value is false.\n\n    * `cron_schedule`: Optional. The scheduled interval in Cron format, see https://en.wikipedia.org/wiki/Cron The default is empty: scheduled backup is not enabled. Must be specified to enable scheduled backups.\n\n    * `time_zone`: Optional. Specifies the time zone to be used when interpreting cron_schedule. Must be a time zone name from the time zone database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), e.g. America/Los_Angeles or Africa/Abidjan. If left unspecified, the default is UTC.\n\n    * `next_scheduled_time`: Output only. The time when the next backups execution is scheduled to start.\n\n    * `backup_location`: Optional. A Cloud Storage URI of a folder, in the format gs:///. A sub-folder containing backup files will be stored below it.\n\n    * `latest_backup`: The details of the latest scheduled backup.\n\n      * `backup_id`: Output only. The ID of an in-progress scheduled backup. Empty if no backup is in progress.\n\n      * `start_time`: Output only. The time when the backup was started.\n\n      * `state`: Output only. The current state of the backup.\n      Possible values:\n        * STATE_UNSPECIFIED\n        * IN_PROGRESS\n        * SUCCEEDED\n        * FAILED\n\n      * `duration`: Output only. The duration of the backup completion.\n\n  * `deletion_protection`: Optional. Indicates if the dataproc metastore should be protected against accidental deletions.\n\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_service_backup.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_service_backup resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_service_backup\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_service_backup resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_service_backup` InSpec audit resource to test the properties of a Google Cloud ServiceBackup resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_metastore_service_backup(name: 'value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('state') { should cmp 'value_state' }\n\tits('description') { should cmp 'value_description' }\nend\n\ndescribe google_dataproc_metastore_service_backup(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_service_backup` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_service_backup` resource:\n\n\n  * `name`: Immutable. The relative resource name of the backup, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}\n\n  * `create_time`: Output only. The time when the backup was started.\n\n  * `end_time`: Output only. The time when the backup finished creating.\n\n  * `state`: Output only. The current state of the backup.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * DELETING\n    * ACTIVE\n    * FAILED\n    * RESTORING\n\n  * `service_revision`: A managed metastore service that serves metadata queries.\n\n    * `hive_metastore_config`: Specifies configuration information specific to running Hive metastore software as the metastore service.\n\n      * `version`: Immutable. The Hive metastore schema version.\n\n      * `config_overrides`: A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in hive-site.xml). The mappings override system defaults (some keys cannot be overridden). These overrides are also applied to auxiliary versions and can be further customized in the auxiliary version's AuxiliaryVersionConfig.\n\n        * `additional_properties`:\n\n      * `kerberos_config`: Configuration information for a Kerberos principal.\n\n        * `keytab`: A securely stored value.\n\n          * `cloud_secret`: The relative resource name of a Secret Manager secret version, in the following form:projects/{project_number}/secrets/{secret_id}/versions/{version_id}.\n\n        * `principal`: A Kerberos principal that exists in the both the keytab the KDC to authenticate as. A typical principal is of the form primary/instance@REALM, but there is no exact format.\n\n        * `krb5_config_gcs_uri`: A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form gs://{bucket_name}/path/to/krb5.conf, although the file does not need to be named krb5.conf explicitly.\n\n      * `endpoint_protocol`: The protocol to use for the metastore service endpoint. If unspecified, defaults to THRIFT.\n      Possible values:\n        * ENDPOINT_PROTOCOL_UNSPECIFIED\n        * THRIFT\n        * GRPC\n\n      * `auxiliary_versions`: A mapping of Hive metastore version to the auxiliary version configuration. When specified, a secondary Hive metastore service is created along with the primary service. All auxiliary versions must be less than the service's primary version. The key is the auxiliary service name and it must match the regular expression a-z?. This means that the first character must be a lowercase letter, and all the following characters must be hyphens, lowercase letters, or digits, except the last character, which cannot be a hyphen.\n\n        * `additional_properties`: Configuration information for the auxiliary service versions.\n\n    * `name`: Immutable. The relative resource name of the metastore service, in the following format:projects/{project_number}/locations/{location_id}/services/{service_id}.\n\n    * `create_time`: Output only. The time when the metastore service was created.\n\n    * `update_time`: Output only. The time when the metastore service was last updated.\n\n    * `labels`: User-defined labels for the metastore service.\n\n      * `additional_properties`:\n\n    * `network`: Immutable. The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:projects/{project_number}/global/networks/{network_id}.\n\n    * `endpoint_uri`: Output only. The URI of the endpoint used to access the metastore service.\n\n    * `port`: The TCP port at which the metastore service is reached. Default: 9083.\n\n    * `state`: Output only. The current state of the metastore service.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CREATING\n      * ACTIVE\n      * SUSPENDING\n      * SUSPENDED\n      * UPDATING\n      * DELETING\n      * ERROR\n      * MIGRATING\n\n    * `state_message`: Output only. Additional information about the current state of the metastore service, if available.\n\n    * `artifact_gcs_uri`: Output only. A Cloud Storage URI (starting with gs://) that specifies where artifacts related to the metastore service are stored.\n\n    * `tier`: The tier of the service.\n    Possible values:\n      * TIER_UNSPECIFIED\n      * DEVELOPER\n      * ENTERPRISE\n\n    * `metadata_integration`: Specifies how metastore metadata should be integrated with external services.\n\n      * `data_catalog_config`: Specifies how metastore metadata should be integrated with the Data Catalog service.\n\n        * `enabled`: Optional. Defines whether the metastore metadata should be synced to Data Catalog. The default value is to disable syncing metastore metadata to Data Catalog.\n\n      * `dataplex_config`: Specifies how metastore metadata should be integrated with the Dataplex service.\n\n        * `lake_resources`: A reference to the Lake resources that this metastore service is attached to. The key is the lake resource name. Example: projects/{project_number}/locations/{location_id}/lakes/{lake_id}.\n\n          * `additional_properties`: Represents a Lake resource\n\n    * `maintenance_window`: Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service.\n\n      * `hour_of_day`: The hour of day (0-23) when the window starts.\n\n      * `day_of_week`: The day of week, when the window starts.\n      Possible values:\n        * DAY_OF_WEEK_UNSPECIFIED\n        * MONDAY\n        * TUESDAY\n        * WEDNESDAY\n        * THURSDAY\n        * FRIDAY\n        * SATURDAY\n        * SUNDAY\n\n    * `uid`: Output only. The globally unique resource identifier of the metastore service.\n\n    * `metadata_management_activity`: The metadata management activities of the metastore service.\n\n      * `metadata_exports`: Output only. The latest metadata exports of the metastore service.\n\n        * `destination_gcs_uri`: Output only. A Cloud Storage URI of a folder that metadata are exported to, in the form of gs:////, where is automatically generated.\n\n        * `start_time`: Output only. The time when the export started.\n\n        * `end_time`: Output only. The time when the export ended.\n\n        * `state`: Output only. The current state of the export.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * RUNNING\n          * SUCCEEDED\n          * FAILED\n          * CANCELLED\n\n        * `database_dump_type`: Output only. The type of the database dump.\n        Possible values:\n          * TYPE_UNSPECIFIED\n          * MYSQL\n          * AVRO\n\n      * `restores`: Output only. The latest restores of the metastore service.\n\n        * `start_time`: Output only. The time when the restore started.\n\n        * `end_time`: Output only. The time when the restore ended.\n\n        * `state`: Output only. The current state of the restore.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * RUNNING\n          * SUCCEEDED\n          * FAILED\n          * CANCELLED\n\n        * `backup`: Output only. The relative resource name of the metastore service backup to restore from, in the following form:projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}.\n\n        * `type`: Output only. The type of restore.\n        Possible values:\n          * RESTORE_TYPE_UNSPECIFIED\n          * FULL\n          * METADATA_ONLY\n\n        * `details`: Output only. The restore details containing the revision of the service to be restored to, in format of JSON.\n\n        * `backup_location`: Optional. A Cloud Storage URI specifying where the backup artifacts are stored, in the format gs:///.\n\n    * `release_channel`: Immutable. The release channel of the service. If unspecified, defaults to STABLE.\n    Possible values:\n      * RELEASE_CHANNEL_UNSPECIFIED\n      * CANARY\n      * STABLE\n\n    * `encryption_config`: Encryption settings for the service.\n\n      * `kms_key`: The fully qualified customer provided Cloud KMS key name to use for customer data encryption, in the following format:projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}.\n\n    * `network_config`: Network configuration for the Dataproc Metastore service.\n\n      * `consumers`: Immutable. The consumer-side network configuration for the Dataproc Metastore instance.\n\n        * `subnetwork`: Immutable. The subnetwork of the customer project from which an IP address is reserved and used as the Dataproc Metastore service's endpoint. It is accessible to hosts in the subnet and to all hosts in a subnet in the same region and same network. There must be at least one IP address available in the subnet's primary range. The subnet is specified in the following form:projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id}\n\n        * `endpoint_uri`: Output only. The URI of the endpoint used to access the metastore service.\n\n        * `endpoint_location`: Output only. The location of the endpoint URI. Format: projects/{project}/locations/{location}.\n\n      * `custom_routes_enabled`: Enables custom routes to be imported and exported for the Dataproc Metastore service's peered VPC network.\n\n    * `database_type`: Immutable. The database type that the Metastore service stores its data.\n    Possible values:\n      * DATABASE_TYPE_UNSPECIFIED\n      * MYSQL\n      * SPANNER\n\n    * `telemetry_config`: Telemetry Configuration for the Dataproc Metastore service.\n\n      * `log_format`: The output format of the Dataproc Metastore service's logs.\n      Possible values:\n        * LOG_FORMAT_UNSPECIFIED\n        * LEGACY\n        * JSON\n\n    * `scaling_config`: Represents the scaling configuration of a metastore service.\n\n      * `instance_size`: An enum of readable instance sizes, with each instance size mapping to a float value (e.g. InstanceSize.EXTRA_SMALL = scaling_factor(0.1))\n      Possible values:\n        * INSTANCE_SIZE_UNSPECIFIED\n        * EXTRA_SMALL\n        * SMALL\n        * MEDIUM\n        * LARGE\n        * EXTRA_LARGE\n\n      * `scaling_factor`: Scaling factor, increments of 0.1 for values less than 1.0, and increments of 1.0 for values greater than 1.0.\n\n      * `autoscaling_config`: Represents the autoscaling configuration of a metastore service.\n\n        * `autoscaling_factor`: Output only. The scaling factor of a service with autoscaling enabled.\n\n        * `autoscaling_enabled`: Optional. Whether or not autoscaling is enabled for this service.\n\n        * `limit_config`: Represents the autoscaling limit configuration of a metastore service.\n\n          * `max_scaling_factor`: Optional. The highest scaling factor that the service should be autoscaled to.\n\n          * `min_scaling_factor`: Optional. The lowest scaling factor that the service should be autoscaled to.\n\n    * `scheduled_backup`: This specifies the configuration of scheduled backup.\n\n      * `enabled`: Optional. Defines whether the scheduled backup is enabled. The default value is false.\n\n      * `cron_schedule`: Optional. The scheduled interval in Cron format, see https://en.wikipedia.org/wiki/Cron The default is empty: scheduled backup is not enabled. Must be specified to enable scheduled backups.\n\n      * `time_zone`: Optional. Specifies the time zone to be used when interpreting cron_schedule. Must be a time zone name from the time zone database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), e.g. America/Los_Angeles or Africa/Abidjan. If left unspecified, the default is UTC.\n\n      * `next_scheduled_time`: Output only. The time when the next backups execution is scheduled to start.\n\n      * `backup_location`: Optional. A Cloud Storage URI of a folder, in the format gs:///. A sub-folder containing backup files will be stored below it.\n\n      * `latest_backup`: The details of the latest scheduled backup.\n\n        * `backup_id`: Output only. The ID of an in-progress scheduled backup. Empty if no backup is in progress.\n\n        * `start_time`: Output only. The time when the backup was started.\n\n        * `state`: Output only. The current state of the backup.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * IN_PROGRESS\n          * SUCCEEDED\n          * FAILED\n\n        * `duration`: Output only. The duration of the backup completion.\n\n    * `deletion_protection`: Optional. Indicates if the dataproc metastore should be protected against accidental deletions.\n\n  * `description`: The description of the backup.\n\n  * `restoring_services`: Output only. Services that are restoring from the backup.\n\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_service_backups.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_service_backups resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_service_backups\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_service_backups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_service_backups` InSpec audit resource to test the properties of a Google Cloud ServiceBackup resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_metastore_service_backups(parent: ' value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('create_times') { should include 'value_createtime' }\n    its('end_times') { should include 'value_endtime' }\n    its('states') { should include 'value_state' }\n    its('descriptions') { should include 'value_description' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_service_backups` resource:\n\nSee [google_dataproc_metastore_service_backup](google_dataproc_metastore_service_backup) for more detailed information.\n\n* `names`: an array of `google_dataproc_metastore_service_backup` name\n* `create_times`: an array of `google_dataproc_metastore_service_backup` create_time\n* `end_times`: an array of `google_dataproc_metastore_service_backup` end_time\n* `states`: an array of `google_dataproc_metastore_service_backup` state\n* `service_revisions`: an array of `google_dataproc_metastore_service_backup` service_revision\n* `descriptions`: an array of `google_dataproc_metastore_service_backup` description\n* `restoring_services`: an array of `google_dataproc_metastore_service_backup` restoring_services\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_service_backups` resource:\n\nSee [google_dataproc_metastore_service_backup](google_dataproc_metastore_service_backup) for more detailed information.\n\n* `names`: an array of `google_dataproc_metastore_service_backup` name\n* `create_times`: an array of `google_dataproc_metastore_service_backup` create_time\n* `end_times`: an array of `google_dataproc_metastore_service_backup` end_time\n* `states`: an array of `google_dataproc_metastore_service_backup` state\n* `service_revisions`: an array of `google_dataproc_metastore_service_backup` service_revision\n* `descriptions`: an array of `google_dataproc_metastore_service_backup` description\n* `restoring_services`: an array of `google_dataproc_metastore_service_backup` restoring_services\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_metastore_services.md",
    "content": "+++\ntitle = \"google_dataproc_metastore_services resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_metastore_services\"\nidentifier = \"inspec/resources/gcp/google_dataproc_metastore_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_metastore_services` InSpec audit resource to test the properties of a Google Cloud Service resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_metastore_services(parent: ' value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('create_times') { should include 'value_createtime' }\n    its('update_times') { should include 'value_updatetime' }\n    its('networks') { should include 'value_network' }\n    its('endpoint_uris') { should include 'value_endpointuri' }\n    its('states') { should include 'value_state' }\n    its('state_messages') { should include 'value_statemessage' }\n    its('artifact_gcs_uris') { should include 'value_artifactgcsuri' }\n    its('tiers') { should include 'value_tier' }\n    its('uids') { should include 'value_uid' }\n    its('release_channels') { should include 'value_releasechannel' }\n    its('database_types') { should include 'value_databasetype' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_metastore_services` resource:\n\nSee [google_dataproc_metastore_service](google_dataproc_metastore_service) for more detailed information.\n\n* `hive_metastore_configs`: an array of `google_dataproc_metastore_service` hive_metastore_config\n* `names`: an array of `google_dataproc_metastore_service` name\n* `create_times`: an array of `google_dataproc_metastore_service` create_time\n* `update_times`: an array of `google_dataproc_metastore_service` update_time\n* `labels`: an array of `google_dataproc_metastore_service` labels\n* `networks`: an array of `google_dataproc_metastore_service` network\n* `endpoint_uris`: an array of `google_dataproc_metastore_service` endpoint_uri\n* `ports`: an array of `google_dataproc_metastore_service` port\n* `states`: an array of `google_dataproc_metastore_service` state\n* `state_messages`: an array of `google_dataproc_metastore_service` state_message\n* `artifact_gcs_uris`: an array of `google_dataproc_metastore_service` artifact_gcs_uri\n* `tiers`: an array of `google_dataproc_metastore_service` tier\n* `metadata_integrations`: an array of `google_dataproc_metastore_service` metadata_integration\n* `maintenance_windows`: an array of `google_dataproc_metastore_service` maintenance_window\n* `uids`: an array of `google_dataproc_metastore_service` uid\n* `metadata_management_activities`: an array of `google_dataproc_metastore_service` metadata_management_activity\n* `release_channels`: an array of `google_dataproc_metastore_service` release_channel\n* `encryption_configs`: an array of `google_dataproc_metastore_service` encryption_config\n* `network_configs`: an array of `google_dataproc_metastore_service` network_config\n* `database_types`: an array of `google_dataproc_metastore_service` database_type\n* `telemetry_configs`: an array of `google_dataproc_metastore_service` telemetry_config\n* `scaling_configs`: an array of `google_dataproc_metastore_service` scaling_config\n* `scheduled_backups`: an array of `google_dataproc_metastore_service` scheduled_backup\n* `deletion_protections`: an array of `google_dataproc_metastore_service` deletion_protection\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_metastore_services` resource:\n\nSee [google_dataproc_metastore_service](google_dataproc_metastore_service) for more detailed information.\n\n* `hive_metastore_configs`: an array of `google_dataproc_metastore_service` hive_metastore_config\n* `names`: an array of `google_dataproc_metastore_service` name\n* `create_times`: an array of `google_dataproc_metastore_service` create_time\n* `update_times`: an array of `google_dataproc_metastore_service` update_time\n* `labels`: an array of `google_dataproc_metastore_service` labels\n* `networks`: an array of `google_dataproc_metastore_service` network\n* `endpoint_uris`: an array of `google_dataproc_metastore_service` endpoint_uri\n* `ports`: an array of `google_dataproc_metastore_service` port\n* `states`: an array of `google_dataproc_metastore_service` state\n* `state_messages`: an array of `google_dataproc_metastore_service` state_message\n* `artifact_gcs_uris`: an array of `google_dataproc_metastore_service` artifact_gcs_uri\n* `tiers`: an array of `google_dataproc_metastore_service` tier\n* `metadata_integrations`: an array of `google_dataproc_metastore_service` metadata_integration\n* `maintenance_windows`: an array of `google_dataproc_metastore_service` maintenance_window\n* `uids`: an array of `google_dataproc_metastore_service` uid\n* `metadata_management_activities`: an array of `google_dataproc_metastore_service` metadata_management_activity\n* `release_channels`: an array of `google_dataproc_metastore_service` release_channel\n* `encryption_configs`: an array of `google_dataproc_metastore_service` encryption_config\n* `network_configs`: an array of `google_dataproc_metastore_service` network_config\n* `database_types`: an array of `google_dataproc_metastore_service` database_type\n* `telemetry_configs`: an array of `google_dataproc_metastore_service` telemetry_config\n* `scaling_configs`: an array of `google_dataproc_metastore_service` scaling_config\n* `scheduled_backups`: an array of `google_dataproc_metastore_service` scheduled_backup\n* `deletion_protections`: an array of `google_dataproc_metastore_service` deletion_protection\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Dataproc Metastore API](https://console.cloud.google.com/apis/library/metastore.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_session.md",
    "content": "+++\ntitle = \"google_dataproc_session resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_session\"\nidentifier = \"inspec/resources/gcp/google_dataproc_session resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_session` InSpec audit resource to test the properties of a Google Cloud Session resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_session(name: ' value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('uuid') { should cmp 'value_uuid' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('state') { should cmp 'value_state' }\n\tits('state_message') { should cmp 'value_statemessage' }\n\tits('state_time') { should cmp 'value_statetime' }\n\tits('creator') { should cmp 'value_creator' }\n\tits('user') { should cmp 'value_user' }\n\tits('session_template') { should cmp 'value_sessiontemplate' }\n\nend\n\ndescribe google_dataproc_session(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_session` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_session` resource:\n\n\n  * `name`: Required. The resource name of the session.\n\n  * `uuid`: Output only. A session UUID (Unique Universal Identifier). The service generates this value when it creates the session.\n\n  * `create_time`: Output only. The time when the session was created.\n\n  * `jupyter_session`: Jupyter configuration for an interactive session.\n\n    * `kernel`: Optional. Kernel\n    Possible values:\n      * KERNEL_UNSPECIFIED\n      * PYTHON\n      * SCALA\n\n    * `display_name`: Optional. Display name, shown in the Jupyter kernelspec card.\n\n  * `runtime_info`: Runtime information about workload execution.\n\n    * `endpoints`: Output only. Map of remote access endpoints (such as web interfaces and APIs) to their URIs.\n\n      * `additional_properties`: \n\n    * `output_uri`: Output only. A URI pointing to the location of the stdout and stderr of the workload.\n\n    * `diagnostic_output_uri`: Output only. A URI pointing to the location of the diagnostics tarball.\n\n    * `approximate_usage`: Usage metrics represent approximate total resources consumed by a workload.\n\n      * `milli_dcu_seconds`: Optional. DCU (Dataproc Compute Units) usage in (milliDCU x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb_seconds`: Optional. Shuffle storage usage in (GB x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `milli_accelerator_seconds`: Optional. Accelerator usage in (milliAccelerator x seconds) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `accelerator_type`: Optional. Accelerator type being used, if any\n\n    * `current_usage`: The usage snapshot represents the resources consumed by a workload at a specified time.\n\n      * `milli_dcu`: Optional. Milli (one-thousandth) Dataproc Compute Units (DCUs) (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb`: Optional. Shuffle Storage in gigabytes (GB). (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `milli_dcu_premium`: Optional. Milli (one-thousandth) Dataproc Compute Units (DCUs) charged at premium tier (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing)).\n\n      * `shuffle_storage_gb_premium`: Optional. Shuffle Storage in gigabytes (GB) charged at premium tier. (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `milli_accelerator`: Optional. Milli (one-thousandth) accelerator. (see Dataproc Serverless pricing (https://cloud.google.com/dataproc-serverless/pricing))\n\n      * `accelerator_type`: Optional. Accelerator type being used, if any\n\n      * `snapshot_time`: Optional. The timestamp of the usage snapshot.\n\n  * `state`: Output only. A state of the session.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * CREATING\n    * ACTIVE\n    * TERMINATING\n    * TERMINATED\n    * FAILED\n\n  * `state_message`: Output only. Session state details, such as the failure description if the state is FAILED.\n\n  * `state_time`: Output only. The time when the session entered the current state.\n\n  * `creator`: Output only. The email address of the user who created the session.\n\n  * `labels`: Optional. The labels to associate with the session. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a session.\n\n    * `additional_properties`: \n\n  * `runtime_config`: Runtime configuration for a workload.\n\n    * `version`: Optional. Version of the batch runtime.\n\n    * `container_image`: Optional. Optional custom container image for the job runtime environment. If not specified, a default container image will be used.\n\n    * `properties`: Optional. A mapping of property names to values, which are used to configure workload execution.\n\n      * `additional_properties`: \n\n    * `repository_config`: Configuration for dependency repositories\n\n      * `pypi_repository_config`: Configuration for PyPi repository\n\n        * `pypi_repository`: Optional. PyPi repository address\n\n  * `environment_config`: Environment configuration for a workload.\n\n    * `execution_config`: Execution configuration for a workload.\n\n      * `service_account`: Optional. Service account that used to execute workload.\n\n      * `network_uri`: Optional. Network URI to connect workload to.\n\n      * `subnetwork_uri`: Optional. Subnetwork URI to connect workload to.\n\n      * `network_tags`: Optional. Tags used for network traffic control.\n\n      * `kms_key`: Optional. The Cloud KMS key to use for encryption.\n\n      * `idle_ttl`: Optional. Applies to sessions only. The duration to keep the session alive while it's idling. Exceeding this threshold causes the session to terminate. This field cannot be set on a batch workload. Minimum value is 10 minutes; maximum value is 14 days (see JSON representation of Duration (https://developers.google.com/protocol-buffers/docs/proto3#json)). Defaults to 1 hour if not set. If both ttl and idle_ttl are specified for an interactive session, the conditions are treated as OR conditions: the workload will be terminated when it has been idle for idle_ttl or when ttl has been exceeded, whichever occurs first.\n\n      * `ttl`: Optional. The duration after which the workload will be terminated, specified as the JSON representation for Duration (https://protobuf.dev/programming-guides/proto3/#json). When the workload exceeds this duration, it will be unconditionally terminated without waiting for ongoing work to finish. If ttl is not specified for a batch workload, the workload will be allowed to run until it exits naturally (or run forever without exiting). If ttl is not specified for an interactive session, it defaults to 24 hours. If ttl is not specified for a batch that uses 2.1+ runtime version, it defaults to 4 hours. Minimum value is 10 minutes; maximum value is 14 days. If both ttl and idle_ttl are specified (for an interactive session), the conditions are treated as OR conditions: the workload will be terminated when it has been idle for idle_ttl or when ttl has been exceeded, whichever occurs first.\n\n      * `staging_bucket`: Optional. A Cloud Storage bucket used to stage workload dependencies, config files, and store workload output and other ephemeral data, such as Spark history files. If you do not specify a staging bucket, Cloud Dataproc will determine a Cloud Storage location according to the region where your workload is running, and then create and manage project-level, per-location staging and temporary buckets. This field requires a Cloud Storage bucket name, not a gs://... URI to a Cloud Storage bucket.\n\n    * `peripherals_config`: Auxiliary services configuration for a workload.\n\n      * `metastore_service`: Optional. Resource name of an existing Dataproc Metastore service.Example: projects/[project_id]/locations/[region]/services/[service_id]\n\n      * `spark_history_server_config`: Spark History Server configuration for the workload.\n\n        * `dataproc_cluster`: Optional. Resource name of an existing Dataproc Cluster to act as a Spark History Server for the workload.Example: projects/[project_id]/regions/[region]/clusters/[cluster_name]\n\n  * `user`: Optional. The email address of the user who owns the session.\n\n  * `state_history`: Output only. Historical state information for the session.\n\n    * `state`: Output only. The state of the session at this point in the session history.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CREATING\n      * ACTIVE\n      * TERMINATING\n      * TERMINATED\n      * FAILED\n\n    * `state_message`: Output only. Details about the state at this point in the session history.\n\n    * `state_start_time`: Output only. The time when the session entered the historical state.\n\n  * `session_template`: Optional. The session template used by the session.Only resource names, including project ID and location, are valid.Example: * https://www.googleapis.com/compute/v1/projects/[project_id]/locations/[dataproc_region]/sessionTemplates/[template_id] * projects/[project_id]/locations/[dataproc_region]/sessionTemplates/[template_id]The template must be in the same project and Dataproc region as the session.\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_sessions.md",
    "content": "+++\ntitle = \"google_dataproc_sessions resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_dataproc_sessions\"\nidentifier = \"inspec/resources/gcp/google_dataproc_sessions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_sessions` InSpec audit resource to test the properties of a Google Cloud Session resource.\n\n## Examples\n\n```ruby\n    describe google_dataproc_sessions(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_dataproc_sessions` resource:\n\nSee [google_dataproc_session](google_dataproc_session) for more detailed information.\n\n* `names`: an array of `google_dataproc_session` name\n* `uuids`: an array of `google_dataproc_session` uuid\n* `create_times`: an array of `google_dataproc_session` create_time\n* `jupyter_sessions`: an array of `google_dataproc_session` jupyter_session\n* `runtime_infos`: an array of `google_dataproc_session` runtime_info\n* `states`: an array of `google_dataproc_session` state\n* `state_messages`: an array of `google_dataproc_session` state_message\n* `state_times`: an array of `google_dataproc_session` state_time\n* `creators`: an array of `google_dataproc_session` creator\n* `labels`: an array of `google_dataproc_session` labels\n* `runtime_configs`: an array of `google_dataproc_session` runtime_config\n* `environment_configs`: an array of `google_dataproc_session` environment_config\n* `users`: an array of `google_dataproc_session` user\n* `state_histories`: an array of `google_dataproc_session` state_history\n* `session_templates`: an array of `google_dataproc_session` session_template\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_sessions` resource:\n\nSee [google_dataproc_session](google_dataproc_session) for more detailed information.\n\n* `names`: an array of `google_dataproc_session` name\n* `uuids`: an array of `google_dataproc_session` uuid\n* `create_times`: an array of `google_dataproc_session` create_time\n* `jupyter_sessions`: an array of `google_dataproc_session` jupyter_session\n* `runtime_infos`: an array of `google_dataproc_session` runtime_info\n* `states`: an array of `google_dataproc_session` state\n* `state_messages`: an array of `google_dataproc_session` state_message\n* `state_times`: an array of `google_dataproc_session` state_time\n* `creators`: an array of `google_dataproc_session` creator\n* `labels`: an array of `google_dataproc_session` labels\n* `runtime_configs`: an array of `google_dataproc_session` runtime_config\n* `environment_configs`: an array of `google_dataproc_session` environment_config\n* `users`: an array of `google_dataproc_session` user\n* `state_histories`: an array of `google_dataproc_session` state_history\n* `session_templates`: an array of `google_dataproc_session` session_template\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_workflow_template.md",
    "content": "+++\ntitle = \"google_dataproc_workflow_template resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_workflow_template\"\nidentifier = \"inspec/resources/gcp/google_dataproc_workflow_template resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_workflow_template` InSpec audit resource to to test a Google Cloud WorkflowTemplate resource.\n\n## Examples\n\n```ruby\ndescribe google_dataproc_workflow_template(name: 'value_name') do\n\tit { should exist }\n\tits('id') { should cmp 'value_id' }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('dag_timeout') { should cmp 'value_dagtimeout' }\n\nend\n\ndescribe google_dataproc_workflow_template(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_workflow_template` resource:\n\n\n  * `id`:\n\n  * `name`: Output only. The resource name of the workflow template, as described in https://cloud.google.com/apis/design/resource_names. For projects.regions.workflowTemplates, the resource name of the template has the following format: projects/{project_id}/regions/{region}/workflowTemplates/{template_id} For projects.locations.workflowTemplates, the resource name of the template has the following format: projects/{project_id}/locations/{location}/workflowTemplates/{template_id}\n\n  * `version`: Optional. Used to perform a consistent read-modify-write.This field should be left blank for a CreateWorkflowTemplate request. It is required for an UpdateWorkflowTemplate request, and must match the current server version. A typical update template flow would fetch the current template with a GetWorkflowTemplate request, which will return the current template with the version field filled in with the current server version. The user updates other fields in the template, then returns it as part of the UpdateWorkflowTemplate request.\n\n  * `create_time`: Output only. The time template was created.\n\n  * `update_time`: Output only. The time template was last updated.\n\n  * `labels`: Optional. The labels to associate with this template. These labels will be propagated to all jobs and clusters created by the workflow instance.Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt).Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt).No more than 32 labels can be associated with a template.\n\n    * `additional_properties`:\n\n  * `placement`: Specifies workflow execution target.Either managed_cluster or cluster_selector is required.\n\n    * `managed_cluster`: Cluster that is managed by the workflow.\n\n      * `cluster_name`: Required. The cluster name prefix. A unique cluster name will be formed by appending a random suffix.The name must contain only lower-case letters (a-z), numbers (0-9), and hyphens (-). Must begin with a letter. Cannot begin or end with hyphen. Must consist of between 2 and 35 characters.\n\n      * `config`: The cluster config.\n\n        * `config_bucket`: Optional. A Cloud Storage bucket used to stage job dependencies, config files, and job driver console output. If you do not specify a staging bucket, Cloud Dataproc will determine a Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Compute Engine zone where your cluster is deployed, and then create and manage this project-level, per-location bucket (see Dataproc staging and temp buckets (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/staging-bucket)). This field requires a Cloud Storage bucket name, not a gs://... URI to a Cloud Storage bucket.\n\n        * `temp_bucket`: Optional. A Cloud Storage bucket used to store ephemeral cluster and jobs data, such as Spark and MapReduce history files. If you do not specify a temp bucket, Dataproc will determine a Cloud Storage location (US, ASIA, or EU) for your cluster's temp bucket according to the Compute Engine zone where your cluster is deployed, and then create and manage this project-level, per-location bucket. The default bucket has a TTL of 90 days, but you can use any TTL (or none) if you specify a bucket (see Dataproc staging and temp buckets (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/staging-bucket)). This field requires a Cloud Storage bucket name, not a gs://... URI to a Cloud Storage bucket.\n\n        * `gce_cluster_config`: Common config settings for resources of Compute Engine cluster instances, applicable to all instances in the cluster.\n\n          * `zone_uri`: Optional. The Compute Engine zone where the Dataproc cluster will be located. If omitted, the service will pick a zone in the cluster's Compute Engine region. On a get request, zone will always be present.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone] projects/[project_id]/zones/[zone] [zone]\n\n          * `network_uri`: Optional. The Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the \"default\" network of the project is used, if it exists. Cannot be a \"Custom Subnet Network\" (see Using Subnetworks (https://cloud.google.com/compute/docs/subnetworks) for more information).A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/global/networks/default projects/[project_id]/global/networks/default default\n\n          * `subnetwork_uri`: Optional. The Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/[region]/subnetworks/sub0 projects/[project_id]/regions/[region]/subnetworks/sub0 sub0\n\n          * `internal_ip_only`: Optional. This setting applies to subnetwork-enabled networks. It is set to true by default in clusters created with image versions 2.2.x.When set to true: All cluster VMs have internal IP addresses. Google Private Access (https://cloud.google.com/vpc/docs/private-google-access) must be enabled to access Dataproc and other Google Cloud APIs. Off-cluster dependencies must be configured to be accessible without external IP addresses.When set to false: Cluster VMs are not restricted to internal IP addresses. Ephemeral external IP addresses are assigned to each cluster VM.\n\n          * `private_ipv6_google_access`: Optional. The type of IPv6 access for a cluster.\n          Possible values:\n            * PRIVATE_IPV6_GOOGLE_ACCESS_UNSPECIFIED\n            * INHERIT_FROM_SUBNETWORK\n            * OUTBOUND\n            * BIDIRECTIONAL\n\n          * `service_account`: Optional. The Dataproc service account (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts#service_accounts_in_dataproc) (also see VM Data Plane identity (https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals#vm_service_account_data_plane_identity)) used by Dataproc cluster VM instances to access Google Cloud Platform services.If not specified, the Compute Engine default service account (https://cloud.google.com/compute/docs/access/service-accounts#default_service_account) is used.\n\n          * `service_account_scopes`: Optional. The URIs of service account scopes to be included in Compute Engine instances. The following base set of scopes is always included: https://www.googleapis.com/auth/cloud.useraccounts.readonly https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/logging.writeIf no scopes are specified, the following defaults are also provided: https://www.googleapis.com/auth/bigquery https://www.googleapis.com/auth/bigtable.admin.table https://www.googleapis.com/auth/bigtable.data https://www.googleapis.com/auth/devstorage.full_control\n\n          * `tags`: The Compute Engine tags to add to all instances (see Tagging instances (https://cloud.google.com/compute/docs/label-or-tag-resources#tags)).\n\n          * `metadata`: Optional. The Compute Engine metadata entries to add to all instances (see Project and instance metadata (https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)).\n\n            * `additional_properties`:\n\n          * `reservation_affinity`: Reservation Affinity for consuming Zonal reservation.\n\n            * `consume_reservation_type`: Optional. Type of reservation to consume\n            Possible values:\n              * TYPE_UNSPECIFIED\n              * NO_RESERVATION\n              * ANY_RESERVATION\n              * SPECIFIC_RESERVATION\n\n            * `key`: Optional. Corresponds to the label key of reservation resource.\n\n            * `values`: Optional. Corresponds to the label values of reservation resource.\n\n          * `node_group_affinity`: Node Group Affinity for clusters using sole-tenant node groups. The Dataproc NodeGroupAffinity resource is not related to the Dataproc NodeGroup resource.\n\n            * `node_group_uri`: Required. The URI of a sole-tenant node group resource (https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) that the cluster will be created on.A full URL, partial URI, or node group name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/nodeGroups/node-group-1 projects/[project_id]/zones/[zone]/nodeGroups/node-group-1 node-group-1\n\n          * `shielded_instance_config`: Shielded Instance Config for clusters using Compute Engine Shielded VMs (https://cloud.google.com/security/shielded-cloud/shielded-vm).\n\n            * `enable_secure_boot`: Optional. Defines whether instances have Secure Boot enabled.\n\n            * `enable_vtpm`: Optional. Defines whether instances have the vTPM enabled.\n\n            * `enable_integrity_monitoring`: Optional. Defines whether instances have integrity monitoring enabled.\n\n          * `confidential_instance_config`: Confidential Instance Config for clusters using Confidential VMs (https://cloud.google.com/compute/confidential-vm/docs)\n\n            * `enable_confidential_compute`: Optional. Defines whether the instance should have confidential compute enabled.\n\n        * `master_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n          * `num_instances`: Optional. The number of VM instances in the instance group. For HA cluster master_config groups, must be set to 3. For standard cluster master_config groups, must be set to 1.\n\n          * `instance_names`: Output only. The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group.\n\n          * `instance_references`: Output only. List of references to Compute Engine instances.\n\n            * `instance_name`: The user-friendly name of the Compute Engine instance.\n\n            * `instance_id`: The unique identifier of the Compute Engine instance.\n\n            * `public_key`: The public RSA key used for sharing data with this instance.\n\n            * `public_ecies_key`: The public ECIES key used for sharing data with this instance.\n\n          * `image_uri`: Optional. The Compute Engine image resource used for cluster instances.The URI can represent an image or image family.Image examples: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/[image-id] projects/[project_id]/global/images/[image-id] image-idImage family examples. Dataproc will use the most recent image from the family: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/family/[custom-image-family-name] projects/[project_id]/global/images/family/[custom-image-family-name]If the URI is unspecified, it will be inferred from SoftwareConfig.image_version or the system default.\n\n          * `machine_type_uri`: Optional. The Compute Engine machine type used for cluster instances.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 n1-standard-2Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the machine type resource, for example, n1-standard-2.\n\n          * `disk_config`: Specifies the config of disk options for a group of VM instances.\n\n            * `boot_disk_type`: Optional. Type of the boot disk (default is \"pd-standard\"). Valid values: \"pd-balanced\" (Persistent Disk Balanced Solid State Drive), \"pd-ssd\" (Persistent Disk Solid State Drive), or \"pd-standard\" (Persistent Disk Hard Disk Drive). See Disk types (https://cloud.google.com/compute/docs/disks#disk-types).\n\n            * `boot_disk_size_gb`: Optional. Size in GB of the boot disk (default is 500GB).\n\n            * `num_local_ssds`: Optional. Number of attached SSDs, from 0 to 8 (default is 0). If SSDs are not attached, the boot disk is used to store runtime logs and HDFS (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one or more SSDs are attached, this runtime bulk data is spread across them, and the boot disk contains only basic config and installed binaries.Note: Local SSD options may vary by machine type and number of vCPUs selected.\n\n            * `local_ssd_interface`: Optional. Interface type of local SSDs (default is \"scsi\"). Valid values: \"scsi\" (Small Computer System Interface), \"nvme\" (Non-Volatile Memory Express). See local SSD performance (https://cloud.google.com/compute/docs/disks/local-ssd#performance).\n\n          * `is_preemptible`: Output only. Specifies that this instance group contains preemptible instances.\n\n          * `preemptibility`: Optional. Specifies the preemptibility of the instance group.The default value for master and worker groups is NON_PREEMPTIBLE. This default cannot be changed.The default value for secondary instances is PREEMPTIBLE.\n          Possible values:\n            * PREEMPTIBILITY_UNSPECIFIED\n            * NON_PREEMPTIBLE\n            * PREEMPTIBLE\n            * SPOT\n\n          * `managed_group_config`: Specifies the resources used to actively manage an instance group.\n\n            * `instance_template_name`: Output only. The name of the Instance Template used for the Managed Instance Group.\n\n            * `instance_group_manager_name`: Output only. The name of the Instance Group Manager for this group.\n\n            * `instance_group_manager_uri`: Output only. The partial URI to the instance group manager for this group. E.g. projects/my-project/regions/us-central1/instanceGroupManagers/my-igm.\n\n          * `accelerators`: Optional. The Compute Engine accelerator configuration for these instances.\n\n            * `accelerator_type_uri`: Full URL, partial URI, or short name of the accelerator type resource to expose to this instance. See Compute Engine AcceleratorTypes (https://cloud.google.com/compute/docs/reference/v1/acceleratorTypes).Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 nvidia-tesla-t4Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the accelerator type resource, for example, nvidia-tesla-t4.\n\n            * `accelerator_count`: The number of the accelerator cards of this type exposed to this instance.\n\n          * `min_cpu_platform`: Optional. Specifies the minimum cpu platform for the Instance Group. See Dataproc -> Minimum CPU Platform (https://cloud.google.com/dataproc/docs/concepts/compute/dataproc-min-cpu).\n\n          * `min_num_instances`: Optional. The minimum number of primary worker instances to create. If min_num_instances is set, cluster creation will succeed if the number of primary workers created is at least equal to the min_num_instances number.Example: Cluster creation request with num_instances = 5 and min_num_instances = 3: If 4 VMs are created and 1 instance fails, the failed VM is deleted. The cluster is resized to 4 instances and placed in a RUNNING state. If 2 instances are created and 3 instances fail, the cluster in placed in an ERROR state. The failed VMs are not deleted.\n\n          * `instance_flexibility_policy`: Instance flexibility Policy allowing a mixture of VM shapes and provisioning models.\n\n            * `instance_selection_list`: Optional. List of instance selection options that the group will use when creating new VMs.\n\n              * `machine_types`: Optional. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `rank`: Optional. Preference of this instance selection. Lower number means higher preference. Dataproc will first try to create a VM based on the machine-type with priority rank and fallback to next rank based on availability. Machine types and instance selections with the same priority have the same preference.\n\n            * `instance_selection_results`: Output only. A list of instance selection results in the group.\n\n              * `machine_type`: Output only. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `vm_count`: Output only. Number of VM provisioned with the machine_type.\n\n          * `startup_config`: Configuration to handle the startup of instances during cluster create and update process.\n\n            * `required_registration_fraction`: Optional. The config setting to enable cluster creation/ updation to be successful only after required_registration_fraction of instances are up and running. This configuration is applicable to only secondary workers for now. The cluster will fail if required_registration_fraction of instances are not available. This will include instance creation, agent registration, and service registration (if enabled).\n\n        * `worker_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n          * `num_instances`: Optional. The number of VM instances in the instance group. For HA cluster master_config groups, must be set to 3. For standard cluster master_config groups, must be set to 1.\n\n          * `instance_names`: Output only. The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group.\n\n          * `instance_references`: Output only. List of references to Compute Engine instances.\n\n            * `instance_name`: The user-friendly name of the Compute Engine instance.\n\n            * `instance_id`: The unique identifier of the Compute Engine instance.\n\n            * `public_key`: The public RSA key used for sharing data with this instance.\n\n            * `public_ecies_key`: The public ECIES key used for sharing data with this instance.\n\n          * `image_uri`: Optional. The Compute Engine image resource used for cluster instances.The URI can represent an image or image family.Image examples: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/[image-id] projects/[project_id]/global/images/[image-id] image-idImage family examples. Dataproc will use the most recent image from the family: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/family/[custom-image-family-name] projects/[project_id]/global/images/family/[custom-image-family-name]If the URI is unspecified, it will be inferred from SoftwareConfig.image_version or the system default.\n\n          * `machine_type_uri`: Optional. The Compute Engine machine type used for cluster instances.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 n1-standard-2Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the machine type resource, for example, n1-standard-2.\n\n          * `disk_config`: Specifies the config of disk options for a group of VM instances.\n\n            * `boot_disk_type`: Optional. Type of the boot disk (default is \"pd-standard\"). Valid values: \"pd-balanced\" (Persistent Disk Balanced Solid State Drive), \"pd-ssd\" (Persistent Disk Solid State Drive), or \"pd-standard\" (Persistent Disk Hard Disk Drive). See Disk types (https://cloud.google.com/compute/docs/disks#disk-types).\n\n            * `boot_disk_size_gb`: Optional. Size in GB of the boot disk (default is 500GB).\n\n            * `num_local_ssds`: Optional. Number of attached SSDs, from 0 to 8 (default is 0). If SSDs are not attached, the boot disk is used to store runtime logs and HDFS (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one or more SSDs are attached, this runtime bulk data is spread across them, and the boot disk contains only basic config and installed binaries.Note: Local SSD options may vary by machine type and number of vCPUs selected.\n\n            * `local_ssd_interface`: Optional. Interface type of local SSDs (default is \"scsi\"). Valid values: \"scsi\" (Small Computer System Interface), \"nvme\" (Non-Volatile Memory Express). See local SSD performance (https://cloud.google.com/compute/docs/disks/local-ssd#performance).\n\n          * `is_preemptible`: Output only. Specifies that this instance group contains preemptible instances.\n\n          * `preemptibility`: Optional. Specifies the preemptibility of the instance group.The default value for master and worker groups is NON_PREEMPTIBLE. This default cannot be changed.The default value for secondary instances is PREEMPTIBLE.\n          Possible values:\n            * PREEMPTIBILITY_UNSPECIFIED\n            * NON_PREEMPTIBLE\n            * PREEMPTIBLE\n            * SPOT\n\n          * `managed_group_config`: Specifies the resources used to actively manage an instance group.\n\n            * `instance_template_name`: Output only. The name of the Instance Template used for the Managed Instance Group.\n\n            * `instance_group_manager_name`: Output only. The name of the Instance Group Manager for this group.\n\n            * `instance_group_manager_uri`: Output only. The partial URI to the instance group manager for this group. E.g. projects/my-project/regions/us-central1/instanceGroupManagers/my-igm.\n\n          * `accelerators`: Optional. The Compute Engine accelerator configuration for these instances.\n\n            * `accelerator_type_uri`: Full URL, partial URI, or short name of the accelerator type resource to expose to this instance. See Compute Engine AcceleratorTypes (https://cloud.google.com/compute/docs/reference/v1/acceleratorTypes).Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 nvidia-tesla-t4Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the accelerator type resource, for example, nvidia-tesla-t4.\n\n            * `accelerator_count`: The number of the accelerator cards of this type exposed to this instance.\n\n          * `min_cpu_platform`: Optional. Specifies the minimum cpu platform for the Instance Group. See Dataproc -> Minimum CPU Platform (https://cloud.google.com/dataproc/docs/concepts/compute/dataproc-min-cpu).\n\n          * `min_num_instances`: Optional. The minimum number of primary worker instances to create. If min_num_instances is set, cluster creation will succeed if the number of primary workers created is at least equal to the min_num_instances number.Example: Cluster creation request with num_instances = 5 and min_num_instances = 3: If 4 VMs are created and 1 instance fails, the failed VM is deleted. The cluster is resized to 4 instances and placed in a RUNNING state. If 2 instances are created and 3 instances fail, the cluster in placed in an ERROR state. The failed VMs are not deleted.\n\n          * `instance_flexibility_policy`: Instance flexibility Policy allowing a mixture of VM shapes and provisioning models.\n\n            * `instance_selection_list`: Optional. List of instance selection options that the group will use when creating new VMs.\n\n              * `machine_types`: Optional. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `rank`: Optional. Preference of this instance selection. Lower number means higher preference. Dataproc will first try to create a VM based on the machine-type with priority rank and fallback to next rank based on availability. Machine types and instance selections with the same priority have the same preference.\n\n            * `instance_selection_results`: Output only. A list of instance selection results in the group.\n\n              * `machine_type`: Output only. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `vm_count`: Output only. Number of VM provisioned with the machine_type.\n\n          * `startup_config`: Configuration to handle the startup of instances during cluster create and update process.\n\n            * `required_registration_fraction`: Optional. The config setting to enable cluster creation/ updation to be successful only after required_registration_fraction of instances are up and running. This configuration is applicable to only secondary workers for now. The cluster will fail if required_registration_fraction of instances are not available. This will include instance creation, agent registration, and service registration (if enabled).\n\n        * `secondary_worker_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n          * `num_instances`: Optional. The number of VM instances in the instance group. For HA cluster master_config groups, must be set to 3. For standard cluster master_config groups, must be set to 1.\n\n          * `instance_names`: Output only. The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group.\n\n          * `instance_references`: Output only. List of references to Compute Engine instances.\n\n            * `instance_name`: The user-friendly name of the Compute Engine instance.\n\n            * `instance_id`: The unique identifier of the Compute Engine instance.\n\n            * `public_key`: The public RSA key used for sharing data with this instance.\n\n            * `public_ecies_key`: The public ECIES key used for sharing data with this instance.\n\n          * `image_uri`: Optional. The Compute Engine image resource used for cluster instances.The URI can represent an image or image family.Image examples: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/[image-id] projects/[project_id]/global/images/[image-id] image-idImage family examples. Dataproc will use the most recent image from the family: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/family/[custom-image-family-name] projects/[project_id]/global/images/family/[custom-image-family-name]If the URI is unspecified, it will be inferred from SoftwareConfig.image_version or the system default.\n\n          * `machine_type_uri`: Optional. The Compute Engine machine type used for cluster instances.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 n1-standard-2Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the machine type resource, for example, n1-standard-2.\n\n          * `disk_config`: Specifies the config of disk options for a group of VM instances.\n\n            * `boot_disk_type`: Optional. Type of the boot disk (default is \"pd-standard\"). Valid values: \"pd-balanced\" (Persistent Disk Balanced Solid State Drive), \"pd-ssd\" (Persistent Disk Solid State Drive), or \"pd-standard\" (Persistent Disk Hard Disk Drive). See Disk types (https://cloud.google.com/compute/docs/disks#disk-types).\n\n            * `boot_disk_size_gb`: Optional. Size in GB of the boot disk (default is 500GB).\n\n            * `num_local_ssds`: Optional. Number of attached SSDs, from 0 to 8 (default is 0). If SSDs are not attached, the boot disk is used to store runtime logs and HDFS (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one or more SSDs are attached, this runtime bulk data is spread across them, and the boot disk contains only basic config and installed binaries.Note: Local SSD options may vary by machine type and number of vCPUs selected.\n\n            * `local_ssd_interface`: Optional. Interface type of local SSDs (default is \"scsi\"). Valid values: \"scsi\" (Small Computer System Interface), \"nvme\" (Non-Volatile Memory Express). See local SSD performance (https://cloud.google.com/compute/docs/disks/local-ssd#performance).\n\n          * `is_preemptible`: Output only. Specifies that this instance group contains preemptible instances.\n\n          * `preemptibility`: Optional. Specifies the preemptibility of the instance group.The default value for master and worker groups is NON_PREEMPTIBLE. This default cannot be changed.The default value for secondary instances is PREEMPTIBLE.\n          Possible values:\n            * PREEMPTIBILITY_UNSPECIFIED\n            * NON_PREEMPTIBLE\n            * PREEMPTIBLE\n            * SPOT\n\n          * `managed_group_config`: Specifies the resources used to actively manage an instance group.\n\n            * `instance_template_name`: Output only. The name of the Instance Template used for the Managed Instance Group.\n\n            * `instance_group_manager_name`: Output only. The name of the Instance Group Manager for this group.\n\n            * `instance_group_manager_uri`: Output only. The partial URI to the instance group manager for this group. E.g. projects/my-project/regions/us-central1/instanceGroupManagers/my-igm.\n\n          * `accelerators`: Optional. The Compute Engine accelerator configuration for these instances.\n\n            * `accelerator_type_uri`: Full URL, partial URI, or short name of the accelerator type resource to expose to this instance. See Compute Engine AcceleratorTypes (https://cloud.google.com/compute/docs/reference/v1/acceleratorTypes).Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 nvidia-tesla-t4Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the accelerator type resource, for example, nvidia-tesla-t4.\n\n            * `accelerator_count`: The number of the accelerator cards of this type exposed to this instance.\n\n          * `min_cpu_platform`: Optional. Specifies the minimum cpu platform for the Instance Group. See Dataproc -> Minimum CPU Platform (https://cloud.google.com/dataproc/docs/concepts/compute/dataproc-min-cpu).\n\n          * `min_num_instances`: Optional. The minimum number of primary worker instances to create. If min_num_instances is set, cluster creation will succeed if the number of primary workers created is at least equal to the min_num_instances number.Example: Cluster creation request with num_instances = 5 and min_num_instances = 3: If 4 VMs are created and 1 instance fails, the failed VM is deleted. The cluster is resized to 4 instances and placed in a RUNNING state. If 2 instances are created and 3 instances fail, the cluster in placed in an ERROR state. The failed VMs are not deleted.\n\n          * `instance_flexibility_policy`: Instance flexibility Policy allowing a mixture of VM shapes and provisioning models.\n\n            * `instance_selection_list`: Optional. List of instance selection options that the group will use when creating new VMs.\n\n              * `machine_types`: Optional. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `rank`: Optional. Preference of this instance selection. Lower number means higher preference. Dataproc will first try to create a VM based on the machine-type with priority rank and fallback to next rank based on availability. Machine types and instance selections with the same priority have the same preference.\n\n            * `instance_selection_results`: Output only. A list of instance selection results in the group.\n\n              * `machine_type`: Output only. Full machine-type names, e.g. \"n1-standard-16\".\n\n              * `vm_count`: Output only. Number of VM provisioned with the machine_type.\n\n          * `startup_config`: Configuration to handle the startup of instances during cluster create and update process.\n\n            * `required_registration_fraction`: Optional. The config setting to enable cluster creation/ updation to be successful only after required_registration_fraction of instances are up and running. This configuration is applicable to only secondary workers for now. The cluster will fail if required_registration_fraction of instances are not available. This will include instance creation, agent registration, and service registration (if enabled).\n\n        * `software_config`: Specifies the selection and config of software inside the cluster.\n\n          * `image_version`: Optional. The version of software inside the cluster. It must be one of the supported Dataproc Versions (https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-versions#supported_dataproc_versions), such as \"1.2\" (including a subminor version, such as \"1.2.29\"), or the \"preview\" version (https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-versions#other_versions). If unspecified, it defaults to the latest Debian version.\n\n          * `properties`: Optional. The properties to set on daemon config files.Property keys are specified in prefix:property format, for example core:hadoop.tmp.dir. The following are supported prefixes and their mappings: capacity-scheduler: capacity-scheduler.xml core: core-site.xml distcp: distcp-default.xml hdfs: hdfs-site.xml hive: hive-site.xml mapred: mapred-site.xml pig: pig.properties spark: spark-defaults.conf yarn: yarn-site.xmlFor more information, see Cluster properties (https://cloud.google.com/dataproc/docs/concepts/cluster-properties).\n\n            * `additional_properties`:\n\n          * `optional_components`: Optional. The set of components to activate on the cluster.\n\n        * `initialization_actions`: Optional. Commands to execute on each node after config is completed. By default, executables are run on master and all worker nodes. You can test a node's role metadata to run an executable on a master or worker node, as shown below using curl (you can also use wget): ROLE=$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1/instance/attributes/dataproc-role) if [[ \"${ROLE}\" == 'Master' ]]; then ... master specific actions ... else ... worker specific actions ... fi\n\n          * `executable_file`: Required. Cloud Storage URI of executable file.\n\n          * `execution_timeout`: Optional. Amount of time executable has to complete. Default is 10 minutes (see JSON representation of Duration (https://developers.google.com/protocol-buffers/docs/proto3#json)).Cluster creation fails with an explanatory error message (the name of the executable that caused the error and the exceeded timeout period) if the executable is not completed at end of the timeout period.\n\n        * `encryption_config`: Encryption settings for the cluster.\n\n          * `gce_pd_kms_key_name`: Optional. The Cloud KMS key resource name to use for persistent disk encryption for all instances in the cluster. See Use CMEK with cluster data (https://cloud.google.com//dataproc/docs/concepts/configuring-clusters/customer-managed-encryption#use_cmek_with_cluster_data) for more information.\n\n          * `kms_key`: Optional. The Cloud KMS key resource name to use for cluster persistent disk and job argument encryption. See Use CMEK with cluster data (https://cloud.google.com//dataproc/docs/concepts/configuring-clusters/customer-managed-encryption#use_cmek_with_cluster_data) for more information.When this key resource name is provided, the following job arguments of the following job types submitted to the cluster are encrypted using CMEK: FlinkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/FlinkJob) HadoopJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/HadoopJob) SparkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkJob) SparkRJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkRJob) PySparkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/PySparkJob) SparkSqlJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkSqlJob) scriptVariables and queryList.queries HiveJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/HiveJob) scriptVariables and queryList.queries PigJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/PigJob) scriptVariables and queryList.queries PrestoJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/PrestoJob) scriptVariables and queryList.queries\n\n        * `autoscaling_config`: Autoscaling Policy config associated with the cluster.\n\n          * `policy_uri`: Optional. The autoscaling policy used by the cluster.Only resource names including projectid and location (region) are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/locations/[dataproc_region]/autoscalingPolicies/[policy_id] projects/[project_id]/locations/[dataproc_region]/autoscalingPolicies/[policy_id]Note that the policy must be in the same project and Dataproc region.\n\n        * `security_config`: Security related configuration, including encryption, Kerberos, etc.\n\n          * `kerberos_config`: Specifies Kerberos related configuration.\n\n            * `enable_kerberos`: Optional. Flag to indicate whether to Kerberize the cluster (default: false). Set this field to true to enable Kerberos on a cluster.\n\n            * `root_principal_password_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the root principal password.\n\n            * `kms_key_uri`: Optional. The URI of the KMS key used to encrypt sensitive files.\n\n            * `keystore_uri`: Optional. The Cloud Storage URI of the keystore file used for SSL encryption. If not provided, Dataproc will provide a self-signed certificate.\n\n            * `truststore_uri`: Optional. The Cloud Storage URI of the truststore file used for SSL encryption. If not provided, Dataproc will provide a self-signed certificate.\n\n            * `keystore_password_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the password to the user provided keystore. For the self-signed certificate, this password is generated by Dataproc.\n\n            * `key_password_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the password to the user provided key. For the self-signed certificate, this password is generated by Dataproc.\n\n            * `truststore_password_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the password to the user provided truststore. For the self-signed certificate, this password is generated by Dataproc.\n\n            * `cross_realm_trust_realm`: Optional. The remote realm the Dataproc on-cluster KDC will trust, should the user enable cross realm trust.\n\n            * `cross_realm_trust_kdc`: Optional. The KDC (IP or hostname) for the remote trusted realm in a cross realm trust relationship.\n\n            * `cross_realm_trust_admin_server`: Optional. The admin server (IP or hostname) for the remote trusted realm in a cross realm trust relationship.\n\n            * `cross_realm_trust_shared_password_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the shared password between the on-cluster Kerberos realm and the remote trusted realm, in a cross realm trust relationship.\n\n            * `kdc_db_key_uri`: Optional. The Cloud Storage URI of a KMS encrypted file containing the master key of the KDC database.\n\n            * `tgt_lifetime_hours`: Optional. The lifetime of the ticket granting ticket, in hours. If not specified, or user specifies 0, then default value 10 will be used.\n\n            * `realm`: Optional. The name of the on-cluster Kerberos realm. If not specified, the uppercased domain of hostnames will be the realm.\n\n          * `identity_config`: Identity related configuration, including service account based secure multi-tenancy user mappings.\n\n            * `user_service_account_mapping`: Required. Map of user to service account.\n\n              * `additional_properties`:\n\n        * `lifecycle_config`: Specifies the cluster auto-delete schedule configuration.\n\n          * `idle_delete_ttl`: Optional. The duration to keep the cluster alive while idling (when no jobs are running). Passing this threshold will cause the cluster to be deleted. Minimum value is 5 minutes; maximum value is 14 days (see JSON representation of Duration (https://developers.google.com/protocol-buffers/docs/proto3#json)).\n\n          * `auto_delete_time`: Optional. The time when cluster will be auto-deleted (see JSON representation of Timestamp (https://developers.google.com/protocol-buffers/docs/proto3#json)).\n\n          * `auto_delete_ttl`: Optional. The lifetime duration of cluster. The cluster will be auto-deleted at the end of this period. Minimum value is 10 minutes; maximum value is 14 days (see JSON representation of Duration (https://developers.google.com/protocol-buffers/docs/proto3#json)).\n\n          * `idle_start_time`: Output only. The time when cluster became idle (most recent job finished) and became eligible for deletion due to idleness (see JSON representation of Timestamp (https://developers.google.com/protocol-buffers/docs/proto3#json)).\n\n        * `endpoint_config`: Endpoint config for this cluster\n\n          * `http_ports`: Output only. The map of port descriptions to URLs. Will only be populated if enable_http_port_access is true.\n\n            * `additional_properties`:\n\n          * `enable_http_port_access`: Optional. If true, enable http access to specific ports on the cluster from external sources. Defaults to false.\n\n        * `metastore_config`: Specifies a Metastore configuration.\n\n          * `dataproc_metastore_service`: Required. Resource name of an existing Dataproc Metastore service.Example: projects/[project_id]/locations/[dataproc_region]/services/[service-name]\n\n        * `gke_cluster_config`: The cluster's GKE config.\n\n          * `namespaced_gke_deployment_target`: Deprecated. Used only for the deprecated beta. A full, namespace-isolated deployment target for an existing GKE cluster.\n\n            * `target_gke_cluster`: Optional. The target GKE cluster to deploy to. Format: 'projects/{project}/locations/{location}/clusters/{cluster_id}'\n\n            * `cluster_namespace`: Optional. A namespace within the GKE cluster to deploy into.\n\n          * `gke_cluster_target`: Optional. A target GKE cluster to deploy to. It must be in the same project and region as the Dataproc cluster (the GKE cluster can be zonal or regional). Format: 'projects/{project}/locations/{location}/clusters/{cluster_id}'\n\n          * `node_pool_target`: Optional. GKE node pools where workloads will be scheduled. At least one node pool must be assigned the DEFAULT GkeNodePoolTarget.Role. If a GkeNodePoolTarget is not specified, Dataproc constructs a DEFAULT GkeNodePoolTarget. Each role can be given to only one GkeNodePoolTarget. All node pools must have the same location settings.\n\n            * `node_pool`: Required. The target GKE node pool. Format: 'projects/{project}/locations/{location}/clusters/{cluster}/nodePools/{node_pool}'\n\n            * `roles`: Required. The roles associated with the GKE node pool.\n\n            * `node_pool_config`: The configuration of a GKE node pool used by a Dataproc-on-GKE cluster (https://cloud.google.com/dataproc/docs/concepts/jobs/dataproc-gke#create-a-dataproc-on-gke-cluster).\n\n              * `config`: Parameters that describe cluster nodes.\n\n                * `machine_type`: Optional. The name of a Compute Engine machine type (https://cloud.google.com/compute/docs/machine-types).\n\n                * `local_ssd_count`: Optional. The number of local SSD disks to attach to the node, which is limited by the maximum number of disks allowable per zone (see Adding Local SSDs (https://cloud.google.com/compute/docs/disks/local-ssd)).\n\n                * `preemptible`: Optional. Whether the nodes are created as legacy preemptible VM instances (https://cloud.google.com/compute/docs/instances/preemptible). Also see Spot VMs, preemptible VM instances without a maximum lifetime. Legacy and Spot preemptible nodes cannot be used in a node pool with the CONTROLLER role or in the DEFAULT node pool if the CONTROLLER role is not assigned (the DEFAULT node pool will assume the CONTROLLER role).\n\n                * `accelerators`: Optional. A list of hardware accelerators (https://cloud.google.com/compute/docs/gpus) to attach to each node.\n\n                  * `accelerator_count`: The number of accelerator cards exposed to an instance.\n\n                  * `accelerator_type`: The accelerator type resource namename (see GPUs on Compute Engine).\n\n                  * `gpu_partition_size`: Size of partitions to create on the GPU. Valid values are described in the NVIDIA mig user guide (https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#partitioning).\n\n                * `min_cpu_platform`: Optional. Minimum CPU platform (https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform) to be used by this instance. The instance may be scheduled on the specified or a newer CPU platform. Specify the friendly names of CPU platforms, such as \"Intel Haswell\"` or Intel Sandy Bridge\".\n\n                * `boot_disk_kms_key`: Optional. The Customer Managed Encryption Key (CMEK) (https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek) used to encrypt the boot disk attached to each node in the node pool. Specify the key using the following format: projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}\n\n                * `spot`: Optional. Whether the nodes are created as Spot VM instances (https://cloud.google.com/compute/docs/instances/spot). Spot VMs are the latest update to legacy preemptible VMs. Spot VMs do not have a maximum lifetime. Legacy and Spot preemptible nodes cannot be used in a node pool with the CONTROLLER role or in the DEFAULT node pool if the CONTROLLER role is not assigned (the DEFAULT node pool will assume the CONTROLLER role).\n\n              * `locations`: Optional. The list of Compute Engine zones (https://cloud.google.com/compute/docs/zones#available) where node pool nodes associated with a Dataproc on GKE virtual cluster will be located.Note: All node pools associated with a virtual cluster must be located in the same region as the virtual cluster, and they must be located in the same zone within that region.If a location is not specified during node pool creation, Dataproc on GKE will choose the zone.\n\n              * `autoscaling`: GkeNodePoolAutoscaling contains information the cluster autoscaler needs to adjust the size of the node pool to the current cluster usage.\n\n                * `min_node_count`: The minimum number of nodes in the node pool. Must be >= 0 and <= max_node_count.\n\n                * `max_node_count`: The maximum number of nodes in the node pool. Must be >= min_node_count, and must be > 0. Note: Quota must be sufficient to scale up the cluster.\n\n        * `dataproc_metric_config`: Dataproc metric config.\n\n          * `metrics`: Required. Metrics sources to enable.\n\n            * `metric_source`: Required. A standard set of metrics is collected unless metricOverrides are specified for the metric source (see Custom metrics (https://cloud.google.com/dataproc/docs/guides/dataproc-metrics#custom_metrics) for more information).\n            Possible values:\n              * METRIC_SOURCE_UNSPECIFIED\n              * MONITORING_AGENT_DEFAULTS\n              * HDFS\n              * SPARK\n              * YARN\n              * SPARK_HISTORY_SERVER\n              * HIVESERVER2\n              * HIVEMETASTORE\n              * FLINK\n\n            * `metric_overrides`: Optional. Specify one or more Custom metrics (https://cloud.google.com/dataproc/docs/guides/dataproc-metrics#custom_metrics) to collect for the metric course (for the SPARK metric source (any Spark metric (https://spark.apache.org/docs/latest/monitoring.html#metrics) can be specified).Provide metrics in the following format: METRIC_SOURCE: INSTANCE:GROUP:METRIC Use camelcase as appropriate.Examples: yarn:ResourceManager:QueueMetrics:AppsCompleted spark:driver:DAGScheduler:job.allJobs sparkHistoryServer:JVM:Memory:NonHeapMemoryUsage.committed hiveserver2:JVM:Memory:NonHeapMemoryUsage.used Notes: Only the specified overridden metrics are collected for the metric source. For example, if one or more spark:executive metrics are listed as metric overrides, other SPARK metrics are not collected. The collection of the metrics for other enabled custom metric sources is unaffected. For example, if both SPARK andd YARN metric sources are enabled, and overrides are provided for Spark metrics only, all YARN metrics are collected.\n\n        * `auxiliary_node_groups`: Optional. The node group settings.\n\n          * `node_group`: Dataproc Node Group. The Dataproc NodeGroup resource is not related to the Dataproc NodeGroupAffinity resource.\n\n            * `name`: The Node group resource name (https://aip.dev/122).\n\n            * `roles`: Required. Node group roles.\n\n            * `node_group_config`: The config settings for Compute Engine resources in an instance group, such as a master or worker group.\n\n              * `num_instances`: Optional. The number of VM instances in the instance group. For HA cluster master_config groups, must be set to 3. For standard cluster master_config groups, must be set to 1.\n\n              * `instance_names`: Output only. The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group.\n\n              * `instance_references`: Output only. List of references to Compute Engine instances.\n\n                * `instance_name`: The user-friendly name of the Compute Engine instance.\n\n                * `instance_id`: The unique identifier of the Compute Engine instance.\n\n                * `public_key`: The public RSA key used for sharing data with this instance.\n\n                * `public_ecies_key`: The public ECIES key used for sharing data with this instance.\n\n              * `image_uri`: Optional. The Compute Engine image resource used for cluster instances.The URI can represent an image or image family.Image examples: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/[image-id] projects/[project_id]/global/images/[image-id] image-idImage family examples. Dataproc will use the most recent image from the family: https://www.googleapis.com/compute/v1/projects/[project_id]/global/images/family/[custom-image-family-name] projects/[project_id]/global/images/family/[custom-image-family-name]If the URI is unspecified, it will be inferred from SoftwareConfig.image_version or the system default.\n\n              * `machine_type_uri`: Optional. The Compute Engine machine type used for cluster instances.A full URL, partial URI, or short name are valid. Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 projects/[project_id]/zones/[zone]/machineTypes/n1-standard-2 n1-standard-2Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the machine type resource, for example, n1-standard-2.\n\n              * `disk_config`: Specifies the config of disk options for a group of VM instances.\n\n                * `boot_disk_type`: Optional. Type of the boot disk (default is \"pd-standard\"). Valid values: \"pd-balanced\" (Persistent Disk Balanced Solid State Drive), \"pd-ssd\" (Persistent Disk Solid State Drive), or \"pd-standard\" (Persistent Disk Hard Disk Drive). See Disk types (https://cloud.google.com/compute/docs/disks#disk-types).\n\n                * `boot_disk_size_gb`: Optional. Size in GB of the boot disk (default is 500GB).\n\n                * `num_local_ssds`: Optional. Number of attached SSDs, from 0 to 8 (default is 0). If SSDs are not attached, the boot disk is used to store runtime logs and HDFS (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one or more SSDs are attached, this runtime bulk data is spread across them, and the boot disk contains only basic config and installed binaries.Note: Local SSD options may vary by machine type and number of vCPUs selected.\n\n                * `local_ssd_interface`: Optional. Interface type of local SSDs (default is \"scsi\"). Valid values: \"scsi\" (Small Computer System Interface), \"nvme\" (Non-Volatile Memory Express). See local SSD performance (https://cloud.google.com/compute/docs/disks/local-ssd#performance).\n\n              * `is_preemptible`: Output only. Specifies that this instance group contains preemptible instances.\n\n              * `preemptibility`: Optional. Specifies the preemptibility of the instance group.The default value for master and worker groups is NON_PREEMPTIBLE. This default cannot be changed.The default value for secondary instances is PREEMPTIBLE.\n              Possible values:\n                * PREEMPTIBILITY_UNSPECIFIED\n                * NON_PREEMPTIBLE\n                * PREEMPTIBLE\n                * SPOT\n\n              * `managed_group_config`: Specifies the resources used to actively manage an instance group.\n\n                * `instance_template_name`: Output only. The name of the Instance Template used for the Managed Instance Group.\n\n                * `instance_group_manager_name`: Output only. The name of the Instance Group Manager for this group.\n\n                * `instance_group_manager_uri`: Output only. The partial URI to the instance group manager for this group. E.g. projects/my-project/regions/us-central1/instanceGroupManagers/my-igm.\n\n              * `accelerators`: Optional. The Compute Engine accelerator configuration for these instances.\n\n                * `accelerator_type_uri`: Full URL, partial URI, or short name of the accelerator type resource to expose to this instance. See Compute Engine AcceleratorTypes (https://cloud.google.com/compute/docs/reference/v1/acceleratorTypes).Examples: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 projects/[project_id]/zones/[zone]/acceleratorTypes/nvidia-tesla-t4 nvidia-tesla-t4Auto Zone Exception: If you are using the Dataproc Auto Zone Placement (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone#using_auto_zone_placement) feature, you must use the short name of the accelerator type resource, for example, nvidia-tesla-t4.\n\n                * `accelerator_count`: The number of the accelerator cards of this type exposed to this instance.\n\n              * `min_cpu_platform`: Optional. Specifies the minimum cpu platform for the Instance Group. See Dataproc -> Minimum CPU Platform (https://cloud.google.com/dataproc/docs/concepts/compute/dataproc-min-cpu).\n\n              * `min_num_instances`: Optional. The minimum number of primary worker instances to create. If min_num_instances is set, cluster creation will succeed if the number of primary workers created is at least equal to the min_num_instances number.Example: Cluster creation request with num_instances = 5 and min_num_instances = 3: If 4 VMs are created and 1 instance fails, the failed VM is deleted. The cluster is resized to 4 instances and placed in a RUNNING state. If 2 instances are created and 3 instances fail, the cluster in placed in an ERROR state. The failed VMs are not deleted.\n\n              * `instance_flexibility_policy`: Instance flexibility Policy allowing a mixture of VM shapes and provisioning models.\n\n                * `instance_selection_list`: Optional. List of instance selection options that the group will use when creating new VMs.\n\n                  * `machine_types`: Optional. Full machine-type names, e.g. \"n1-standard-16\".\n\n                  * `rank`: Optional. Preference of this instance selection. Lower number means higher preference. Dataproc will first try to create a VM based on the machine-type with priority rank and fallback to next rank based on availability. Machine types and instance selections with the same priority have the same preference.\n\n                * `instance_selection_results`: Output only. A list of instance selection results in the group.\n\n                  * `machine_type`: Output only. Full machine-type names, e.g. \"n1-standard-16\".\n\n                  * `vm_count`: Output only. Number of VM provisioned with the machine_type.\n\n              * `startup_config`: Configuration to handle the startup of instances during cluster create and update process.\n\n                * `required_registration_fraction`: Optional. The config setting to enable cluster creation/ updation to be successful only after required_registration_fraction of instances are up and running. This configuration is applicable to only secondary workers for now. The cluster will fail if required_registration_fraction of instances are not available. This will include instance creation, agent registration, and service registration (if enabled).\n\n            * `labels`: Optional. Node group labels. Label keys must consist of from 1 to 63 characters and conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values can be empty. If specified, they must consist of from 1 to 63 characters and conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). The node group must have no more than 32 labelsn.\n\n              * `additional_properties`:\n\n          * `node_group_id`: Optional. A node group ID. Generated if not specified.The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), and hyphens (-). Cannot begin or end with underscore or hyphen. Must consist of from 3 to 33 characters.\n\n      * `labels`: Optional. The labels to associate with this cluster.Label keys must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 32 labels can be associated with a given cluster.\n\n        * `additional_properties`:\n\n    * `cluster_selector`: A selector that chooses target cluster for jobs based on metadata.\n\n      * `zone`: Optional. The zone where workflow process executes. This parameter does not affect the selection of the cluster.If unspecified, the zone of the first cluster matching the selector is used.\n\n      * `cluster_labels`: Required. The cluster labels. Cluster must have all labels to match.\n\n        * `additional_properties`:\n\n  * `jobs`: Required. The Directed Acyclic Graph of Jobs to submit.\n\n    * `step_id`: Required. The step id. The id must be unique among all jobs within the template.The step id is used as prefix for job id, as job goog-dataproc-workflow-step-id label, and in prerequisiteStepIds field from other steps.The id must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), and hyphens (-). Cannot begin or end with underscore or hyphen. Must consist of between 3 and 50 characters.\n\n    * `hadoop_job`: A Dataproc job for running Apache Hadoop MapReduce (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) jobs on Apache Hadoop YARN (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).\n\n      * `main_jar_file_uri`: The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'\n\n      * `main_class`: The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris.\n\n      * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as -libjars or -Dfoo=bar, that can be set as job properties, since a collision might occur that causes an incorrect job submission.\n\n      * `jar_file_uris`: Optional. Jar file URIs to add to the CLASSPATHs of the Hadoop driver and tasks.\n\n      * `file_uris`: Optional. HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.\n\n      * `archive_uris`: Optional. HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.\n\n      * `properties`: Optional. A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `spark_job`: A Dataproc job for running Apache Spark (https://spark.apache.org/) applications on YARN.\n\n      * `main_jar_file_uri`: The HCFS URI of the jar file that contains the main class.\n\n      * `main_class`: The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in SparkJob.jar_file_uris.\n\n      * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.\n\n      * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n      * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n      * `properties`: Optional. A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `pyspark_job`: A Dataproc job for running Apache PySpark (https://spark.apache.org/docs/0.9.0/python-programming-guide.html) applications on YARN.\n\n      * `main_python_file_uri`: Required. The HCFS URI of the main Python file to use as the driver. Must be a .py file.\n\n      * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n      * `python_file_uris`: Optional. HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.\n\n      * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n      * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n      * `properties`: Optional. A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `hive_job`: A Dataproc job for running Apache Hive (https://hive.apache.org/) queries on YARN.\n\n      * `query_file_uri`: The HCFS URI of the script that contains Hive queries.\n\n      * `query_list`: A list of queries to run on a cluster.\n\n        * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n      * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n      * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";).\n\n        * `additional_properties`:\n\n      * `properties`: Optional. A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.\n\n        * `additional_properties`:\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.\n\n    * `pig_job`: A Dataproc job for running Apache Pig (https://pig.apache.org/) queries on YARN.\n\n      * `query_file_uri`: The HCFS URI of the script that contains the Pig queries.\n\n      * `query_list`: A list of queries to run on a cluster.\n\n        * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n      * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n      * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Pig command: name=[value]).\n\n        * `additional_properties`:\n\n      * `properties`: Optional. A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.\n\n        * `additional_properties`:\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `spark_r_job`: A Dataproc job for running Apache SparkR (https://spark.apache.org/docs/latest/sparkr.html) applications on YARN.\n\n      * `main_r_file_uri`: Required. The HCFS URI of the main R file to use as the driver. Must be a .R file.\n\n      * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.\n\n      * `file_uris`: Optional. HCFS URIs of files to be placed in the working directory of each executor. Useful for naively parallel tasks.\n\n      * `archive_uris`: Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.\n\n      * `properties`: Optional. A mapping of property names to values, used to configure SparkR. Properties that conflict with values set by the Dataproc API might be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `spark_sql_job`: A Dataproc job for running Apache Spark SQL (https://spark.apache.org/sql/) queries.\n\n      * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n      * `query_list`: A list of queries to run on a cluster.\n\n        * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n      * `script_variables`: Optional. Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).\n\n        * `additional_properties`:\n\n      * `properties`: Optional. A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Dataproc API might be overwritten.\n\n        * `additional_properties`:\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH.\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `presto_job`: A Dataproc job for running Presto (https://prestosql.io/) queries. IMPORTANT: The Dataproc Presto Optional Component (https://cloud.google.com/dataproc/docs/concepts/components/presto) must be enabled when the cluster is created to submit a Presto job to the cluster.\n\n      * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n      * `query_list`: A list of queries to run on a cluster.\n\n        * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n      * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n      * `output_format`: Optional. The format in which query output will be displayed. See the Presto documentation for supported output formats\n\n      * `client_tags`: Optional. Presto client tags to attach to this query\n\n      * `properties`: Optional. A mapping of property names to values. Used to set Presto session properties (https://prestodb.io/docs/current/sql/set-session.html) Equivalent to using the --session flag in the Presto CLI\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `trino_job`: A Dataproc job for running Trino (https://trino.io/) queries. IMPORTANT: The Dataproc Trino Optional Component (https://cloud.google.com/dataproc/docs/concepts/components/trino) must be enabled when the cluster is created to submit a Trino job to the cluster.\n\n      * `query_file_uri`: The HCFS URI of the script that contains SQL queries.\n\n      * `query_list`: A list of queries to run on a cluster.\n\n        * `queries`: Required. The queries to execute. You do not need to end a query expression with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of a Dataproc API snippet that uses a QueryList to specify a HiveJob: \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\", \"query3;query4\", ] } }\n\n      * `continue_on_failure`: Optional. Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.\n\n      * `output_format`: Optional. The format in which query output will be displayed. See the Trino documentation for supported output formats\n\n      * `client_tags`: Optional. Trino client tags to attach to this query\n\n      * `properties`: Optional. A mapping of property names to values. Used to set Trino session properties (https://trino.io/docs/current/sql/set-session.html) Equivalent to using the --session flag in the Trino CLI\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `flink_job`: A Dataproc job for running Apache Flink applications on YARN.\n\n      * `main_jar_file_uri`: The HCFS URI of the jar file that contains the main class.\n\n      * `main_class`: The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in jarFileUris.\n\n      * `args`: Optional. The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision might occur that causes an incorrect job submission.\n\n      * `jar_file_uris`: Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Flink driver and tasks.\n\n      * `savepoint_uri`: Optional. HCFS URI of the savepoint, which contains the last saved progress for starting the current job.\n\n      * `properties`: Optional. A mapping of property names to values, used to configure Flink. Properties that conflict with values set by the Dataproc API might beoverwritten. Can include properties set in/etc/flink/conf/flink-defaults.conf and classes in user code.\n\n        * `additional_properties`:\n\n      * `logging_config`: The runtime logging config of the job.\n\n        * `driver_log_levels`: The per-package log levels for the driver. This can include \"root\" package name to configure rootLogger. Examples: - 'com.google = FATAL' - 'root = INFO' - 'org.apache = DEBUG'\n\n          * `additional_properties`:\n\n    * `labels`: Optional. The labels to associate with this job.Label keys must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 32 labels can be associated with a given job.\n\n      * `additional_properties`:\n\n    * `scheduling`: Job scheduling options.\n\n      * `max_failures_per_hour`: Optional. Maximum number of times per hour a driver can be restarted as a result of driver exiting with non-zero code before job is reported failed.A job might be reported as thrashing if the driver exits with a non-zero code four times within a 10-minute window.Maximum value is 10.Note: This restartable job option is not supported in Dataproc workflow templates (https://cloud.google.com/dataproc/docs/concepts/workflows/using-workflows#adding_jobs_to_a_template).\n\n      * `max_failures_total`: Optional. Maximum total number of times a driver can be restarted as a result of the driver exiting with a non-zero code. After the maximum number is reached, the job will be reported as failed.Maximum value is 240.Note: Currently, this restartable job option is not supported in Dataproc workflow templates (https://cloud.google.com/dataproc/docs/concepts/workflows/using-workflows#adding_jobs_to_a_template).\n\n    * `prerequisite_step_ids`: Optional. The optional list of prerequisite job step_ids. If not specified, the job will start at the beginning of workflow.\n\n  * `parameters`: Optional. Template parameters whose values are substituted into the template. Values for parameters must be provided when the template is instantiated.\n\n    * `name`: Required. Parameter name. The parameter name is used as the key, and paired with the parameter value, which are passed to the template when the template is instantiated. The name must contain only capital letters (A-Z), numbers (0-9), and underscores (_), and must not start with a number. The maximum length is 40 characters.\n\n    * `fields`: Required. Paths to all fields that the parameter replaces. A field is allowed to appear in at most one parameter's list of field paths.A field path is similar in syntax to a google.protobuf.FieldMask. For example, a field path that references the zone field of a workflow template's cluster selector would be specified as placement.clusterSelector.zone.Also, field paths can reference fields using the following syntax: Values in maps can be referenced by key: labels'key' placement.clusterSelector.clusterLabels'key' placement.managedCluster.labels'key' placement.clusterSelector.clusterLabels'key' jobs'step-id'.labels'key' Jobs in the jobs list can be referenced by step-id: jobs'step-id'.hadoopJob.mainJarFileUri jobs'step-id'.hiveJob.queryFileUri jobs'step-id'.pySparkJob.mainPythonFileUri jobs'step-id'.hadoopJob.jarFileUris0 jobs'step-id'.hadoopJob.archiveUris0 jobs'step-id'.hadoopJob.fileUris0 jobs'step-id'.pySparkJob.pythonFileUris0 Items in repeated fields can be referenced by a zero-based index: jobs'step-id'.sparkJob.args0 Other examples: jobs'step-id'.hadoopJob.properties'key' jobs'step-id'.hadoopJob.args0 jobs'step-id'.hiveJob.scriptVariables'key' jobs'step-id'.hadoopJob.mainJarFileUri placement.clusterSelector.zoneIt may not be possible to parameterize maps and repeated fields in their entirety since only individual map values and individual items in repeated fields can be referenced. For example, the following field paths are invalid: placement.clusterSelector.clusterLabels jobs'step-id'.sparkJob.args\n\n    * `description`: Optional. Brief description of the parameter. Must not exceed 1024 characters.\n\n    * `validation`: Configuration for parameter validation.\n\n      * `regex`: Validation based on regular expressions.\n\n        * `regexes`: Required. RE2 regular expressions used to validate the parameter's value. The value must match the regex in its entirety (substring matches are not sufficient).\n\n      * `values`: Validation based on a list of allowed values.\n\n        * `values`: Required. List of allowed values for the parameter.\n\n  * `dag_timeout`: Optional. Timeout duration for the DAG of jobs, expressed in seconds (see JSON representation of duration (https://developers.google.com/protocol-buffers/docs/proto3#json)). The timeout duration must be from 10 minutes (\"600s\") to 24 hours (\"86400s\"). The timer begins when the first job is submitted. If the workflow is running at the end of the timeout period, any remaining jobs are cancelled, the workflow is ended, and if the workflow was running on a managed cluster, the cluster is deleted.\n\n  * `encryption_config`: Encryption settings for encrypting workflow template job arguments.\n\n    * `kms_key`: Optional. The Cloud KMS key name to use for encrypting workflow template job arguments.When this this key is provided, the following workflow template job arguments (https://cloud.google.com/dataproc/docs/concepts/workflows/use-workflows#adding_jobs_to_a_template), if present, are CMEK encrypted (https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/customer-managed-encryption#use_cmek_with_workflow_template_data): FlinkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/FlinkJob) HadoopJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/HadoopJob) SparkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkJob) SparkRJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkRJob) PySparkJob args (https://cloud.google.com/dataproc/docs/reference/rest/v1/PySparkJob) SparkSqlJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/SparkSqlJob) scriptVariables and queryList.queries HiveJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/HiveJob) scriptVariables and queryList.queries PigJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/PigJob) scriptVariables and queryList.queries PrestoJob (https://cloud.google.com/dataproc/docs/reference/rest/v1/PrestoJob) scriptVariables and queryList.queries\n\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dataproc_workflow_templates.md",
    "content": "+++\ntitle = \"google_dataproc_workflow_templates resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dataproc_workflow_templates\"\nidentifier = \"inspec/resources/gcp/google_dataproc_workflow_templates resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dataproc_workflow_templates` InSpec audit resource to to test a Google Cloud WorkflowTemplates resource.\n\n## Examples\n\n```ruby\n  describe google_dataproc_workflow_templates(parent: 'value_parent') do\n    it { should exist }\n    its('ids') { should include 'value_id' }\n    its('names') { should include 'value_name' }\n    its('create_times') { should include 'value_createtime' }\n    its('update_times') { should include 'value_updatetime' }\n    its('dag_timeouts') { should include 'value_dagtimeout' }\n  end\n```\n## Parameters\n  * `parent`: The resource name of the region or location, as described in https://cloud.google.com/apis/design/resource_names.\n  For projects.regions.workflowTemplates,list, the resource name of the region has the following format: projects/{projectId}/regions/{region}\n  For projects.locations.workflowTemplates.list, the resource name of the location has the following format: projects/{projectId}/locations/{location}\n\n## Properties\n\nProperties that can be accessed from the `google_dataproc_workflow_templates` resource:\n\nSee [google_dataproc_project_location_workflow_template](google_dataproc_project_location_workflow_template) for more detailed information.\n\n  * `ids`: an array of `google_dataproc_project_location_workflow_template` id\n  * `names`: an array of `google_dataproc_project_location_workflow_template` name\n  * `versions`: an array of `google_dataproc_project_location_workflow_template` version\n  * `create_times`: an array of `google_dataproc_project_location_workflow_template` create_time\n  * `update_times`: an array of `google_dataproc_project_location_workflow_template` update_time\n  * `labels`: an array of `google_dataproc_project_location_workflow_template` labels\n  * `placements`: an array of `google_dataproc_project_location_workflow_template` placement\n  * `jobs`: an array of `google_dataproc_project_location_workflow_template` jobs\n  * `parameters`: an array of `google_dataproc_project_location_workflow_template` parameters\n  * `dag_timeouts`: an array of `google_dataproc_project_location_workflow_template` dag_timeout\n  * `encryption_configs`: an array of `google_dataproc_project_location_workflow_template` encryption_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Dataproc API](https://console.cloud.google.com/apis/library/dataproc.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_dt.md",
    "content": "+++\ntitle = \"google_dlp_dt resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_dt\"\nidentifier = \"inspec/resources/gcp/google_dlp_dt resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_dt` InSpec audit resource to to test a Google Cloud DT resource.\n\n## Examples\n\n```ruby\n\ndescribe google_dlp_dts(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{''}\") do\n  it { should exist }\n  its('display_names') { should include '' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_dt` resource:\n\n\n  * `name`: The resource name of the template. Set by the server.\n\n  * `description`: A description of the template.\n\n  * `display_name`: User set display name of the template.\n\n  * `config`: deidentifyConfig - Configuration of the deidentify template\n\n    * `info_type_tf`: infoTypeTransformations - Specifies free-text based transformations to be applied to the dataset.\n\n      * `tf`: transformations - Transformation for each infoType. Cannot specify more than one for a given infoType.\n\n        * `info_types`: InfoTypes to apply the transformation to. Leaving this empty will apply the transformation to apply to all findings that correspond to infoTypes that were requested in InspectConfig.\n\n          * `name`: Name of the information type.\n\n        * `primitive_tf`: Primitive transformation to apply to the infoType.\n\n          * `replace_config`: Replace each input value with a given value.\n\n            * `new_value`: Replace each input value with a given value.\n\n              * `integer_value`: An integer value.\n\n              * `float_value`: A float value.\n\n              * `string_value`: A string value.\n\n              * `boolean_value`: A boolean value.\n\n              * `timestamp_value`: A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n              * `time_value`: Represents a time of day.\n\n                * `hours`: Hours of day in 24 hour format. Should be from 0 to 23.\n\n                * `minutes`: Minutes of hour of day. Must be from 0 to 59.\n\n                * `seconds`: Seconds of minutes of the time. Must normally be from 0 to 59.\n\n                * `nanos`: Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n\n              * `date_value`: Represents a whole or partial calendar date.\n\n                * `year`: Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.\n\n                * `month`: Month of year. Must be from 1 to 12, or 0 if specifying a year without a month and day.\n\n                * `day`: Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year by itself or a year and month where the day is not significant.\n\n              * `day_of_week_value`: Represents a day of the week.\n              Possible values:\n                * MONDAY\n                * TUESDAY\n                * WEDNESDAY\n                * THURSDAY\n                * FRIDAY\n                * SATURDAY\n                * SUNDAY\n\n          * `replace_with_info_type_config`: Replace each matching finding with the name of the info type.\n\n          * `character_mask_config`: Partially mask a string by replacing a given number of characters with a fixed character. Masking can start from the beginning or end of the string.\n\n            * `masking_character`: Character to use to mask the sensitive values—for example, * for an alphabetic string such as a name, or 0 for a numeric string such as ZIP code or credit card number. This string must have a length of 1. If not supplied, this value defaults to * for strings, and 0 for digits.\n\n            * `number_to_mask`: Number of characters to mask. If not set, all matching chars will be masked. Skipped characters do not count towards this tally.\n\n            * `reverse_order`: Mask characters in reverse order. For example, if masking_character is 0, number_to_mask is 14, and reverse_order is `false`, then the input string `1234-5678-9012-3456` is masked as `00000000000000-3456`.\n\n            * `characters_to_ignore`: Characters to skip when doing de-identification of a value. These will be left alone and skipped.\n\n              * `characters_to_skip`: Characters to not transform when masking.\n\n              * `common_characters_to_ignore`: Common characters to not transform when masking. Useful to avoid removing punctuation.\n              Possible values:\n                * NUMERIC\n                * ALPHA_UPPER_CASE\n                * ALPHA_LOWER_CASE\n                * PUNCTUATION\n                * WHITESPACE\n\n          * `crypto_deterministic_config`: Pseudonymization method that generates deterministic encryption for the given input. Outputs a base64 encoded representation of the encrypted output. Uses AES-SIV based on the RFC [https://tools.ietf.org/html/rfc5297](https://tools.ietf.org/html/rfc5297).\n\n            * `crypto_key`: The key used by the encryption function.\n\n              * `transient`: Transient crypto key\n\n                * `name`: Name of the key. This is an arbitrary string used to differentiate different keys. A unique key is generated per name: two separate `TransientCryptoKey` protos share the same generated key if their names are the same. When the data crypto key is generated, this name is not used in any way (repeating the api call will result in a different key being generated).\n\n              * `unwrapped`: Unwrapped crypto key\n\n                * `key`: A 128/192/256 bit key.  A base64-encoded string.\n\n              * `kms_wrapped`: Kms wrapped key\n\n                * `wrapped_key`: The wrapped data crypto key.  A base64-encoded string.\n\n                * `crypto_key_name`: The resource name of the KMS CryptoKey to use for unwrapping.\n\n            * `surrogate_info_type`: The custom info type to annotate the surrogate with. This annotation will be applied to the surrogate by prefixing it with the name of the custom info type followed by the number of characters comprising the surrogate. The following scheme defines the format: {info type name}({surrogate character count}):{surrogate}  For example, if the name of custom info type is 'MY\\_TOKEN\\_INFO\\_TYPE' and the surrogate is 'abc', the full replacement value will be: 'MY\\_TOKEN\\_INFO\\_TYPE(3):abc'  This annotation identifies the surrogate when inspecting content using the custom info type 'Surrogate'. This facilitates reversal of the surrogate when it occurs in free text.  Note: For record transformations where the entire cell in a table is being transformed, surrogates are not mandatory. Surrogates are used to denote the location of the token and are necessary for re-identification in free form text.  In order for inspection to work properly, the name of this info type must not occur naturally anywhere in your data; otherwise, inspection may either  *   reverse a surrogate that does not correspond to an actual identifier *   be unable to parse the surrogate and result in an error  Therefore, choose your custom info type name carefully after considering what your data looks like. One way to select a name that has a high chance of yielding reliable detection is to include one or more unicode characters that are highly improbable to exist in your data. For example, assuming your data is entered from a regular ASCII keyboard, the symbol with the hex code point 29DD might be used like so: ⧝MY\\_TOKEN\\_TYPE.\n\n              * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at [https://cloud.google.com/dlp/docs/infotypes-reference](https://cloud.google.com/dlp/docs/infotypes-reference) when specifying a built-in type. When sending Cloud DLP results to Data Catalog, infoType names should conform to the pattern `[A-Za-z0-9$-_]{1,64}`.\n\n            * `context`: A context may be used for higher security and maintaining referential integrity such that the same identifier in two different contexts will be given a distinct surrogate. The context is appended to plaintext value being encrypted. On decryption the provided context is validated against the value used during encryption. If a context was provided during encryption, same context must be provided during decryption as well.  If the context is not set, plaintext would be used as is for encryption. If the context is set but:  1.  there is no record present when transforming a given value or 2.  the field is not present when transforming a given value,  plaintext would be used as is for encryption.  Note that case (1) is expected when an `InfoTypeTransformation` is applied to both structured and non-structured `ContentItem`s.\n\n              * `name`: Name describing the field.\n\n          * `crypto_replace_ffx_fpe_config`: Replaces an identifier with a surrogate using Format Preserving Encryption (FPE) with the FFX mode of operation; however when used in the `content.reidentify` API method, it serves the opposite function by reversing the surrogate back into the original identifier. The identifier must be encoded as ASCII. For a given crypto key and context, the same identifier will be replaced with the same surrogate. Identifiers must be at least two characters long. In the case that the identifier is the empty string, it will be skipped. See [https://cloud.google.com/dlp/docs/pseudonymization](https://cloud.google.com/dlp/docs/pseudonymization) to learn more.  Note: We recommend using CryptoDeterministicConfig for all use cases which do not require preserving the input alphabet space and size, plus warrant referential integrity.\n\n            * `crypto_key`: The key used by the encryption algorithm.\n\n              * `transient`: Transient crypto key\n\n                * `name`: Name of the key. This is an arbitrary string used to differentiate different keys. A unique key is generated per name: two separate `TransientCryptoKey` protos share the same generated key if their names are the same. When the data crypto key is generated, this name is not used in any way (repeating the api call will result in a different key being generated).\n\n              * `unwrapped`: Unwrapped crypto key\n\n                * `key`: A 128/192/256 bit key.  A base64-encoded string.\n\n              * `kms_wrapped`: Kms wrapped key\n\n                * `wrapped_key`: The wrapped data crypto key.  A base64-encoded string.\n\n                * `crypto_key_name`: The resource name of the KMS CryptoKey to use for unwrapping.\n\n            * `context`: The 'tweak', a context may be used for higher security since the same identifier in two different contexts won't be given the same surrogate. If the context is not set, a default tweak will be used.  If the context is set but:  1.  there is no record present when transforming a given value or 2.  the field is not present when transforming a given value,  a default tweak will be used.  Note that case (1) is expected when an `InfoTypeTransformation` is applied to both structured and non-structured `ContentItem`s. Currently, the referenced field may be of value type integer or string.  The tweak is constructed as a sequence of bytes in big endian byte order such that:  *   a 64 bit integer is encoded followed by a single byte of value 1 *   a string is encoded in UTF-8 format followed by a single byte of value 2\n\n              * `name`: Name describing the field.\n\n            * `surrogate_info_type`: The custom infoType to annotate the surrogate with. This annotation will be applied to the surrogate by prefixing it with the name of the custom infoType followed by the number of characters comprising the surrogate. The following scheme defines the format: info\\_type\\_name(surrogate\\_character\\_count):surrogate  For example, if the name of custom infoType is 'MY\\_TOKEN\\_INFO\\_TYPE' and the surrogate is 'abc', the full replacement value will be: 'MY\\_TOKEN\\_INFO\\_TYPE(3):abc'  This annotation identifies the surrogate when inspecting content using the custom infoType [`SurrogateType`](https://cloud.google.com/dlp/docs/reference/rest/v2/InspectConfig#surrogatetype). This facilitates reversal of the surrogate when it occurs in free text.  In order for inspection to work properly, the name of this infoType must not occur naturally anywhere in your data; otherwise, inspection may find a surrogate that does not correspond to an actual identifier. Therefore, choose your custom infoType name carefully after considering what your data looks like. One way to select a name that has a high chance of yielding reliable detection is to include one or more unicode characters that are highly improbable to exist in your data. For example, assuming your data is entered from a regular ASCII keyboard, the symbol with the hex code point 29DD might be used like so: ⧝MY\\_TOKEN\\_TYPE\n\n              * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at [https://cloud.google.com/dlp/docs/infotypes-reference](https://cloud.google.com/dlp/docs/infotypes-reference) when specifying a built-in type. When sending Cloud DLP results to Data Catalog, infoType names should conform to the pattern `[A-Za-z0-9$-_]{1,64}`.\n\n            * `common_alphabet`: Common alphabets.\n            Possible values:\n              * FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED\n              * NUMERIC\n              * HEXADECIMAL\n              * UPPER_CASE_ALPHA_NUMERIC\n              * ALPHA_NUMERIC\n\n            * `custom_alphabet`: This is supported by mapping these to the alphanumeric characters that the FFX mode natively supports. This happens before/after encryption/decryption. Each character listed must appear only once. Number of characters must be in the range \\[2, 95\\]. This must be encoded as ASCII. The order of characters does not matter. The full list of allowed characters is:  ``0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()_-+={[}]|:;\"'<,>.?/``\n\n            * `radix`: The native way to select the alphabet. Must be in the range \\[2, 95\\].\n\n  * `parent`: The parent of the template in any of the following formats:  * `projects/{{project}}` * `projects/{{project}}/locations/{{location}}` * `organizations/{{organization_id}}` * `organizations/{{organization_id}}/locations/{{location}}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_dts.md",
    "content": "+++\ntitle = \"google_dlp_dts resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_dts\"\nidentifier = \"inspec/resources/gcp/google_dlp_dts resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_dts` InSpec audit resource to to test a Google Cloud DT resource.\n\n## Examples\n\n```ruby\ndescribe google_dlp_dt(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{''}\", name: '') do\n  it { should exist }\n  its('display_name') { should cmp '' }\nend\n\ndescribe google_dlp_dt(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{''}\", name: 'nonexistent') do\n  it { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_dts` resource:\n\nSee [google_dlp_dt](google_dlp_dt) for more detailed information.\n\n  * `names`: an array of `google_dlp_dt` name\n  * `descriptions`: an array of `google_dlp_dt` description\n  * `display_names`: an array of `google_dlp_dt` display_name\n  * `configs`: an array of `google_dlp_dt` config\n  * `parents`: an array of `google_dlp_dt` parent\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_inspect_template.md",
    "content": "+++\ntitle = \"google_dlp_inspect_template resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_inspect_template\"\nidentifier = \"inspec/resources/gcp/google_dlp_inspect_template resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_inspect_template` InSpec audit resource to to test a Google Cloud InspectTemplate resource.\n\n## Examples\n\n```ruby\ndescribe google_dlp_inspect_template(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\", name: 'i-inspec-gcp-dlp') do\nit { should exist }\nits('name') { should cmp 'i-inspec-gcp-dlp' }\nits('type') { should cmp 'INSPECT_JOB' }\nits('state') { should cmp 'ACTIVE' }\nits('inspectDetails.requestedOptions.snapshotInspectTemplate') { should cmp '' }\nend\n\ndescribe google_dlp_inspect_template(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\", name: 'nonexistent') do\nit { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_inspect_template` resource:\n\n\n  * `name`: The resource name of the inspect template. Set by the server.\n\n  * `description`: A description of the inspect template.\n\n  * `display_name`: User set display name of the inspect template.\n\n  * `inspect_config`: The core content of the template.\n\n    * `exclude_info_types`: When true, excludes type information of the findings.\n\n    * `include_quote`: When true, a contextual quote from the data that triggered a finding is included in the response.\n\n    * `min_likelihood`: Only returns findings equal or above this threshold. See https://cloud.google.com/dlp/docs/likelihood for more info\n    Possible values:\n      * VERY_UNLIKELY\n      * UNLIKELY\n      * POSSIBLE\n      * LIKELY\n      * VERY_LIKELY\n\n    * `limits`: Configuration to control the number of findings returned.\n\n      * `max_findings_per_item`: Max number of findings that will be returned for each item scanned. The maximum returned is 2000.\n\n      * `max_findings_per_request`: Max number of findings that will be returned per request/job. The maximum returned is 2000.\n\n      * `max_findings_per_info_type`: Configuration of findings limit given for specified infoTypes.\n\n        * `info_type`: Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does not have an infoType, the DLP API applies the limit against all infoTypes that are found but not specified in another InfoTypeLimit.\n\n          * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n        * `max_findings`: Max findings limit for the given infoType.\n\n    * `info_types`: Restricts what infoTypes to look for. The values must correspond to InfoType values returned by infoTypes.list or listed at https://cloud.google.com/dlp/docs/infotypes-reference.  When no InfoTypes or CustomInfoTypes are specified in a request, the system may automatically choose what detectors to run. By default this may be all types, but may change over time as detectors are updated.\n\n      * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n    * `content_options`: List of options defining data content to scan. If empty, text, images, and other content will be included.\n\n    * `rule_set`: Set of rules to apply to the findings for this InspectConfig. Exclusion rules, contained in the set are executed in the end, other rules are executed in the order they are specified for each info type.\n\n      * `info_types`: List of infoTypes this rule set is applied to.\n\n        * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n      * `rules`: Set of rules to be applied to infoTypes. The rules are applied in order.\n\n        * `hotword_rule`: Hotword-based detection rule.\n\n          * `hotword_regex`: Regular expression pattern defining what qualifies as a hotword.\n\n            * `pattern`: Pattern defining the regular expression. Its syntax (https://github.com/google/re2/wiki/Syntax) can be found under the google/re2 repository on GitHub.\n\n            * `group_indexes`: The index of the submatch to extract as findings. When not specified, the entire match is returned. No more than 3 may be included.\n\n          * `proximity`: Proximity of the finding within which the entire hotword must reside. The total length of the window cannot exceed 1000 characters. Note that the finding itself will be included in the window, so that hotwords may be used to match substrings of the finding itself. For example, the certainty of a phone number regex `(\\d{3}) \\d{3}-\\d{4}` could be adjusted upwards if the area code is known to be the local area code of a company office using the hotword regex `(xxx)`, where `xxx` is the area code in question.\n\n            * `window_before`: Number of characters before the finding to consider. Either this or window_after must be specified\n\n            * `window_after`: Number of characters after the finding to consider. Either this or window_before must be specified\n\n          * `likelihood_adjustment`: Likelihood adjustment to apply to all matching findings.\n\n            * `fixed_likelihood`: Set the likelihood of a finding to a fixed value. Either this or relative_likelihood can be set.\n            Possible values:\n              * VERY_UNLIKELY\n              * UNLIKELY\n              * POSSIBLE\n              * LIKELY\n              * VERY_LIKELY\n\n            * `relative_likelihood`: Increase or decrease the likelihood by the specified number of levels. For example, if a finding would be POSSIBLE without the detection rule and relativeLikelihood is 1, then it is upgraded to LIKELY, while a value of -1 would downgrade it to UNLIKELY. Likelihood may never drop below VERY_UNLIKELY or exceed VERY_LIKELY, so applying an adjustment of 1 followed by an adjustment of -1 when base likelihood is VERY_LIKELY will result in a final likelihood of LIKELY. Either this or fixed_likelihood can be set.\n\n        * `exclusion_rule`: The rule that specifies conditions when findings of infoTypes specified in InspectionRuleSet are removed from results.\n\n          * `matching_type`: How the rule is applied. See the documentation for more information: https://cloud.google.com/dlp/docs/reference/rest/v2/InspectConfig#MatchingType\n          Possible values:\n            * MATCHING_TYPE_FULL_MATCH\n            * MATCHING_TYPE_PARTIAL_MATCH\n            * MATCHING_TYPE_INVERSE_MATCH\n\n          * `dictionary`: Dictionary which defines the rule.\n\n            * `word_list`: List of words or phrases to search for.\n\n              * `words`: Words or phrases defining the dictionary. The dictionary must contain at least one phrase and every phrase must contain at least 2 characters that are letters or digits.\n\n            * `cloud_storage_path`: Newline-delimited file of words in Cloud Storage. Only a single file is accepted.\n\n              * `path`: A url representing a file or path (no wildcards) in Cloud Storage. Example: `gs://[BUCKET_NAME]/dictionary.txt`\n\n          * `regex`: Regular expression which defines the rule.\n\n            * `pattern`: Pattern defining the regular expression. Its syntax (https://github.com/google/re2/wiki/Syntax) can be found under the google/re2 repository on GitHub.\n\n            * `group_indexes`: The index of the submatch to extract as findings. When not specified, the entire match is returned. No more than 3 may be included.\n\n          * `exclude_info_types`: Set of infoTypes for which findings would affect this rule.\n\n            * `info_types`: If a finding is matched by any of the infoType detectors listed here, the finding will be excluded from the scan results.\n\n              * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n    * `custom_info_types`: Custom info types to be used. See https://cloud.google.com/dlp/docs/creating-custom-infotypes to learn more.\n\n      * `info_type`: CustomInfoType can either be a new infoType, or an extension of built-in infoType, when the name matches one of existing infoTypes and that infoType is specified in `info_types` field. Specifying the latter adds findings to the one detected by the system. If built-in info type is not specified in `info_types` list then the name is treated as a custom info type.\n\n        * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n      * `likelihood`: Likelihood to return for this CustomInfoType. This base value can be altered by a detection rule if the finding meets the criteria specified by the rule.\n      Possible values:\n        * VERY_UNLIKELY\n        * UNLIKELY\n        * POSSIBLE\n        * LIKELY\n        * VERY_LIKELY\n\n      * `exclusion_type`: If set to EXCLUSION_TYPE_EXCLUDE this infoType will not cause a finding to be returned. It still can be used for rules matching.\n      Possible values:\n        * EXCLUSION_TYPE_EXCLUDE\n\n      * `regex`: Regular expression which defines the rule.\n\n        * `pattern`: Pattern defining the regular expression. Its syntax (https://github.com/google/re2/wiki/Syntax) can be found under the google/re2 repository on GitHub.\n\n        * `group_indexes`: The index of the submatch to extract as findings. When not specified, the entire match is returned. No more than 3 may be included.\n\n      * `dictionary`: Dictionary which defines the rule.\n\n        * `word_list`: List of words or phrases to search for.\n\n          * `words`: Words or phrases defining the dictionary. The dictionary must contain at least one phrase and every phrase must contain at least 2 characters that are letters or digits.\n\n        * `cloud_storage_path`: Newline-delimited file of words in Cloud Storage. Only a single file is accepted.\n\n          * `path`: A url representing a file or path (no wildcards) in Cloud Storage. Example: `gs://[BUCKET_NAME]/dictionary.txt`\n\n      * `stored_type`: A reference to a StoredInfoType to use with scanning.\n\n        * `name`: Resource name of the requested StoredInfoType, for example `organizations/433245324/storedInfoTypes/432452342` or `projects/project-id/storedInfoTypes/432452342`.\n\n  * `parent`: The parent of the inspect template in any of the following formats:  * `projects/{{project}}` * `projects/{{project}}/locations/{{location}}` * `organizations/{{organization_id}}` * `organizations/{{organization_id}}/locations/{{location}}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_inspect_templates.md",
    "content": "+++\ntitle = \"google_dlp_inspect_templates resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_inspect_templates\"\nidentifier = \"inspec/resources/gcp/google_dlp_inspect_templates resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_inspect_templates` InSpec audit resource to to test a Google Cloud InspectTemplate resource.\n\n## Examples\n\n```ruby\n\ndescribe google_dlp_inspect_templates(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\") do\nit { should exist }\nits('names') { should include 'i-inspec-gcp-dlp' }\nits('types') { should include 'INSPECT_JOB' }\nits('states') { should include 'ACTIVE' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_inspect_templates` resource:\n\nSee [google_dlp_inspect_template](google_dlp_inspect_template) for more detailed information.\n\n  * `names`: an array of `google_dlp_inspect_template` name\n  * `descriptions`: an array of `google_dlp_inspect_template` description\n  * `display_names`: an array of `google_dlp_inspect_template` display_name\n  * `inspect_configs`: an array of `google_dlp_inspect_template` inspect_config\n  * `parents`: an array of `google_dlp_inspect_template` parent\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_job.md",
    "content": "+++\ntitle = \"google_dlp_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_job\"\nidentifier = \"inspec/resources/gcp/google_dlp_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_job` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\ndescribe google_dlp_job(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\", name: 'i-inspec-gcp-dlp') do\n  it { should exist }\n  its('name') { should cmp 'i-inspec-gcp-dlp' }\n  its('type') { should cmp 'INSPECT_JOB' }\n  its('state') { should cmp 'ACTIVE' }\n  its('inspectDetails.requestedOptions.snapshotInspectTemplate') { should cmp '' }\nend\n\ndescribe google_dlp_job(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\", name: 'nonexistent') do\n  it { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_job` resource:\n\n\n  * `name`: The resource name of the template. Set by the server.\n\n  * `type`: An enum to represent the various types of DLP jobs.\n  Possible values:\n    * DLP_JOB_TYPE_UNSPECIFIED\n    * INSPECT_JOB\n    * RISK_ANALYSIS_JOB\n\n  * `state`: Possible states of a job. New items may be added.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * PENDING\n    * RUNNING\n    * DONE\n    * CANCELED\n    * FAILED\n    * ACTIVE\n\n  * `create_time`: Time when the job started. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n  * `start_time`: Time when the job was created. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n  * `end_time`: Time when the job started. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n  * `job_trigger_name`: If created by a job trigger, the resource name of the trigger that instantiated the job.\n\n  * `errors`: Details information about an error encountered during job execution or the results of an unsuccessful activation of the JobTrigger.\n\n    * `details`: Specifies free-text based transformations to be applied to the dataset.\n\n      * `status`: The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.\n\n        * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n        * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n        * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use. An object containing fields of an arbitrary type. An additional field \"type\" contains a URI identifying the type. Example: { \"id\": 1234, \"type\": \"types.example.com/standard/id\" }.\n\n          * `type`: type of field\n\n          * `field1`: name of field\n\n  * `act_det`: actionDetails - Details information about an error encountered during job execution or the results of an unsuccessful activation of the JobTrigger.\n\n    * `dt_det`: DeIdentifyDetails - Specifies free-text based transformations to be applied to the dataset.\n\n      * `de_stats`: deidentifyStats - Specifies free-text based transformations to be applied to the dataset.\n\n        * `transformed_bytes`: Total size in bytes that were transformed in some way.\n\n        * `transformation_count`: Number of successfully applied transformations.\n\n        * `transformation_error_count`: Number of errors encountered while trying to apply transformations.\n\n      * `req_opt`: requestedOptions The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.\n\n        * `snapshot_dt`: snapshotDeidentifyTemplate Snapshot of the state of the DeidentifyTemplate from the Deidentify action at the time this job was run.\n\n          * `name`: The status code, which should be an enum value of google.rpc.Code.\n\n          * `display_name`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `description`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `create_time`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `update_time`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `config`: deidentifyConfig The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.\n\n            * `tf_error_handling`: transformationErrorHandling The status code, which should be an enum value of google.rpc.Code.\n\n        * `snapshot_structured_dt`: snapshotStructuredDeidentifyTemplate Snapshot of the state of the structured DeidentifyTemplate from the Deidentify action at the time this job was run.\n\n          * `name`: The status code, which should be an enum value of google.rpc.Code.\n\n          * `display_name`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `description`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `create_time`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `update_time`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n          * `deidentify_config`: The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.\n\n            * `tf_error_handling`: transformationErrorHandling The status code, which should be an enum value of google.rpc.Code.\n\n        * `snapshot_img_rt`: snapshotImageRedactTemplate Snapshot of the state of the image transformation DeidentifyTemplate from the Deidentify action at the time this job was run.\n\n          * `name`: Output only. The template name. The template will have one of the following formats: projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID OR organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID\n\n          * `display_name`: Display name (max 256 chars).\n\n          * `description`: Short description (max 256 chars).\n\n          * `create_time`: Output only. The creation timestamp of an inspectTemplate. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n          * `update_time`: Output only. The creation timestamp of an inspectTemplate. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n          * `dt_con`: deidentifyConfig The configuration that controls how the data will change.\n\n            * `tf_error_handling`: transformationErrorHandling How to handle transformation errors during de-identification. A transformation error occurs when the requested transformation is incompatible with the data. For example, trying to de-identify an IP address using a DateShift transformation would result in a transformation error, since date info cannot be extracted from an IP address. Information about any incompatible transformations, and how they were handled, is returned in the response as part of the TransformationOverviews.\n\n            * `info_type_tf`: infoTypeTransformations Treat the dataset as free-form text and apply the same free text transformation everywhere.\n\n              * `tf`: transformations A type of transformation that will scan unstructured text and apply various PrimitiveTransformations to each finding, where the transformation is applied to only values that were identified as a specific infoType.\n\n                * `info_types`: InfoTypes to apply the transformation to. An empty list will cause this transformation to apply to all findings that correspond to infoTypes that were requested in InspectConfig.\n\n                  * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type. When sending Cloud DLP results to Data Catalog, infoType names should conform to the pattern [A-Za-z0-9$_-]{1,64}.\n\n                  * `version`: Optional version name for this InfoType.\n\n                  * `sensitivity_score`: Score is calculated from of all elements in the data profile. A higher level means the data is more sensitive.\n\n                    * `score`: Various sensitivity score levels for resources. Enums **SENSITIVITY_SCORE_UNSPECIFIED** - Unused. **SENSITIVITY_LOW** -\tNo sensitive information detected. The resource isn't publicly accessible. **SENSITIVITY_MODERATE** -\tMedium risk. Contains personally identifiable information (PII), potentially sensitive data, or fields with free-text data that are at a higher risk of having intermittent sensitive data. Consider limiting access. **SENSITIVITY_HIGH** -\tHigh risk. Sensitive personally identifiable information (SPII) can be present. Exfiltration of data can lead to user data loss. Re-identification of users might be possible. Consider limiting usage and or removing SPII.\n                    Possible values:\n                      * SENSITIVITY_SCORE_UNSPECIFIED\n                      * SENSITIVITY_LOW\n                      * SENSITIVITY_MODERATE\n                      * SENSITIVITY_HIGH\n\n            * `rec_tf`: recordTransformations - Treat the dataset as free-form text and apply the same free text transformation everywhere.\n\n              * `field_tf`: The transformation to apply to the field.\n\n                * `fields`: InfoTypes to apply the transformation to. An empty list will cause this transformation to apply to all findings that correspond to infoTypes that were requested in InspectConfig.\n\n                  * `name`: Name describing the field.\n\n                * `con`: condition A condition for determining whether a transformation should be applied to a field.\n\n                  * `exps`: expressions Only apply the transformation if the condition evaluates to true for the given RecordCondition. The conditions are allowed to reference fields that are not used in the actual transformation.Example Use Cases: Apply a different bucket transformation to an age column if the zip code column for the same record is within a specific range. Redact a field if the date of birth field is greater than 85.\n\n                    * `logical_operator`: The operator to apply to the result of conditions. Default and currently only supported value is AND. Enums **LOGICAL_OPERATOR_UNSPECIFIED** -\tUnused **AND** -\tConditional AND\n                    Possible values:\n                      * LOGICAL_OPERATOR_UNSPECIFIED\n                      * AND\n\n                    * `con`: Conditions to apply to the expression.\n\n                      * `cond`: A collection of conditions.\n\n                        * `field`: Designated field in the BigQuery table.\n\n                          * `name`: Name describing the field.\n\n                        * `operator`: Operators available for comparing the value of fields. Enums **RELATIONAL_OPERATOR_UNSPECIFIED**\tUnused **EQUAL_TO**\tEqual. Attempts to match even with incompatible types. **NOT_EQUAL_TO**\tNot equal to. Attempts to match even with incompatible types. **GREATER_THAN**\tGreater than. **LESS_THAN**\tLess than. **GREATER_THAN_OR_EQUALS**\tGreater than or equals. **LESS_THAN_OR_EQUALS**\tLess than or equals. **EXISTS**\tExists\n                        Possible values:\n                          * RELATIONAL_OPERATOR_UNSPECIFIED\n                          * EQUAL_TO\n                          * NOT_EQUAL_TO\n                          * GREATER_THAN\n                          * LESS_THAN\n                          * GREATER_THAN_OR_EQUALS\n                          * LESS_THAN_OR_EQUALS\n                          * EXISTS\n\n                        * `new_val`: newValue Replace each input value with a given value.\n\n                          * `integer_value`: An integer value.\n\n                          * `float_value`: A float value.\n\n                          * `string_value`: A string value.\n\n                          * `boolean_value`: A boolean value.\n\n                          * `timestamp_value`: A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n                          * `time_val`: Represents a time of day.\n\n                            * `hours`: Hours of day in 24 hour format. Should be from 0 to 23.\n\n                            * `minutes`: Minutes of hour of day. Must be from 0 to 59.\n\n                            * `seconds`: Seconds of minutes of the time. Must normally be from 0 to 59.\n\n                            * `nanos`: Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n\n                          * `date_val`: dateValue Represents a whole or partial calendar date.\n\n                            * `year`: Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.\n\n                            * `month`: Month of year. Must be from 1 to 12, or 0 if specifying a year without a month and day.\n\n                            * `day`: Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year by itself or a year and month where the day is not significant.\n\n                          * `day_of_week_val`: datOfWeekValue Represents a day of the week.\n                          Possible values:\n                            * MONDAY\n                            * TUESDAY\n                            * WEDNESDAY\n                            * THURSDAY\n                            * FRIDAY\n                            * SATURDAY\n                            * SUNDAY\n\n              * `rec_sup`: recordSuppressions - The transformation to apply to the field.\n\n                * `con`: A condition for determining whether a transformation should be applied to a field.\n\n                  * `exp`: expressions Only apply the transformation if the condition evaluates to true for the given RecordCondition. The conditions are allowed to reference fields that are not used in the actual transformation.Example Use Cases: Apply a different bucket transformation to an age column if the zip code column for the same record is within a specific range. Redact a field if the date of birth field is greater than 85.\n\n                    * `logical_operator`: The operator to apply to the result of conditions. Default and currently only supported value is AND. Enums **LOGICAL_OPERATOR_UNSPECIFIED** -\tUnused **AND** -\tConditional AND\n                    Possible values:\n                      * LOGICAL_OPERATOR_UNSPECIFIED\n                      * AND\n\n                    * `con`: Conditions to apply to the expression.\n\n                      * `con`: A collection of conditions.\n\n                        * `field`: Designated field in the BigQuery table.\n\n                          * `name`: Name describing the field.\n\n                        * `operator`: Operators available for comparing the value of fields. Enums **RELATIONAL_OPERATOR_UNSPECIFIED**\tUnused **EQUAL_TO**\tEqual. Attempts to match even with incompatible types. **NOT_EQUAL_TO**\tNot equal to. Attempts to match even with incompatible types. **GREATER_THAN**\tGreater than. **LESS_THAN**\tLess than. **GREATER_THAN_OR_EQUALS**\tGreater than or equals. **LESS_THAN_OR_EQUALS**\tLess than or equals. **EXISTS**\tExists\n                        Possible values:\n                          * RELATIONAL_OPERATOR_UNSPECIFIED\n                          * EQUAL_TO\n                          * NOT_EQUAL_TO\n                          * GREATER_THAN\n                          * LESS_THAN\n                          * GREATER_THAN_OR_EQUALS\n                          * LESS_THAN_OR_EQUALS\n                          * EXISTS\n\n                        * `new_val`: newValue Replace each input value with a given value.\n\n                          * `integer_val`: An integer value.\n\n                          * `float_val`: A float value.\n\n                          * `string_val`: A string value.\n\n                          * `boolean_val`: A boolean value.\n\n                          * `timestamp_val`: A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n                          * `time_val`: timeValue Represents a time of day.\n\n                            * `hours`: Hours of day in 24 hour format. Should be from 0 to 23.\n\n                            * `minutes`: Minutes of hour of day. Must be from 0 to 59.\n\n                            * `seconds`: Seconds of minutes of the time. Must normally be from 0 to 59.\n\n                            * `nanos`: Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n\n                          * `date_val`: dateValue Represents a whole or partial calendar date.\n\n                            * `year`: Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.\n\n                            * `month`: Month of year. Must be from 1 to 12, or 0 if specifying a year without a month and day.\n\n                            * `day`: Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year by itself or a year and month where the day is not significant.\n\n                          * `day_of_week_val`: dayOfWeekValue Represents a day of the week.\n                          Possible values:\n                            * MONDAY\n                            * TUESDAY\n                            * WEDNESDAY\n                            * THURSDAY\n                            * FRIDAY\n                            * SATURDAY\n                            * SUNDAY\n\n            * `image_tf`: ImageTransformations Treat the dataset as free-form text and apply the same free text transformation everywhere.\n\n              * `redaction_color`: Treat the dataset as free-form text and apply the same free text transformation everywhere.\n\n                * `red`: red color\n\n                * `green`: green color\n\n                * `blue`: blue color\n\n              * `selected_info_types`: Restricts what infoTypes to look for. The values must correspond to InfoType values returned by infoTypes.list or listed at https://cloud.google.com/dlp/docs/infotypes-reference.  When no InfoTypes or CustomInfoTypes are specified in a request, the system may automatically choose what detectors to run. By default this may be all types, but may change over time as detectors are updated.\n\n                * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n              * `all_info_types`: Restricts what infoTypes to look for. The values must correspond to InfoType values returned by infoTypes.list or listed at https://cloud.google.com/dlp/docs/infotypes-reference.  When no InfoTypes or CustomInfoTypes are specified in a request, the system may automatically choose what detectors to run. By default this may be all types, but may change over time as detectors are updated.\n\n                * `name`: Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type.\n\n              * `all_text`: Apply to all text.\n\n                * `red`: red color\n\n                * `green`: green color\n\n                * `blue`: blue color\n\n    * `deidentify_stats`: Specifies free-text based transformations to be applied to the dataset.\n\n      * `requested_options`: The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.\n\n        * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n        * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n        * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use. An object containing fields of an arbitrary type. An additional field \"type\" contains a URI identifying the type. Example: { \"id\": 1234, \"type\": \"types.example.com/standard/id\" }.\n\n          * `type`: type of field\n\n          * `field1`: name of field\n\n  * `risk_details`: Result of a risk analysis operation request.\n\n  * `inspect_details`: Results from inspecting a data source.\n\n  * `parent`: The parent of the template in any of the following formats:  * `projects/{{project}}` * `projects/{{project}}/locations/{{location}}` * `organizations/{{organization_id}}` * `organizations/{{organization_id}}/locations/{{location}}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_job_trigger.md",
    "content": "+++\ntitle = \"google_dlp_job_trigger resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_job_trigger\"\nidentifier = \"inspec/resources/gcp/google_dlp_job_trigger resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_job_trigger` InSpec audit resource to to test a Google Cloud JobTrigger resource.\n\n## Examples\n\n```ruby\ndescribe google_dlp_job_trigger(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\",name: 'name1') do\nit { should exist }\nits('name') { should cmp 'name1' }\nits('display_name') { should cmp 'dp' }\nits('description') { should cmp 'description' }\nits('status') { should cmp 'HEALTHY' }\nend\n\ndescribe google_dlp_job_trigger(parent: 'chef-gcp-inspec', name: 'nonexistent') do\nit { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_job_trigger` resource:\n\n\n  * `name`: The resource name of the job trigger.Set by the server.\n\n  * `description`: A description of the job trigger.\n\n  * `display_name`: User set display name of the job trigger.\n\n  * `last_run_time`: The timestamp of the last time this trigger executed.\n\n  * `status`: Whether the trigger is currently active.\n  Possible values:\n    * PAUSED\n    * HEALTHY\n    * CANCELLED\n\n  * `triggers`: What event needs to occur for a new job to be started.\n\n    * `schedule`: Schedule for triggered jobs\n\n      * `recurrence_period_duration`: With this option a job is started a regular periodic basis. For example: every day (86400 seconds).  A scheduled start time will be skipped if the previous execution has not ended when its scheduled time occurs.  This value must be set to a time duration greater than or equal to 1 day and can be no longer than 60 days.  A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n  * `inspect_job`: Controls what and how to inspect for findings.\n\n    * `inspect_template_name`: The name of the template to run when this job is triggered.\n\n    * `storage_config`: Information on where to inspect\n\n      * `timespan_config`: Information on where to inspect\n\n        * `start_time`: Exclude files or rows older than this value.\n\n        * `end_time`: Exclude files or rows newer than this value. If set to zero, no upper time limit is applied.\n\n        * `enable_auto_population_of_timespan_config`: When the job is started by a JobTrigger we will automatically figure out a valid startTime to avoid scanning files that have not been modified since the last time the JobTrigger executed. This will be based on the time of the execution of the last run of the JobTrigger.\n\n        * `timestamp_field`: Information on where to inspect\n\n          * `name`: Specification of the field containing the timestamp of scanned items. Used for data sources like Datastore and BigQuery.  For BigQuery: Required to filter out rows based on the given start and end times. If not specified and the table was modified between the given start and end times, the entire table will be scanned. The valid data types of the timestamp field are: INTEGER, DATE, TIMESTAMP, or DATETIME BigQuery column.  For Datastore. Valid data types of the timestamp field are: TIMESTAMP. Datastore entity will be scanned if the timestamp property does not exist or its value is empty or invalid.\n\n      * `datastore_options`: Options defining a data set within Google Cloud Datastore.\n\n        * `partition_id`: Datastore partition ID. A partition ID identifies a grouping of entities. The grouping is always by project and namespace, however the namespace ID may be empty.\n\n          * `project_id`: The ID of the project to which the entities belong.\n\n          * `namespace_id`: If not empty, the ID of the namespace to which the entities belong.\n\n        * `kind`: A representation of a Datastore kind.\n\n          * `name`: The name of the Datastore kind.\n\n      * `cloud_storage_options`: Options defining a file or a set of files within a Google Cloud Storage bucket.\n\n        * `file_set`: Set of files to scan.\n\n          * `url`: The Cloud Storage url of the file(s) to scan, in the format `gs://<bucket>/<path>`. Trailing wildcard in the path is allowed.  If the url ends in a trailing slash, the bucket or directory represented by the url will be scanned non-recursively (content in sub-directories will not be scanned). This means that `gs://mybucket/` is equivalent to `gs://mybucket/*`, and `gs://mybucket/directory/` is equivalent to `gs://mybucket/directory/*`.\n\n          * `regex_file_set`: The regex-filtered set of files to scan.\n\n            * `bucket_name`: The name of a Cloud Storage bucket.\n\n            * `include_regex`: A list of regular expressions matching file paths to include. All files in the bucket that match at least one of these regular expressions will be included in the set of files, except for those that also match an item in excludeRegex. Leaving this field empty will match all files by default (this is equivalent to including .* in the list)\n\n            * `exclude_regex`: A list of regular expressions matching file paths to exclude. All files in the bucket that match at least one of these regular expressions will be excluded from the scan.\n\n        * `bytes_limit_per_file`: Max number of bytes to scan from a file. If a scanned file's size is bigger than this value then the rest of the bytes are omitted.\n\n        * `bytes_limit_per_file_percent`: Max percentage of bytes to scan from a file. The rest are omitted. The number of bytes scanned is rounded down. Must be between 0 and 100, inclusively. Both 0 and 100 means no limit.\n\n        * `files_limit_percent`: Limits the number of files to scan to this percentage of the input FileSet. Number of files scanned is rounded down. Must be between 0 and 100, inclusively. Both 0 and 100 means no limit.\n\n        * `file_types`: List of file type groups to include in the scan. If empty, all files are scanned and available data format processors are applied. In addition, the binary content of the selected files is always scanned as well. Images are scanned only as binary if the specified region does not support image inspection and no fileTypes were specified.\n\n        * `sample_method`: How to sample bytes if not all bytes are scanned. Meaningful only when used in conjunction with bytesLimitPerFile. If not specified, scanning would start from the top.\n        Possible values:\n          * TOP\n          * RANDOM_START\n\n      * `big_query_options`: Options defining BigQuery table and row identifiers.\n\n        * `table_reference`: Set of files to scan.\n\n          * `project_id`: The Google Cloud Platform project ID of the project containing the table.\n\n          * `dataset_id`: The dataset ID of the table.\n\n          * `table_id`: The name of the table.\n\n    * `actions`: A task to execute on the completion of a job.\n\n      * `save_findings`: Schedule for triggered jobs\n\n        * `output_config`: Information on where to store output\n\n          * `table`: Information on the location of the target BigQuery Table.\n\n            * `project_id`: The Google Cloud Platform project ID of the project containing the table.\n\n            * `dataset_id`: Dataset ID of the table.\n\n            * `table_id`: Name of the table. If is not set a new one will be generated for you with the following format: `dlp_googleapis_yyyy_mm_dd_[dlp_job_id]`. Pacific timezone will be used for generating the date details.\n\n          * `output_schema`: Schema used for writing the findings for Inspect jobs. This field is only used for Inspect and must be unspecified for Risk jobs. Columns are derived from the Finding object. If appending to an existing table, any columns from the predefined schema that are missing will be added. No columns in the existing table will be deleted.  If unspecified, then all available columns will be used for a new table or an (existing) table with no schema, and no changes will be made to an existing table that has a schema. Only for use with external storage.\n          Possible values:\n            * BASIC_COLUMNS\n            * GCS_COLUMNS\n            * DATASTORE_COLUMNS\n            * BIG_QUERY_COLUMNS\n            * ALL_COLUMNS\n\n  * `parent`: The parent of the trigger, either in the format `projects/{{project}}` or  `projects/{{project}}/locations/{{location}}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_job_triggers.md",
    "content": "+++\ntitle = \"google_dlp_job_triggers resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_job_triggers\"\nidentifier = \"inspec/resources/gcp/google_dlp_job_triggers resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_job_triggers` InSpec audit resource to to test a Google Cloud JobTrigger resource.\n\n## Examples\n\n```ruby\n\ndescribe google_dlp_job_triggers(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\") do\nit { should exist }\nits('names') { should include 'name1' }\nits('display_name') { should include 'dp' }\nits('descriptions') { should include 'description' }\nits('status') { should include 'HEALTHY' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_job_triggers` resource:\n\nSee [google_dlp_job_trigger](google_dlp_job_trigger) for more detailed information.\n\n  * `names`: an array of `google_dlp_job_trigger` name\n  * `descriptions`: an array of `google_dlp_job_trigger` description\n  * `display_names`: an array of `google_dlp_job_trigger` display_name\n  * `last_run_times`: an array of `google_dlp_job_trigger` last_run_time\n  * `statuses`: an array of `google_dlp_job_trigger` status\n  * `triggers`: an array of `google_dlp_job_trigger` triggers\n  * `inspect_jobs`: an array of `google_dlp_job_trigger` inspect_job\n  * `parents`: an array of `google_dlp_job_trigger` parent\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_jobs.md",
    "content": "+++\ntitle = \"google_dlp_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_jobs\"\nidentifier = \"inspec/resources/gcp/google_dlp_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_jobs` InSpec audit resource to to test a Google Cloud Job resource.\n\n## Examples\n\n```ruby\n\ndescribe google_dlp_jobs(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\") do\n  it { should exist }\n  its('names') { should include 'i-inspec-gcp-dlp' }\n  its('types') { should include 'INSPECT_JOB' }\n  its('states') { should include 'ACTIVE' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_jobs` resource:\n\nSee [google_dlp_job](google_dlp_job) for more detailed information.\n\n  * `names`: an array of `google_dlp_job` name\n  * `types`: an array of `google_dlp_job` type\n  * `states`: an array of `google_dlp_job` state\n  * `create_times`: an array of `google_dlp_job` create_time\n  * `start_times`: an array of `google_dlp_job` start_time\n  * `end_times`: an array of `google_dlp_job` end_time\n  * `job_trigger_names`: an array of `google_dlp_job` job_trigger_name\n  * `errors`: an array of `google_dlp_job` errors\n  * `act_dets`: an array of `google_dlp_job` act_det\n  * `risk_details`: an array of `google_dlp_job` risk_details\n  * `inspect_details`: an array of `google_dlp_job` inspect_details\n  * `parents`: an array of `google_dlp_job` parent\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_stored_info_type.md",
    "content": "+++\ntitle = \"google_dlp_stored_info_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_stored_info_type\"\nidentifier = \"inspec/resources/gcp/google_dlp_stored_info_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_stored_info_type` InSpec audit resource to to test a Google Cloud StoredInfoType resource.\n\n## Examples\n\n```ruby\ndescribe google_dlp_stored_info_type(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\",name: '') do\nit { should exist }\nits('name') { should cmp 'i-inspec-gcp-dlp' }\nits('type') { should cmp 'INSPECT_JOB' }\nits('state') { should cmp 'ACTIVE' }\nend\n\ndescribe google_dlp_stored_info_type(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\", name: 'nonexistent') do\nit { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_stored_info_type` resource:\n\n\n  * `name`: The resource name of the info type. Set by the server.\n\n  * `description`: A description of the info type.\n\n  * `display_name`: User set display name of the info type.\n\n  * `regex`: Regular expression which defines the rule.\n\n    * `pattern`: Pattern defining the regular expression. Its syntax (https://github.com/google/re2/wiki/Syntax) can be found under the google/re2 repository on GitHub.\n\n    * `group_indexes`: The index of the submatch to extract as findings. When not specified, the entire match is returned. No more than 3 may be included.\n\n  * `dictionary`: Dictionary which defines the rule.\n\n    * `word_list`: List of words or phrases to search for.\n\n      * `words`: Words or phrases defining the dictionary. The dictionary must contain at least one phrase and every phrase must contain at least 2 characters that are letters or digits.\n\n    * `cloud_storage_path`: Newline-delimited file of words in Cloud Storage. Only a single file is accepted.\n\n      * `path`: A url representing a file or path (no wildcards) in Cloud Storage. Example: `gs://[BUCKET_NAME]/dictionary.txt`\n\n  * `large_custom_dictionary`: Dictionary which defines the rule.\n\n    * `output_path`: Location to store dictionary artifacts in Google Cloud Storage. These files will only be accessible by project owners and the DLP API. If any of these artifacts are modified, the dictionary is considered invalid and can no longer be used.\n\n      * `path`: A url representing a file or path (no wildcards) in Cloud Storage. Example: `gs://[BUCKET_NAME]/dictionary.txt`\n\n    * `cloud_storage_file_set`: Set of files containing newline-delimited lists of dictionary phrases.\n\n      * `url`: The url, in the format `gs://<bucket>/<path>`. Trailing wildcard in the path is allowed.\n\n    * `big_query_field`: Field in a BigQuery table where each cell represents a dictionary phrase.\n\n      * `table`: Field in a BigQuery table where each cell represents a dictionary phrase.\n\n        * `project_id`: The Google Cloud Platform project ID of the project containing the table.\n\n        * `dataset_id`: The dataset ID of the table.\n\n        * `table_id`: The name of the table.\n\n      * `field`: Designated field in the BigQuery table.\n\n        * `name`: Name describing the field.\n\n  * `parent`: The parent of the info type in any of the following formats:  * `projects/{{project}}` * `projects/{{project}}/locations/{{location}}` * `organizations/{{organization_id}}` * `organizations/{{organization_id}}/locations/{{location}}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dlp_stored_info_types.md",
    "content": "+++\ntitle = \"google_dlp_stored_info_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dlp_stored_info_types\"\nidentifier = \"inspec/resources/gcp/google_dlp_stored_info_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_dlp_stored_info_types` InSpec audit resource to to test a Google Cloud StoredInfoType resource.\n\n## Examples\n\n```ruby\n\ndescribe google_dlp_stored_info_types(parent: \"projects/#{'chef-gcp-inspec'}/locations/#{'us-east-2'}\") do\nit { should exist }\nits('names') { should include 'i-inspec-gcp-dlp' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dlp_stored_info_types` resource:\n\nSee [google_dlp_stored_info_type](google_dlp_stored_info_type) for more detailed information.\n\n  * `names`: an array of `google_dlp_stored_info_type` name\n  * `descriptions`: an array of `google_dlp_stored_info_type` description\n  * `display_names`: an array of `google_dlp_stored_info_type` display_name\n  * `regexes`: an array of `google_dlp_stored_info_type` regex\n  * `dictionaries`: an array of `google_dlp_stored_info_type` dictionary\n  * `large_custom_dictionaries`: an array of `google_dlp_stored_info_type` large_custom_dictionary\n  * `parents`: an array of `google_dlp_stored_info_type` parent\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_dns_managed_zone.md",
    "content": "+++\ntitle = \"google_dns_managed_zone resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dns_managed_zone\"\nidentifier = \"inspec/resources/gcp/google_dns_managed_zone resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dns_managed_zone` is used to test a Google ManagedZone resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dns_managed_zone(project: 'chef-gcp-inspec', zone: 'example-zone') do\n  it { should exist }\n  its('dns_name') { should cmp 'dns-zone-name.com.' }\n\n  its('description') { should cmp 'example description' }\n  its('zone_signing_key_algorithm') { should cmp 'rsasha256' }\n  its('key_signing_key_algorithm') { should cmp 'rsasha512' }\nend\n\ndescribe google_dns_managed_zone(project: 'chef-gcp-inspec', zone: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute zone exists\n\n    describe google_dns_managed_zone(project: 'chef-inspec-gcp',  zone: 'zone-name') do\n      it { should exist }\n    end\n\n### Test that a GCP DNS managed zone has the expected DNS name\n\n    describe google_dns_managed_zone(project: 'chef-inspec-gcp',  zone: 'zone-name') do\n      its('dns_name') { should match 'mydomain.com' }\n    end\n\n### Test that a GCP DNS managed zone has expected name server\n\n    describe google_dns_managed_zone(project: 'chef-inspec-gcp',  zone: 'zone-name') do\n      its('name_servers') { should include 'ns-cloud-d1.googledomains.com.' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_dns_managed_zone` resource:\n\n\n  * `description`: A mutable string of at most 1024 characters associated with this resource for the user's convenience. Has no effect on the managed zone's function.\n\n  * `dns_name`: The DNS name of this managed zone, for instance \"example.com.\".\n\n  * `dnssec_config`: DNSSEC configuration\n\n    * `kind`: Identifies what kind of resource this is\n\n    * `non_existence`: Specifies the mechanism used to provide authenticated denial-of-existence responses. non_existence can only be updated when the state is `off`.\n    Possible values:\n      * nsec\n      * nsec3\n\n    * `state`: Specifies whether DNSSEC is enabled, and what mode it is in\n    Possible values:\n      * off\n      * on\n      * transfer\n\n    * `default_key_specs`: Specifies parameters that will be used for generating initial DnsKeys for this ManagedZone. If you provide a spec for keySigning or zoneSigning, you must also provide one for the other. default_key_specs can only be updated when the state is `off`.\n\n      * `algorithm`: String mnemonic specifying the DNSSEC algorithm of this key\n      Possible values:\n        * ecdsap256sha256\n        * ecdsap384sha384\n        * rsasha1\n        * rsasha256\n        * rsasha512\n\n      * `key_length`: Length of the keys in bits\n\n      * `key_type`: Specifies whether this is a key signing key (KSK) or a zone signing key (ZSK). Key signing keys have the Secure Entry Point flag set and, when active, will only be used to sign resource record sets of type DNSKEY. Zone signing keys do not have the Secure Entry Point flag set and will be used to sign all other types of resource record sets.\n      Possible values:\n        * keySigning\n        * zoneSigning\n\n      * `kind`: Identifies what kind of resource this is\n\n  * `id`: Unique identifier for the resource; defined by the server.\n\n  * `name`: User assigned name for this resource. Must be unique within the project.\n\n  * `name_servers`: Delegate your managed_zone to these virtual name servers; defined by the server\n\n  * `name_server_set`: Optionally specifies the NameServerSet for this ManagedZone. A NameServerSet is a set of DNS name servers that all host the same ManagedZones. Most users will leave this field unset.\n\n  * `creation_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `labels`: A set of key/value label pairs to assign to this ManagedZone.\n\n  * `visibility`: The zone's visibility: public zones are exposed to the Internet, while private zones are visible only to Virtual Private Cloud resources.\n  Possible values:\n    * private\n    * public\n\n  * `private_visibility_config`: For privately visible zones, the set of Virtual Private Cloud resources that the zone is visible from.\n\n    * `networks`: The list of VPC networks that can see this zone.\n\n      * `network_url`: The fully qualified URL of the VPC network to bind to. This should be formatted like `https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}`\n\n  * `forwarding_config`: The presence for this field indicates that outbound forwarding is enabled for this zone. The value of this field contains the set of destinations to forward to.\n\n    * `target_name_servers`: List of target name servers to forward to. Cloud DNS will select the best available name server if more than one target is given.\n\n      * `ipv4_address`: IPv4 address of a target name server.\n\n      * `forwarding_path`: Forwarding path for this TargetNameServer. If unset or `default` Cloud DNS will make forwarding decision based on address ranges, i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the Internet. When set to `private`, Cloud DNS will always send queries through VPC for this target\n      Possible values:\n        * default\n        * private\n\n  * `peering_config`: The presence of this field indicates that DNS Peering is enabled for this zone. The value of this field contains the network to peer with.\n\n    * `target_network`: The network with which to peer.\n\n      * `network_url`: The fully qualified URL of the VPC network to forward queries to. This should be formatted like `https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}`\n\n  * `reverse_lookup`: (Beta only) Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using automatically configured records for VPC resources. This only applies to networks listed under `private_visibility_config`.\n\n  * `service_directory_config`: (Beta only) The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone.\n\n    * `namespace`: The namespace associated with the zone.\n\n      * `namespace_url`: The fully qualified URL of the service directory namespace that should be associated with the zone. Ignored for `public` visibility zones.\n\n\n## GCP permissions\n\nEnsure the [Google Cloud DNS API](https://console.cloud.google.com/apis/library/dns.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dns_managed_zones.md",
    "content": "+++\ntitle = \"google_dns_managed_zones resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dns_managed_zones\"\nidentifier = \"inspec/resources/gcp/google_dns_managed_zones resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dns_managed_zones` is used to test a Google ManagedZone resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dns_managed_zones(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('zone_names') { should include 'example-zone' }\n  its('zone_dns_names') { should include 'dns-zone-name.com.' }\nend\n```\n\n### Test that there are no more than a specified number of zones available for the project\n\n    describe google_dns_managed_zones(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected, named managed zone is available for the project\n\n    describe google_dns_managed_zones(project: 'chef-inspec-gcp') do\n      its('zone_names') { should include \"zone-name\" }\n    end\n\n### Test that a subset of all zones matching \"myzone*\" exist\n\n    google_dns_managed_zones(project: 'chef-inspec-gcp').where(zone_name: /^myzone/).zone_names.each do |zone_name|\n      describe google_dns_managed_zone(project: 'chef-inspec-gcp',  zone: zone_name) do\n        it { should exist }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_dns_managed_zones` resource:\n\nSee [google_dns_managed_zone](google_dns_managed_zone) for more detailed information.\n\n  * `descriptions`: an array of `google_dns_managed_zone` description\n  * `zone_dns_names`: an array of `google_dns_managed_zone` dns_name\n  * `dnssec_configs`: an array of `google_dns_managed_zone` dnssec_config\n  * `zone_ids`: an array of `google_dns_managed_zone` id\n  * `zone_names`: an array of `google_dns_managed_zone` name\n  * `name_servers`: an array of `google_dns_managed_zone` name_servers\n  * `name_server_sets`: an array of `google_dns_managed_zone` name_server_set\n  * `creation_times`: an array of `google_dns_managed_zone` creation_time\n  * `labels`: an array of `google_dns_managed_zone` labels\n  * `visibilities`: an array of `google_dns_managed_zone` visibility\n  * `private_visibility_configs`: an array of `google_dns_managed_zone` private_visibility_config\n  * `forwarding_configs`: an array of `google_dns_managed_zone` forwarding_config\n  * `peering_configs`: an array of `google_dns_managed_zone` peering_config\n  * `reverse_lookups`: (Beta only) an array of `google_dns_managed_zone` reverse_lookup\n  * `service_directory_configs`: (Beta only) an array of `google_dns_managed_zone` service_directory_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Google Cloud DNS API](https://console.cloud.google.com/apis/library/dns.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dns_resource_record_set.md",
    "content": "+++\ntitle = \"google_dns_resource_record_set resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dns_resource_record_set\"\nidentifier = \"inspec/resources/gcp/google_dns_resource_record_set resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dns_resource_record_set` is used to test a Google ResourceRecordSet resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dns_resource_record_set(project: 'chef-gcp-inspec', name: 'backend.my.domain.com.', type: 'A', managed_zone: 'inspec-gcp-managed-zone') do\n  it { should exist }\n  its('type') { should eq 'A' }\n  its('ttl') { should eq '300' }\n  its('target') { should include '8.8.8.8' }\n  its('target') { should include '8.8.4.4' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dns_resource_record_set` resource:\n\n\n  * `name`: For example, www.example.com.\n\n  * `type`: One of valid DNS resource types.\n  Possible values:\n    * A\n    * AAAA\n    * CAA\n    * CNAME\n    * MX\n    * NAPTR\n    * NS\n    * PTR\n    * SOA\n    * SPF\n    * SRV\n    * TLSA\n    * TXT\n\n  * `ttl`: Number of seconds that this ResourceRecordSet can be cached by resolvers.\n\n  * `target`: As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1)\n\n  * `managed_zone`: Identifies the managed zone addressed by this request.\n\n\n## GCP permissions\n\nEnsure the [Google Cloud DNS API](https://console.cloud.google.com/apis/library/dns.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_dns_resource_record_sets.md",
    "content": "+++\ntitle = \"google_dns_resource_record_sets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_dns_resource_record_sets\"\nidentifier = \"inspec/resources/gcp/google_dns_resource_record_sets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_dns_resource_record_sets` is used to test a Google ResourceRecordSet resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_dns_resource_record_sets(project: 'chef-gcp-inspec', name: 'backend.my.domain.com.', managed_zone: 'inspec-gcp-managed-zone') do\n  its('count') { should eq 3 }\n  its('types') { should include 'A' }\n  its('ttls') { should include '300' }\n  its('targets.flatten') { should include '8.8.8.8' }\n  its('targets.flatten') { should include '8.8.4.4' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_dns_resource_record_sets` resource:\n\nSee [google_dns_resource_record_set](google_dns_resource_record_set) for more detailed information.\n\n  * `names`: an array of `google_dns_resource_record_set` name\n  * `types`: an array of `google_dns_resource_record_set` type\n  * `ttls`: an array of `google_dns_resource_record_set` ttl\n  * `targets`: an array of `google_dns_resource_record_set` target\n  * `managed_zones`: an array of `google_dns_resource_record_set` managed_zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Google Cloud DNS API](https://console.cloud.google.com/apis/library/dns.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_filestore_instance.md",
    "content": "+++\ntitle = \"google_filestore_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_filestore_instance\"\nidentifier = \"inspec/resources/gcp/google_filestore_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_filestore_instance` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_filestore_instance(project: 'chef-gcp-inspec', zone: 'us-central1-b', name: 'inspecgcp') do\n  it { should exist }\n  its('tier') { should cmp 'PREMIUM' }\n  its('file_shares.count') { should cmp 1 }\n  its('file_shares.first.capacity_gb') { should cmp '2660' }\n  its('file_shares.first.name') { should cmp 'inspecgcp' }\n  its('networks.count') { should cmp 1 }\n  its('networks.first.network') { should cmp 'default' }\n  its('networks.first.modes') { should include 'MODE_IPV4' }\nend\n\ndescribe google_filestore_instance(project: 'chef-gcp-inspec', zone: 'us-central1-b', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_filestore_instance` resource:\n\n\n  * `name`: The resource name of the instance.\n\n  * `description`: A description of the instance.\n\n  * `create_time`: Creation timestamp in RFC3339 text format.\n\n  * `tier`: The service tier of the instance.\n  Possible values:\n    * TIER_UNSPECIFIED\n    * STANDARD\n    * PREMIUM\n    * BASIC_HDD\n    * BASIC_SSD\n    * HIGH_SCALE_SSD\n\n  * `labels`: Resource labels to represent user-provided metadata.\n\n  * `file_shares`: File system shares on the instance. For this version, only a single file share is supported.\n\n    * `name`: The name of the fileshare (16 characters or less)\n\n    * `capacity_gb`: File share capacity in GiB. This must be at least 1024 GiB for the standard tier, or 2560 GiB for the premium tier.\n\n    * `nfs_export_options`: (Beta only) Nfs Export Options. There is a limit of 10 export options per file share.\n\n      * `ip_ranges`: List of either IPv4 addresses, or ranges in CIDR notation which may mount the file share. Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned. The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.\n\n      * `access_mode`: Either READ_ONLY, for allowing only read requests on the exported directory, or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.\n      Possible values:\n        * READ_ONLY\n        * READ_WRITE\n\n      * `squash_mode`: Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH, for not allowing root access. The default is NO_ROOT_SQUASH.\n      Possible values:\n        * NO_ROOT_SQUASH\n        * ROOT_SQUASH\n\n      * `anon_uid`: An integer representing the anonymous user id with a default value of 65534. Anon_uid may only be set with squashMode of ROOT_SQUASH. An error will be returned if this field is specified for other squashMode settings.\n\n      * `anon_gid`: An integer representing the anonymous group id with a default value of 65534. Anon_gid may only be set with squashMode of ROOT_SQUASH. An error will be returned if this field is specified for other squashMode settings.\n\n  * `networks`: VPC networks to which the instance is connected. For this version, only a single network is supported.\n\n    * `network`: The name of the GCE VPC network to which the instance is connected.\n\n    * `modes`: IP versions for which the instance has IP addresses assigned.\n\n    * `reserved_ip_range`: A /29 CIDR block that identifies the range of IP addresses reserved for this instance.\n\n    * `ip_addresses`: A list of IPv4 or IPv6 addresses.\n\n  * `etag`: Server-specified ETag for the instance resource to prevent simultaneous updates from overwriting each other.\n\n  * `zone`: The name of the Filestore zone of the instance.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_filestore_instances.md",
    "content": "+++\ntitle = \"google_filestore_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_filestore_instances\"\nidentifier = \"inspec/resources/gcp/google_filestore_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_filestore_instances` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_filestore_instances(project: 'chef-gcp-inspec', zone: 'us-central1-b') do\n  its('tiers') { should include 'PREMIUM' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_filestore_instances` resource:\n\nSee [google_filestore_instance](google_filestore_instance) for more detailed information.\n\n  * `names`: an array of `google_filestore_instance` name\n  * `descriptions`: an array of `google_filestore_instance` description\n  * `create_times`: an array of `google_filestore_instance` create_time\n  * `tiers`: an array of `google_filestore_instance` tier\n  * `labels`: an array of `google_filestore_instance` labels\n  * `file_shares`: an array of `google_filestore_instance` file_shares\n  * `networks`: an array of `google_filestore_instance` networks\n  * `etags`: an array of `google_filestore_instance` etag\n  * `zones`: an array of `google_filestore_instance` zone\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_custom_role.md",
    "content": "+++\ntitle = \"google_iam_custom_role resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_custom_role\"\nidentifier = \"inspec/resources/gcp/google_iam_custom_role resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_custom_role` InSpec audit resource to to test a Google Cloud CustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_custom_role(project: 'chef-gcp-inspec', name: 'admin-role') do\n  it { should exist }\n  its('stage') { should eq 'GA' }\n  its('included_permissions') { should eq [\"iam.roles.list\"] }\nend\n\ndescribe google_iam_custom_role(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_custom_role` resource:\n\n\n  * `name`: The name of the role.\n\n  * `title`: A human-readable title for the role. Typically this is limited to 100 UTF-8 bytes.\n\n  * `description`: Human-readable description for the role\n\n  * `included_permissions`: Names of permissions this role grants when bound in an IAM policy.\n\n  * `stage`: The current launch stage of the role.\n\n  * `deleted`: The current deleted state of the role\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_custom_roles.md",
    "content": "+++\ntitle = \"google_iam_custom_roles resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_custom_roles\"\nidentifier = \"inspec/resources/gcp/google_iam_custom_roles resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_custom_roles` InSpec audit resource to to test a Google Cloud CustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_custom_roles(project: 'chef-gcp-inspec') do\n  its('names') { should include \"projects/project-id/roles/role-id\" }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_custom_roles` resource:\n\nSee [google_iam_custom_role](google_iam_custom_role) for more detailed information.\n\n  * `names`: an array of `google_iam_custom_role` name\n  * `titles`: an array of `google_iam_custom_role` title\n  * `descriptions`: an array of `google_iam_custom_role` description\n  * `included_permissions`: an array of `google_iam_custom_role` included_permissions\n  * `stages`: an array of `google_iam_custom_role` stage\n  * `deleteds`: an array of `google_iam_custom_role` deleted\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_organization_custom_role.md",
    "content": "+++\ntitle = \"google_iam_organization_custom_role resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_organization_custom_role\"\nidentifier = \"inspec/resources/gcp/google_iam_organization_custom_role resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_organization_custom_role` InSpec audit resource to to test a Google Cloud OrganizationCustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_organization_custom_role(org_id: '12345', name: 'org-role') do\n  it { should exist }\n  its('stage') { should eq 'GA' }\n  its('included_permissions') { should eq [\"iam.roles.list\"] }\nend\n\ndescribe google_iam_organization_custom_role(org_id: '12345', name: 'org-role', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_organization_custom_role` resource:\n\n\n  * `name`: The name of the role.\n\n  * `title`: A human-readable title for the role. Typically this is limited to 100 UTF-8 bytes.\n\n  * `description`: Human-readable description for the role\n\n  * `included_permissions`: Names of permissions this role grants when bound in an IAM policy.\n\n  * `stage`: The current launch stage of the role.\n  Possible values:\n    * ALPHA\n    * BETA\n    * GA\n    * DEPRECATED\n    * DISABLED\n    * EAP\n\n  * `deleted`: The current deleted state of the role\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_organization_custom_roles.md",
    "content": "+++\ntitle = \"google_iam_organization_custom_roles resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_organization_custom_roles\"\nidentifier = \"inspec/resources/gcp/google_iam_organization_custom_roles resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_organization_custom_roles` InSpec audit resource to to test a Google Cloud OrganizationCustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_organization_custom_roles(org_id: '190694428152') do\n  its('names') { should include \"organizations/123456/roles/role-id\" }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_organization_custom_roles` resource:\n\nSee [google_iam_organization_custom_role](google_iam_organization_custom_role) for more detailed information.\n\n  * `names`: an array of `google_iam_organization_custom_role` name\n  * `titles`: an array of `google_iam_organization_custom_role` title\n  * `descriptions`: an array of `google_iam_organization_custom_role` description\n  * `included_permissions`: an array of `google_iam_organization_custom_role` included_permissions\n  * `stages`: an array of `google_iam_organization_custom_role` stage\n  * `deleteds`: an array of `google_iam_organization_custom_role` deleted\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_service_account.md",
    "content": "+++\ntitle = \"google_iam_service_account resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_service_account\"\nidentifier = \"inspec/resources/gcp/google_iam_service_account resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_service_account` InSpec audit resource to to test a Google Cloud ServiceAccount resource.\n\n## Examples\n\n```ruby\ndescribe google_service_account(project: 'chef-gcp-inspec', name: \"display-name@project-id.iam.gserviceaccount.com\") do\n  it { should exist }\n  its('display_name') { should cmp '' }\nend\n\ndescribe google_service_account(project: 'chef-gcp-inspec', name: \"nonexistent@project-id.iam.gserviceaccount.com\") do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_service_account` resource:\n\n\n  * `name`: The name of the service account.\n\n  * `project_id`: Id of the project that owns the service account.\n\n  * `unique_id`: Unique and stable id of the service account\n\n  * `email`: Email address of the service account.\n\n  * `display_name`: User specified description of service account.\n\n  * `oauth2_client_id`: OAuth2 client id for the service account.\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_service_account_key.md",
    "content": "+++\ntitle = \"google_iam_service_account_key resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_service_account_key\"\nidentifier = \"inspec/resources/gcp/google_iam_service_account_key resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_service_account_key` InSpec audit resource to to test a Google Cloud ServiceAccountKey resource.\n\n## Examples\n\n```ruby\ngoogle_iam_service_account_keys(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\").key_names.each do |sa_key_name|\n\tdescribe \nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_service_account_key` resource:\n\n\n  * `name`: The name of the key.\n\n  * `private_key_type`: Output format for the service account key.\n\n  * `key_algorithm`: Specifies the algorithm for the key.\n\n  * `private_key_data`: Private key data. Base-64 encoded.\n\n  * `public_key_data`: Public key data. Base-64 encoded.\n\n  * `valid_after_time`: Key can only be used after this time.\n\n  * `valid_before_time`: Key can only be used before this time.\n\n  * `key_type`: Specifies the type of the key. Possible values include KEY_TYPE_UNSPECIFIED, USER_MANAGED and SYSTEM_MANAGED\n\n  * `service_account`: The name of the serviceAccount.\n\n  * `path`: The full name of the file that will hold the service account private key. The management of this file will depend on the value of sync_file parameter.  File path must be absolute.\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_service_account_keys.md",
    "content": "+++\ntitle = \"google_iam_service_account_keys resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_service_account_keys\"\nidentifier = \"inspec/resources/gcp/google_iam_service_account_keys resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_service_account_keys` InSpec audit resource to to test a Google Cloud ServiceAccountKey resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_service_account_keys(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\") do\n  its('count') { should be <= 1000 }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_service_account_keys` resource:\n\nSee [google_iam_service_account_key](google_iam_service_account_key) for more detailed information.\n\n  * `key_names`: an array of `google_iam_service_account_key` name\n  * `private_key_types`: an array of `google_iam_service_account_key` private_key_type\n  * `key_algorithms`: an array of `google_iam_service_account_key` key_algorithm\n  * `private_key_data`: an array of `google_iam_service_account_key` private_key_data\n  * `public_key_data`: an array of `google_iam_service_account_key` public_key_data\n  * `valid_after_times`: an array of `google_iam_service_account_key` valid_after_time\n  * `valid_before_times`: an array of `google_iam_service_account_key` valid_before_time\n  * `key_types`: an array of `google_iam_service_account_key` key_type\n  * `service_accounts`: an array of `google_iam_service_account_key` service_account\n  * `paths`: an array of `google_iam_service_account_key` path\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_iam_service_accounts.md",
    "content": "+++\ntitle = \"google_iam_service_accounts resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_iam_service_accounts\"\nidentifier = \"inspec/resources/gcp/google_iam_service_accounts resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_iam_service_accounts` InSpec audit resource to to test a Google Cloud ServiceAccount resource.\n\n## Examples\n\n```ruby\ndescribe google_iam_service_accounts(project: 'chef-gcp-inspec', name: \"display-name@project-id.iam.gserviceaccount.com\") do\n  its('service_account_emails') { should include \"display-name@project-id.iam.gserviceaccount.com\" }\n  its('count') { should be <= 1000 }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_iam_service_accounts` resource:\n\nSee [google_iam_service_account](google_iam_service_account) for more detailed information.\n\n  * `service_account_names`: an array of `google_iam_service_account` name\n  * `project_ids`: an array of `google_iam_service_account` project_id\n  * `service_account_ids`: an array of `google_iam_service_account` unique_id\n  * `service_account_emails`: an array of `google_iam_service_account` email\n  * `service_account_display_names`: an array of `google_iam_service_account` display_name\n  * `oauth2_client_ids`: an array of `google_iam_service_account` oauth2_client_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key.md",
    "content": "+++\ntitle = \"google_kms_crypto_key resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_crypto_key` InSpec audit resource to to test a Google Cloud CryptoKey resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_key(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring_name: 'kms-key-ring', name: 'kms-key') do\n  it { should exist }\n  its('crypto_key_name') { should cmp 'kms-key' }\n  its('primary_state') { should eq \"ENABLED\" }\n  its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n  its('next_rotation_time') { should be > Time.now - 100000 }\n  its('create_time') { should be > Time.now - 365*60*60*24*10 }\nend\n\ndescribe google_kms_crypto_key(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring_name: 'kms-key-ring', name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP KMS crypto key was created recently\n\n    describe google_kms_crypto_key(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring', name: 'crypto-key') do\n      its('create_time_date') { should be > Time.now - 365*60*60*24*10 }\n    end\n\n### Test when the next rotation time for a GCP KMS crypto key is scheduled\n\n    describe google_kms_crypto_key(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring', name: 'crypto-key') do\n      its('next_rotation_time_date') { should be > Time.now - 100000 }\n    end\n    \n### Check that the crypto key purpose is as expected\n    \n    describe google_kms_crypto_key(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring', name: 'crypto-key') do\n      its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n    end\n\n### Check that the crypto key primary is in \"ENABLED\" state\n    \n    describe google_kms_crypto_key(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring', name: 'crypto-key') do\n      its('primary_state') { should eq \"ENABLED\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_key` resource:\n\n\n  * `crypto_key_name`: The resource name for the CryptoKey.\n\n  * `create_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `labels`: Labels with user-defined metadata to apply to this resource.\n\n  * `purpose`: The immutable purpose of this CryptoKey. See the [purpose reference](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys#CryptoKeyPurpose) for possible inputs.\n  Possible values:\n    * ENCRYPT_DECRYPT\n    * ASYMMETRIC_SIGN\n    * ASYMMETRIC_DECRYPT\n\n  * `rotation_period`: Every time this period passes, generate a new CryptoKeyVersion and set it as the primary. The first rotation will take place after the specified period. The rotation period has the format of a decimal number with up to 9 fractional digits, followed by the letter `s` (seconds). It must be greater than a day (ie, 86400).\n\n  * `version_template`: A template describing settings for new crypto key versions.\n\n    * `algorithm`: The algorithm to use when creating a version based on this template. See the [algorithm reference](https://cloud.google.com/kms/docs/reference/rest/v1/CryptoKeyVersionAlgorithm) for possible inputs.\n\n    * `protection_level`: The protection level to use when creating a version based on this template.\n    Possible values:\n      * SOFTWARE\n      * HSM\n\n  * `next_rotation_time`: The time when KMS will create a new version of this Crypto Key.\n\n  * `key_ring`: The KeyRing that this key belongs to. Format: `'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'`.\n\n  * `skip_initial_version_creation`: If set to true, the request will create a CryptoKey without any CryptoKeyVersions.  You must use the `google_kms_key_ring_import_job` resource to import the CryptoKeyVersion.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key_iam_binding.md",
    "content": "+++\ntitle = \"google_kms_crypto_key_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_kms_crypto_key_iam_binding` is used to test a Google CryptoKey Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_key_iam_binding(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\", crypto_key_name: \"crypto_key_name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_key_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key_iam_bindings.md",
    "content": "+++\ntitle = \"google_kms_crypto_key_iam_bindings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key_iam_bindings\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key_iam_bindings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_kms\\_crypto\\_key\\_iam\\_bindings\n\n**This resource is deprecated. Please use google_kms_crypto_key_iam_policy instead**\n\nUse the `google_kms_crypto_key_iam_bindings` InSpec audit resource to test properties of all, or a filtered group of, GCP KMS Crypto Key IAM Bindings.\n\n<br>\n\n## Syntax\n\nA `google_kms_crypto_key_iam_bindings` resource block collects GCP KMS Crypto Key IAM Bindings then tests that group.\n\n    describe google_kms_crypto_key_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name') do\n      it { should exist }\n    end\n\nUse this InSpec resource to enumerate roles then test in-depth using `google_kms_key_ring_iam_binding`.\n\n    google_kms_crypto_key_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name').iam_binding_roles.each do |iam_binding_role|\n      describe google_kms_crypto_key_iam_binding(crypto_key_url:  'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name',  role: \"roles/owner\") do\n        it { should exist }\n        its('members') {should include 'user:someuser@domain.com' }\n      end\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that there are no more than a specified number of IAM bindings roles available for the crypto key\n\n    describe google_kms_crypto_key_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected IAM binding is available for the crypto key\n\n    describe google_kms_crypto_key_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name') do\n      its('iam_binding_roles') { should include \"roles/storage.admin\" }\n    end\n    \n### Test that a particular role does not exist using filtering of the plural resource\n\n    describe google_kms_crypto_key_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name').where(iam_binding_role: \"roles/iam.securityReviewer\") do\n      it { should_not exist }\n    end\n\n<br>\n\n## Filter criteria\n\nThis resource supports the following filter criteria:  `iam_binding_role`.  This may be used with `where`, as a block or as a method.\n\n## Properties\n\n*  `iam_binding_roles` - an array of google_kms_crypto_key_iam_binding role strings e.g. `[\"roles/compute.admin\", \"roles/owner\"]`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the project where the resource is located.s"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key_iam_policy.md",
    "content": "+++\ntitle = \"google_kms_crypto_key_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_kms_crypto_key_iam_policy` is used to test a Google CryptoKey Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_key_iam_policy(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\", crypto_key_name: \"crypto_key_name\") do\n  it { should exist }\nend\n\ngoogle_kms_crypto_key_iam_policy(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\", crypto_key_name: \"crypto_key_name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_key_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key_version.md",
    "content": "+++\ntitle = \"google_kms_crypto_key_version resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key_version\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key_version resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_crypto_key_version` InSpec audit resource to to test a Google Cloud CryptoKeyVersion resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_key_version(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring: 'kms-key-ring', crypto_key: '', name: 'kms-key') do\n  it { should exist }\n  its('crypto_key_name') { should cmp 'kms-key' }\n  its('primary_state') { should eq \"ENABLED\" }\n  its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n  its('next_rotation_time') { should be > Time.now - 100000 }\n  its('create_time') { should be > Time.now - 365*60*60*24*10 }\nend\n\ndescribe google_kms_crypto_key_version(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring: 'kms-key-ring', crypto_key: '', name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_key_version` resource:\n\n\n  * `name`: The resource name for the CryptoKey.\n\n  * `create_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `generate_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `destroy_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `destroy_event_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `state`: The state of a CryptoKeyVersion, indicating if it can be used.\n  Possible values:\n    * CRYPTO_KEY_VERSION_STATE_UNSPECIFIED\n    * PENDING_GENERATION\n    * ENABLED\n    * DISABLED\n    * DESTROYED\n    * DESTROY_SCHEDULED\n    * PENDING_IMPORT\n    * IMPORT_FAILED\n\n  * `protection_level`: ProtectionLevel specifies how cryptographic operations are performed. For more information, see Protection levels.\n  Possible values:\n    * PROTECTION_LEVEL_UNSPECIFIED\n    * SOFTWARE\n    * HSM\n    * EXTERNAL\n    * EXTERNAL_VPC\n\n  * `algorithm`: The algorithm of the CryptoKeyVersion, indicating what parameters must be used for each cryptographic operation. The GOOGLE_SYMMETRIC_ENCRYPTION algorithm is usable with CryptoKey.purpose ENCRYPT_DECRYPT. Algorithms beginning with \"RSA_SIGN_\" are usable with CryptoKey.purpose ASYMMETRIC_SIGN. The fields in the name after \"RSA_SIGN_\" correspond to the following parameters: padding algorithm, modulus bit length, and digest algorithm. For PSS, the salt length used is equal to the length of digest algorithm. For example, RSA_SIGN_PSS_2048_SHA256 will use PSS with a salt length of 256 bits or 32 bytes. Algorithms beginning with \"RSA_DECRYPT_\" are usable with CryptoKey.purpose ASYMMETRIC_DECRYPT. The fields in the name after \"RSA_DECRYPT_\" correspond to the following parameters: padding algorithm, modulus bit length, and digest algorithm. Algorithms beginning with \"EC_SIGN_\" are usable with CryptoKey.purpose ASYMMETRIC_SIGN. The fields in the name after \"EC_SIGN_\" correspond to the following parameters: elliptic curve, digest algorithm. Algorithms beginning with \"HMAC_\" are usable with CryptoKey.purpose MAC. The suffix following \"HMAC_\" corresponds to the hash algorithm being used (eg. SHA256).\n  Possible values:\n    * CRYPTO_KEY_VERSION_ALGORITHM_UNSPECIFIED\n    * GOOGLE_SYMMETRIC_ENCRYPTION\n    * RSA_SIGN_PSS_2048_SHA256\n    * RSA_SIGN_PSS_3072_SHA256\n    * RSA_SIGN_PSS_4096_SHA256\n    * RSA_SIGN_PSS_4096_SHA512\n    * RSA_SIGN_PKCS1_2048_SHA256\n    * RSA_SIGN_PKCS1_3072_SHA256\n    * RSA_SIGN_PKCS1_4096_SHA512\n    * RSA_SIGN_PKCS1_4096_SHA256\n    * RSA_SIGN_RAW_PKCS1_2048\n    * RSA_SIGN_RAW_PKCS1_3072\n    * RSA_SIGN_RAW_PKCS1_4096\n    * RSA_DECRYPT_OAEP_2048_SHA256\n    * RSA_DECRYPT_OAEP_3072_SHA256\n    * RSA_DECRYPT_OAEP_4096_SHA256\n    * RSA_DECRYPT_OAEP_4096_SHA512\n    * RSA_DECRYPT_OAEP_2048_SHA1\n    * RSA_DECRYPT_OAEP_3072_SHA1\n    * RSA_DECRYPT_OAEP_4096_SHA1\n    * EC_SIGN_P256_SHA256\n    * EC_SIGN_P384_SHA384\n    * EC_SIGN_SECP256K1_SHA256\n    * HMAC_SHA256\n    * EXTERNAL_SYMMETRIC_ENCRYPTION\n\n  * `attestation`: Statement that was generated and signed by the key creator (for example, an HSM) at key creation time. Use this statement to verify attributes of the key as stored on the HSM, independently of Google. Only present if the chosen ImportMethod is one with a protection level of HSM.\n\n    * `format`: The format of the attestation data.\n\n    * `content`: The attestation data provided by the HSM when the key operation was performed. A base64-encoded string.\n\n  * `import_job`: Output only. The name of the ImportJob used in the most recent import of this CryptoKeyVersion. Only present if the underlying key material was imported.\n\n  * `import_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `import_failure_reason`: Output only. The root cause of the most recent import failure. Only present if state is IMPORT_FAILED.\n\n  * `external_protection_level_options`: ExternalProtectionLevelOptions stores a group of additional fields for configuring a CryptoKeyVersion that are specific to the EXTERNAL protection level and EXTERNAL_VPC protection levels.\n\n    * `external_key_uri`: The URI for an external resource that this CryptoKeyVersion represents.\n\n    * `ekm_connection_key_path`: The path to the external key material on the EKM when using EkmConnection e.g., \"v0/my/key\". Set this field instead of externalKeyUri when using an EkmConnection.\n\n  * `reimport_eligible`: Output only. Whether or not this key version is eligible for reimport, by being specified as a target in ImportCryptoKeyVersionRequest.crypto_key_version.\n\n  * `key_ring`: The KeyRing that this key belongs to. Format: `'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'`.\n\n  * `crypto_key`: The KeyRing that this key belongs to. Format: `'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{cryptoKey}}'`.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_key_versions.md",
    "content": "+++\ntitle = \"google_kms_crypto_key_versions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_key_versions\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_key_versions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_crypto_key_versions` InSpec audit resource to to test a Google Cloud CryptoKeyVersion resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_key_versions(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring: 'kms-key-ring', crypto_key: '') do\n  its('count') { should be >= 1 }\n  its('crypto_key_names') { should include 'kms-key' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_key_versions` resource:\n\nSee [google_kms_crypto_key_version](google_kms_crypto_key_version) for more detailed information.\n\n  * `names`: an array of `google_kms_crypto_key_version` name\n  * `create_times`: an array of `google_kms_crypto_key_version` create_time\n  * `generate_times`: an array of `google_kms_crypto_key_version` generate_time\n  * `destroy_times`: an array of `google_kms_crypto_key_version` destroy_time\n  * `destroy_event_times`: an array of `google_kms_crypto_key_version` destroy_event_time\n  * `states`: an array of `google_kms_crypto_key_version` state\n  * `protection_levels`: an array of `google_kms_crypto_key_version` protection_level\n  * `algorithms`: an array of `google_kms_crypto_key_version` algorithm\n  * `attestations`: an array of `google_kms_crypto_key_version` attestation\n  * `import_jobs`: an array of `google_kms_crypto_key_version` import_job\n  * `import_times`: an array of `google_kms_crypto_key_version` import_time\n  * `import_failure_reasons`: an array of `google_kms_crypto_key_version` import_failure_reason\n  * `external_protection_level_options`: an array of `google_kms_crypto_key_version` external_protection_level_options\n  * `reimport_eligibles`: an array of `google_kms_crypto_key_version` reimport_eligible\n  * `key_rings`: an array of `google_kms_crypto_key_version` key_ring\n  * `crypto_keys`: an array of `google_kms_crypto_key_version` crypto_key\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_crypto_keys.md",
    "content": "+++\ntitle = \"google_kms_crypto_keys resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_crypto_keys\"\nidentifier = \"inspec/resources/gcp/google_kms_crypto_keys resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_crypto_keys` InSpec audit resource to to test a Google Cloud CryptoKey resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_crypto_keys(project: 'chef-gcp-inspec', location: 'europe-west2', key_ring_name: 'kms-key-ring') do\n  its('count') { should be >= 1 }\n  its('crypto_key_names') { should include 'kms-key' }\nend\n```\n\n### Test that there are no more than a specified number of keys in the key ring\n\n    describe google_kms_crypto_keys(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected key name is present in the key ring \n\n    describe google_kms_crypto_keys(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring') do\n      its('crypto_key_names') { should include \"my-crypto-key-name\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_kms_crypto_keys` resource:\n\nSee [google_kms_crypto_key](google_kms_crypto_key) for more detailed information.\n\n  * `crypto_key_names`: an array of `google_kms_crypto_key` crypto_key_name\n  * `create_times`: an array of `google_kms_crypto_key` create_time\n  * `labels`: an array of `google_kms_crypto_key` labels\n  * `purposes`: an array of `google_kms_crypto_key` purpose\n  * `rotation_periods`: an array of `google_kms_crypto_key` rotation_period\n  * `version_templates`: an array of `google_kms_crypto_key` version_template\n  * `next_rotation_times`: an array of `google_kms_crypto_key` next_rotation_time\n  * `key_rings`: an array of `google_kms_crypto_key` key_ring\n  * `skip_initial_version_creations`: an array of `google_kms_crypto_key` skip_initial_version_creation\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_ekm_connection.md",
    "content": "+++\ntitle = \"google_kms_ekm_connection resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_ekm_connection\"\nidentifier = \"inspec/resources/gcp/google_kms_ekm_connection resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_ekm_connection` InSpec audit resource to to test a Google Cloud EkmConnection resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_ekm_connection(project: 'chef-gcp-inspec', location: 'europe-west2', name: '') do\n  it { should exist }\n  its('name') { should cmp '' }\nend\n\ndescribe google_kms_ekm_connection(project: 'chef-gcp-inspec', location: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_ekm_connection` resource:\n\n\n  * `name`: Resource name for the location, which may vary between implementations. For example: projects/example-project/locations/us-east1\n\n  * `create_time`: string (Timestamp format) Output only. The time at which the EkmConnection was created. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n  * `service_resolvers`: object (ServiceResolver) A list of ServiceResolvers where the EKM can be reached. There should be one ServiceResolver per EKM replica. Currently, only a single ServiceResolver is supported.\n\n    * `service_directory_service`: Required. The resource name of the Service Directory service pointing to an EKM replica, in the format projects/*/locations/*/namespaces/*/services/*.\n\n    * `endpoint_filter`: Optional. The filter applied to the endpoints of the resolved service. If no filter is specified, all endpoints will be considered. An endpoint will be chosen arbitrarily from the filtered list for each request. For endpoint filter syntax and examples, see https://cloud.google.com/service-directory/docs/reference/rpc/google.cloud.servicedirectory.v1#resolveservicerequest.\n\n    * `hostname`: Required. The hostname of the EKM replica used at TLS and HTTP layers.\n\n    * `server_certificates`: A Certificate represents an X.509 certificate used to authenticate HTTPS connections to EKM replicas.\n\n      * `raw_der`: Required. The raw certificate bytes in DER format. A base64-encoded string.\n\n      * `parsed`: Output only. True if the certificate was parsed successfully.\n\n      * `issuer`: Output only. The issuer distinguished name in RFC 2253 format. Only present if parsed is true.\n\n      * `subject`: Output only. The subject distinguished name in RFC 2253 format. Only present if parsed is true.\n\n      * `subject_alternative_dns_names`: Output only. The subject Alternative DNS names. Only present if parsed is true.\n\n      * `not_before_time`: string (Timestamp format) Output only. The certificate is not valid before this time. Only present if parsed is true. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n      * `not_after_time`: string (Timestamp format) Output only. The certificate is not valid after this time. Only present if parsed is true. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n      * `serial_number`: Output only. The certificate serial number as a hex string. Only present if parsed is true.\n\n      * `sha256_fingerprint`: Output only. The SHA-256 certificate fingerprint as a hex string. Only present if parsed is true.\n\n  * `location`: Resource name for the location.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_ekm_connections.md",
    "content": "+++\ntitle = \"google_kms_ekm_connections resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_ekm_connections\"\nidentifier = \"inspec/resources/gcp/google_kms_ekm_connections resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_ekm_connections` InSpec audit resource to to test a Google Cloud EkmConnection resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_ekm_connections(project: 'chef-gcp-inspec', location: 'europe-west2') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_ekm_connections` resource:\n\nSee [google_kms_ekm_connection](google_kms_ekm_connection) for more detailed information.\n\n  * `names`: an array of `google_kms_ekm_connection` name\n  * `create_times`: an array of `google_kms_ekm_connection` create_time\n  * `service_resolvers`: an array of `google_kms_ekm_connection` service_resolvers\n  * `locations`: an array of `google_kms_ekm_connection` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring.md",
    "content": "+++\ntitle = \"google_kms_key_ring resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_key_ring` InSpec audit resource to to test a Google Cloud KeyRing resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_key_ring(project: 'chef-gcp-inspec', location: 'europe-west2', name: 'kms-key-ring') do\n  it { should exist }\n  its('create_time') { should be > Time.now - 365*60*60*24*10 }\n  its('key_ring_name'){ should eq 'kms-key-ring' }\n  its('key_ring_url'){ should match 'kms-key-ring' }\nend\n\ndescribe google_kms_key_ring(project: 'chef-gcp-inspec', location: 'europe-west2', name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP kms key ring exists\n\n    describe google_kms_key_ring(project: 'chef-inspec-gcp',  location: 'us-east1', name: 'key-ring-name') do\n      it { should exist }\n    end\n\n### Test that a GCP kms key ring is in the expected state \n\nFor any existing key ring, below should definitely be true!\n\n    describe google_kms_key_ring(project: 'chef-inspec-gcp',  location: 'us-east1', name: 'key-ring-name') do\n      its('create_time_date') { should be > Time.now - 365*60*60*24*50 }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_ring` resource:\n\n\n  * `create_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `key_ring_url`: The full resource name for the KeyRing\n\n  * `location`: The location for the KeyRing. A full list of valid locations can be found by running `gcloud kms locations list`.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring_iam_binding.md",
    "content": "+++\ntitle = \"google_kms_key_ring_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_kms_key_ring_iam_binding` is used to test a Google KeyRing Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_kms_key_ring_iam_binding(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_ring_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring_iam_bindings.md",
    "content": "+++\ntitle = \"google_kms_key_ring_iam_bindings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring_iam_bindings\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring_iam_bindings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_kms\\_key\\_ring\\_iam\\_bindings\n\n**This resource is deprecated. Please use `google_kms_key_ring_iam_policy` instead**\n\nUse the `google_kms_key_ring_iam_bindings` InSpec audit resource to test properties of all, or a filtered group of, GCP KMS key ring IAM bindings.\n\n<br>\n\n## Syntax\n\nA `google_kms_key_ring_iam_bindings` resource block collects GCP KMS key ring IAM bindings then tests that group.\n\n    describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring') do\n      it { should exist }\n    end\n\nUse this InSpec resource to enumerate roles then test in-depth using `google_kms_key_ring_iam_binding`.\n\n    google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring').iam_binding_roles.each do |iam_binding_role|\n      describe google_kms_key_ring_iam_binding(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring',  role: \"roles/owner\") do\n        it { should exist }\n        its('members') {should include 'user:someuser@domain.com' }\n      end\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that there are no more than a specified number of IAM bindings roles available for the key ring\n\n    describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected IAM binding is available for the key ring\n\n    describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring') do\n      its('iam_binding_roles') { should include \"roles/storage.admin\" }\n    end\n    \n### Test that a particular role does not exist using filtering of the plural resource\n\n    describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring').where(iam_binding_role: \"roles/iam.securityReviewer\") do\n      it { should_not exist }\n    end\n\n<br>\n\n## Filter criteria\n\nThis resource supports the following filter criteria:  `iam_binding_role`.  This may be used with `where`, as a block or as a method.\n\n## Properties\n\n*  `iam_binding_roles` - an array of google_kms_key_ring_iam_binding role strings e.g. `[\"roles/compute.admin\", \"roles/owner\"]`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the project where the resource is located.s"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring_iam_policy.md",
    "content": "+++\ntitle = \"google_kms_key_ring_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_kms_key_ring_iam_policy` is used to test a Google KeyRing Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_key_ring_iam_policy(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\") do\n  it { should exist }\nend\n\ngoogle_kms_key_ring_iam_policy(project: \"project\", location: \"location\", key_ring_name: \"key_ring_name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_ring_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring_import_job.md",
    "content": "+++\ntitle = \"google_kms_key_ring_import_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring_import_job\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring_import_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_key_ring_import_job` InSpec audit resource to to test a Google Cloud KeyRingImportJob resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_key_ring_import_job(project: 'chef-gcp-inspec', location: 'europe-west2', name: '') do\n  it { should exist }\nend\n\ndescribe google_kms_key_ring_import_job(project: 'chef-gcp-inspec', location: 'nonexistent', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_ring_import_job` resource:\n\n\n  * `name`: The resource name for this ImportJob in the format projects/*/locations/*/keyRings/*/importJobs/*.\n\n  * `import_method`: The wrapping method to be used for incoming key material.\n  Possible values:\n    * RSA_OAEP_3072_SHA1_AES_256\n    * RSA_OAEP_4096_SHA1_AES_256\n\n  * `protection_level`: The protection level of the ImportJob. This must match the protectionLevel of the versionTemplate on the CryptoKey you attempt to import into.\n  Possible values:\n    * SOFTWARE\n    * HSM\n    * EXTERNAL\n\n  * `create_time`: The time that this resource was created on the server. This is in RFC3339 text format.\n\n  * `generate_time`: The time that this resource was generated. This is in RFC3339 text format.\n\n  * `expire_time`: The time at which this resource is scheduled for expiration and can no longer be used. This is in RFC3339 text format.\n\n  * `expire_event_time`: The time this resource expired. Only present if state is EXPIRED.\n\n  * `state`: The current state of the ImportJob, indicating if it can be used.\n\n  * `public_key`: The public key with which to wrap key material prior to import. Only returned if state is `ACTIVE`.\n\n    * `pem`: The public key, encoded in PEM format. For more information, see the RFC 7468 sections for General Considerations and Textual Encoding of Subject Public Key Info.\n\n  * `attestation`: Statement that was generated and signed by the key creator (for example, an HSM) at key creation time. Use this statement to verify attributes of the key as stored on the HSM, independently of Google. Only present if the chosen ImportMethod is one with a protection level of HSM.\n\n    * `format`: The format of the attestation data.\n\n    * `content`: The attestation data provided by the HSM when the key operation was performed. A base64-encoded string.\n\n  * `key_ring`: The KeyRing that this import job belongs to. Format: `'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'`.\n\n  * `import_job_id`: It must be unique within a KeyRing and match the regular expression [a-zA-Z0-9_-]{1,63}\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_ring_import_jobs.md",
    "content": "+++\ntitle = \"google_kms_key_ring_import_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_ring_import_jobs\"\nidentifier = \"inspec/resources/gcp/google_kms_key_ring_import_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_key_ring_import_jobs` InSpec audit resource to to test a Google Cloud KeyRingImportJob resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_key_ring_import_job(project: 'chef-gcp-inspec',  location: 'europe-west2') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_ring_import_jobs` resource:\n\nSee [google_kms_key_ring_import_job](google_kms_key_ring_import_job) for more detailed information.\n\n  * `names`: an array of `google_kms_key_ring_import_job` name\n  * `import_methods`: an array of `google_kms_key_ring_import_job` import_method\n  * `protection_levels`: an array of `google_kms_key_ring_import_job` protection_level\n  * `create_times`: an array of `google_kms_key_ring_import_job` create_time\n  * `generate_times`: an array of `google_kms_key_ring_import_job` generate_time\n  * `expire_times`: an array of `google_kms_key_ring_import_job` expire_time\n  * `expire_event_times`: an array of `google_kms_key_ring_import_job` expire_event_time\n  * `states`: an array of `google_kms_key_ring_import_job` state\n  * `public_keys`: an array of `google_kms_key_ring_import_job` public_key\n  * `attestations`: an array of `google_kms_key_ring_import_job` attestation\n  * `key_rings`: an array of `google_kms_key_ring_import_job` key_ring\n  * `import_job_ids`: an array of `google_kms_key_ring_import_job` import_job_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_key_rings.md",
    "content": "+++\ntitle = \"google_kms_key_rings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_key_rings\"\nidentifier = \"inspec/resources/gcp/google_kms_key_rings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_key_rings` InSpec audit resource to to test a Google Cloud KeyRing resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_key_rings(project: 'chef-gcp-inspec', location: 'europe-west2') do\n  its('key_ring_names'){ should include 'kms-key-ring' }\nend\n\ndescribe.one do\n  google_kms_key_rings(project: 'chef-gcp-inspec', location: 'europe-west2').key_ring_urls do |url|\n    describe url do\n      it { should match 'kms-key-ring' }\n    end\n  end\nend\n```\n\n### Test that there are no more than a specified number of kms_key_rings available for the project\n\n    describe google_kms_key_rings(project: 'chef-inspec-gcp', location: 'us-east1') do\n      its('count') { should be <= 200}\n    end\n\n### Test that an expected kms_key_ring is available for the project\n\n    describe google_kms_key_rings(project: 'chef-inspec-gcp', location: 'us-east1') do\n      its('key_ring_names') { should include \"a-named-key\" }\n    end\n\n\n### Test that all KMS key rings were created in the past year\n\n    describe google_kms_key_rings(project: gcp_project_id, location: 'us-east1').key_ring_names.each do |key_ring_name|\n      describe google_kms_key_ring(project: 'chef-inspec-gcp', location: 'us-east1', 'name: key_ring_name) do\n        it { should exist }\n        its('create_time_date') { should be > Time.now - 365*60*60*24 }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_kms_key_rings` resource:\n\nSee [google_kms_key_ring](google_kms_key_ring) for more detailed information.\n\n  * `create_times`: an array of `google_kms_key_ring` create_time\n  * `key_ring_urls`: an array of `google_kms_key_ring` key_ring_url\n  * `locations`: an array of `google_kms_key_ring` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_location.md",
    "content": "+++\ntitle = \"google_kms_location resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_location\"\nidentifier = \"inspec/resources/gcp/google_kms_location resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_location` InSpec audit resource to to test a Google Cloud Location resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_location(project: 'chef-gcp-inspec', location: 'europe-west2') do\n  it { should exist }\nend\n\ndescribe google_kms_location(project: 'chef-gcp-inspec', location: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_location` resource:\n\n\n  * `name`: Resource name for the location, which may vary between implementations. For example: projects/example-project/locations/us-east1\n\n  * `location_id`: The canonical id for this location. For example: \"us-east1\".\n\n  * `display_name`: The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".\n\n  * `location`: Resource name for the location.\n\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_kms_locations.md",
    "content": "+++\ntitle = \"google_kms_locations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_kms_locations\"\nidentifier = \"inspec/resources/gcp/google_kms_locations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_kms_locations` InSpec audit resource to to test a Google Cloud Location resource.\n\n## Examples\n\n```ruby\ndescribe google_kms_locations(project: 'chef-gcp-inspec') do\n  it { should exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_kms_locations` resource:\n\nSee [google_kms_location](google_kms_location) for more detailed information.\n\n  * `names`: an array of `google_kms_location` name\n  * `location_ids`: an array of `google_kms_location` location_id\n  * `display_names`: an array of `google_kms_location` display_name\n  * `locations`: an array of `google_kms_location` location\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Key Management Service (KMS) API](https://console.cloud.google.com/apis/library/cloudkms.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_folder_exclusion.md",
    "content": "+++\ntitle = \"google_logging_folder_exclusion resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_folder_exclusion\"\nidentifier = \"inspec/resources/gcp/google_logging_folder_exclusion resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_folder_exclusion` InSpec audit resource to to test a Google Cloud FolderExclusion resource.\n\n## Examples\n\n```ruby\n# Getting folder exclusions is complicated due to the name being generated by the server.\n# This can be drastically simplified if you have the name when writing the test\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').names.each do |folder_name|\n    # name on a folder is in the form `folders/12345`\n    google_logging_folder_exclusions(folder: folder_name.split('/')[1]).names.each do |exclusion_name|\n      describe google_logging_folder_exclusion(folder: folder_name.split('/')[1], name: exclusion_name) do\n        its('name'){ should cmp 'inspec-folder-exclusion' }\n        its('description'){ should cmp 'My folder exclusion description' }\n        its('filter'){ should cmp 'resource.type = gce_instance AND severity <= DEBUG' }\n      end\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_folder_exclusion` resource:\n\n\n  * `folder`: Id of the folder that this exclusion applies to.\n\n  * `name`: Name of the exclusion, specified by the server during create.\n\n  * `description`: A user provided description of this exclusion.\n\n  * `filter`: An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter.\n\n  * `disabled`: If set to true then this exclusion is disabled and it does not exclude any log entries.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_folder_exclusions.md",
    "content": "+++\ntitle = \"google_logging_folder_exclusions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_folder_exclusions\"\nidentifier = \"inspec/resources/gcp/google_logging_folder_exclusions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_folder_exclusions` InSpec audit resource to to test a Google Cloud FolderExclusion resource.\n\n## Examples\n\n```ruby\n# Getting folder exclusions is complicated due to the name being generated by the server.\n# This can be drastically simplified if you have the name when writing the test\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').names.each do |name|\n    # name on a folder is in the form `folders/12345`\n    describe google_logging_folder_exclusions(folder: name.split('/')[1]) do\n      its('names'){ should include 'inspec-folder-exclusion' }\n      its('descriptions'){ should include 'My folder exclusion description' }\n      its('filters'){ should include 'resource.type = gce_instance AND severity <= DEBUG' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_folder_exclusions` resource:\n\nSee [google_logging_folder_exclusion](google_logging_folder_exclusion) for more detailed information.\n\n  * `folders`: an array of `google_logging_folder_exclusion` folder\n  * `names`: an array of `google_logging_folder_exclusion` name\n  * `descriptions`: an array of `google_logging_folder_exclusion` description\n  * `filters`: an array of `google_logging_folder_exclusion` filter\n  * `disableds`: an array of `google_logging_folder_exclusion` disabled\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_folder_log_sink.md",
    "content": "+++\ntitle = \"google_logging_folder_log_sink resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_folder_log_sink\"\nidentifier = \"inspec/resources/gcp/google_logging_folder_log_sink resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_folder_log_sink` InSpec audit resource to to test a Google Cloud FolderLogSink resource.\n\n## Examples\n\n```ruby\n# Getting folder sinks is complicated due to the name being generated by the server.\n# This can be drastically simplified if you have the folder name when writing the test\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').names.each do |folder_name|\n    # name on a folder is in the form `folders/12345`\n    describe google_logging_folder_log_sink(folder: folder_name.split('/')[1], name: 'inspec-gcp-folder-sink') do\n      it { should exist }\n      its('filter') { should cmp 'resource.type = gce_instance AND severity >= ERROR' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_folder_log_sink` resource:\n\n\n  * `folder`: Id of the folder that this sink belongs to.\n\n  * `name`: Name of the log sink.\n\n  * `filter`: An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter.\n\n  * `destination`: The export destination.\n\n  * `writer_identity`: An IAM identity—a service account or group—under which Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update based on the value of uniqueWriterIdentity in those methods.\n\n  * `include_children`: If the field is false, the default, only the logs owned by the sink's parent resource are available for export. If the field is true, then logs from all the projects, folders, and billing accounts contained in the sink's parent resource are also available for export. Whether a particular log entry from the children is exported depends on the sink's filter expression.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_folder_log_sinks.md",
    "content": "+++\ntitle = \"google_logging_folder_log_sinks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_folder_log_sinks\"\nidentifier = \"inspec/resources/gcp/google_logging_folder_log_sinks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_folder_log_sinks` InSpec audit resource to to test a Google Cloud FolderLogSink resource.\n\n## Examples\n\n```ruby\n# Getting folder sinks is complicated due to the name being generated by the server.\n# This can be drastically simplified if you have the folder name when writing the test\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').names.each do |folder_name|\n    # name on a folder is in the form `folders/12345`\n    describe google_logging_folder_log_sinks(folder: folder_name.split('/')[1]) do\n      its('names') { should include 'inspec-gcp-folder-sink' }\n      its('filters') { should include 'resource.type = gce_instance AND severity >= ERROR' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_folder_log_sinks` resource:\n\nSee [google_logging_folder_log_sink](google_logging_folder_log_sink) for more detailed information.\n\n  * `folders`: an array of `google_logging_folder_log_sink` folder\n  * `names`: an array of `google_logging_folder_log_sink` name\n  * `filters`: an array of `google_logging_folder_log_sink` filter\n  * `destinations`: an array of `google_logging_folder_log_sink` destination\n  * `writer_identities`: an array of `google_logging_folder_log_sink` writer_identity\n  * `include_children`: an array of `google_logging_folder_log_sink` include_children\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_organization_log_sink.md",
    "content": "+++\ntitle = \"google_logging_organization_log_sink resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_organization_log_sink\"\nidentifier = \"inspec/resources/gcp/google_logging_organization_log_sink resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_organization_log_sink` InSpec audit resource to to test a Google Cloud OrganizationLogSink resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_organization_log_sink(organization: '190694428152', name: 'inspec-gcp-org-sink') do\n  it { should exist }\n  its('filter') { should cmp 'resource.type = gce_instance' }\nend\n\ndescribe google_logging_organization_log_sink(organization: '190694428152', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_organization_log_sink` resource:\n\n\n  * `organization`: Id of the organization that this sink belongs to.\n\n  * `name`: Name of the log sink.\n\n  * `filter`: An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter.\n\n  * `destination`: The export destination.\n\n  * `writer_identity`: An IAM identity—a service account or group—under which Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update based on the value of uniqueWriterIdentity in those methods.\n\n  * `include_children`: If the field is false, the default, only the logs owned by the sink's parent resource are available for export. If the field is true, then logs from all the projects, folders, and billing accounts contained in the sink's parent resource are also available for export. Whether a particular log entry from the children is exported depends on the sink's filter expression.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_organization_log_sinks.md",
    "content": "+++\ntitle = \"google_logging_organization_log_sinks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_organization_log_sinks\"\nidentifier = \"inspec/resources/gcp/google_logging_organization_log_sinks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_organization_log_sinks` InSpec audit resource to to test a Google Cloud OrganizationLogSink resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_organization_log_sinks(organization: '190694428152') do\n  its('names') { should include 'inspec-gcp-org-sink' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_organization_log_sinks` resource:\n\nSee [google_logging_organization_log_sink](google_logging_organization_log_sink) for more detailed information.\n\n  * `organizations`: an array of `google_logging_organization_log_sink` organization\n  * `names`: an array of `google_logging_organization_log_sink` name\n  * `filters`: an array of `google_logging_organization_log_sink` filter\n  * `destinations`: an array of `google_logging_organization_log_sink` destination\n  * `writer_identities`: an array of `google_logging_organization_log_sink` writer_identity\n  * `include_children`: an array of `google_logging_organization_log_sink` include_children\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_project_exclusion.md",
    "content": "+++\ntitle = \"google_logging_project_exclusion resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_project_exclusion\"\nidentifier = \"inspec/resources/gcp/google_logging_project_exclusion resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_project_exclusion` InSpec audit resource to to test a Google Cloud ProjectExclusion resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_project_exclusion(project: 'chef-gcp-inspec', name: 'inspec-project-exclusion') do\n\tit { should exist }\n  its('description'){ should cmp 'My project exclusion description' }\n  its('filter'){ should cmp 'resource.type = gce_instance AND severity <= DEBUG' }\nend\n\ndescribe google_logging_project_exclusion(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP project logging exclusion name is as expected\n\n    describe google_logging_project_exclusion(project: 'chef-inspec-gcp',  exclusion: 'exclusion-name-abcd') do\n      its('name') { should eq 'exclusion-name-abcd' }\n    end\n\n### Test that a GCP project logging exclusion filter is set correctly\n\n    describe google_logging_project_exclusion(project: 'chef-inspec-gcp',  exclusion: 'exclusion-name-abcd') do\n      its('filter') { should eq 'resource.type = gce_instance AND severity <= DEBUG' }\n    end\n\n### Test that a GCP project logging exclusion description is as expected\n\n    describe google_logging_project_exclusion(project: 'chef-inspec-gcp',  exclusion: 'exclusion-name-abcd') do\n      its('description') { should eq 'Exclude GCE instance debug logs' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_logging_project_exclusion` resource:\n\n\n  * `project`: Id of the project that this exclusion applies to.\n\n  * `name`: Name of the exclusion, specified by the server during create.\n\n  * `description`: A user provided description of this exclusion.\n\n  * `filter`: An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter.\n\n  * `disabled`: If set to true then this exclusion is disabled and it does not exclude any log entries.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_project_exclusions.md",
    "content": "+++\ntitle = \"google_logging_project_exclusions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_project_exclusions\"\nidentifier = \"inspec/resources/gcp/google_logging_project_exclusions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_project_exclusions` InSpec audit resource to to test a Google Cloud ProjectExclusion resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_project_exclusions(project: 'chef-gcp-inspec') do\n  its('names'){ should include 'inspec-folder-exclusion' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_logging_project_exclusions` resource:\n\nSee [google_logging_project_exclusion](google_logging_project_exclusion) for more detailed information.\n\n  * `projects`: an array of `google_logging_project_exclusion` project\n  * `names`: an array of `google_logging_project_exclusion` name\n  * `descriptions`: an array of `google_logging_project_exclusion` description\n  * `filters`: an array of `google_logging_project_exclusion` filter\n  * `disableds`: an array of `google_logging_project_exclusion` disabled\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_project_sink.md",
    "content": "+++\ntitle = \"google_logging_project_sink resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_project_sink\"\nidentifier = \"inspec/resources/gcp/google_logging_project_sink resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_project_sink` InSpec audit resource to to test a Google Cloud ProjectSink resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_project_sink(project: 'chef-gcp-inspec', name: 'inspec-gcp-org-sink') do\n  it { should exist }\n  its('filter') { should cmp 'resource.type = gce_instance AND severity = DEBUG' }\nend\n\ndescribe google_logging_project_sink(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP project logging sink destination is correct\n\n    describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: 'sink-name-abcd') do\n      its('destination') { should eq 'storage.googleapis.com/gcp-inspec-logging-bucket' }\n    end\n\n### Test that a GCP project logging sink filter is correct\n\n    describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: 'sink-name-abcd') do\n      its('filter') { should eq \"resource.type = gce_instance AND resource.labels.instance_id = \\\"12345678910123123\\\"\" }\n    end\n\n### Test a GCP project logging sink output version format\n\n    describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: 'sink-name-abcd') do\n      its('output_version_format') { should eq \"V2\" }\n    end\n\n### Test a GCP project logging sink writer identity is as expected\n\n    describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: 'sink-name-abcd') do\n      its('writer_identity') { should eq \"serviceAccount:my-logging-service-account.iam.gserviceaccount.com\" }\n    end\n\n\n## Properties\n\nProperties that can be accessed from the `google_logging_project_sink` resource:\n\n\n  * `project`: Id of the project that this sink belongs to.\n\n  * `name`: Name of the log sink.\n\n  * `filter`: An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter.\n\n  * `destination`: The export destination.\n\n  * `writer_identity`: An IAM identity—a service account or group—under which Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update based on the value of uniqueWriterIdentity in those methods.\n\n  * `include_children`: If the field is false, the default, only the logs owned by the sink's parent resource are available for export. If the field is true, then logs from all the projects, folders, and billing accounts contained in the sink's parent resource are also available for export. Whether a particular log entry from the children is exported depends on the sink's filter expression.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_logging_project_sinks.md",
    "content": "+++\ntitle = \"google_logging_project_sinks resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_logging_project_sinks\"\nidentifier = \"inspec/resources/gcp/google_logging_project_sinks resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_logging_project_sinks` InSpec audit resource to to test a Google Cloud ProjectSink resource.\n\n## Examples\n\n```ruby\ndescribe google_logging_project_sinks(project: 'chef-gcp-inspec') do\n  its('names') { should include 'inspec-gcp-org-sink' }\nend\n```\n\n### Test that there are no more than a specified number of sinks available for the project\n\n    describe google_logging_project_sinks(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected sink name is available for the project\n\n    describe google_logging_project_sinks(project: 'chef-inspec-gcp') do\n      its('sink_names') { should include \"my-sink\" }\n    end\n\n### Test that an expected sink destination is available for the project\n\n    describe google_logging_project_sinks(project: 'chef-inspec-gcp') do\n      its('sink_destinations') { should include \"storage.googleapis.com/a-logging-bucket\" }\n    end\n\n### Test that a subset of all sinks matching \"project*\" have a particular writer identity \n\n    google_logging_project_sinks(project: 'chef-inspec-gcp').where(sink_name: /project/).sink_names.each do |sink_name|\n      describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: sink_name) do\n        its('writer_identity') { should eq \"serviceAccount:my-logging-service-account.iam.gserviceaccount.com\" }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_logging_project_sinks` resource:\n\nSee [google_logging_project_sink](google_logging_project_sink) for more detailed information.\n\n  * `projects`: an array of `google_logging_project_sink` project\n  * `names`: an array of `google_logging_project_sink` name\n  * `filters`: an array of `google_logging_project_sink` filter\n  * `destinations`: an array of `google_logging_project_sink` destination\n  * `writer_identities`: an array of `google_logging_project_sink` writer_identity\n  * `include_children`: an array of `google_logging_project_sink` include_children\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_memcache_instance.md",
    "content": "+++\ntitle = \"google_memcache_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_memcache_instance\"\nidentifier = \"inspec/resources/gcp/google_memcache_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_memcache_instance` InSpec audit resource to to test a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\ndescribe google_memcache_instance(project: 'chef-gcp-inspec', region: 'europe-west2', name: 'mem-instance') do\n  it { should exist }\n  its('node_count') { should cmp 1 }\nend\n\ndescribe google_memcache_instance(project: 'chef-gcp-inspec', region: 'europe-west2', name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_memcache_instance` resource:\n\n\n  * `name`: (Beta only) The resource name of the instance.\n\n  * `display_name`: (Beta only) A user-visible name for the instance.\n\n  * `memcache_nodes`: (Beta only) Additional information about the instance state, if available.\n\n    * `node_id`: (Beta only) Identifier of the Memcached node. The node id does not include project or location like the Memcached instance name.\n\n    * `zone`: (Beta only) Location (GCP Zone) for the Memcached node.\n\n    * `port`: (Beta only) The port number of the Memcached server on this node.\n\n    * `host`: (Beta only) Hostname or IP address of the Memcached node used by the clients to connect to the Memcached server on this node.\n\n    * `state`: (Beta only) Current state of the Memcached node.\n\n  * `create_time`: (Beta only) Creation timestamp in RFC3339 text format.\n\n  * `discovery_endpoint`: (Beta only) Endpoint for Discovery API\n\n  * `labels`: (Beta only) Resource labels to represent user-provided metadata.\n\n  * `memcache_full_version`: (Beta only) The full version of memcached server running on this instance.\n\n  * `zones`: (Beta only) Zones where memcache nodes should be provisioned.  If not provided, all zones will be used.\n\n  * `authorized_network`: (Beta only) The full name of the GCE network to connect the instance to.  If not provided, 'default' will be used.\n\n  * `node_count`: (Beta only) Number of nodes in the memcache instance.\n\n  * `memcache_version`: (Beta only) The major version of Memcached software. If not provided, latest supported version will be used. Currently the latest supported major version is MEMCACHE_1_5. The minor version will be automatically determined by our system based on the latest supported minor version.\n  Possible values:\n    * MEMCACHE_1_5\n\n  * `node_config`: (Beta only) Configuration for memcache nodes.\n\n    * `cpu_count`: (Beta only) Number of CPUs per node.\n\n    * `memory_size_mb`: (Beta only) Memory size in Mebibytes for each memcache node.\n\n  * `parameters`: (Beta only) User-specified parameters for this memcache instance.\n\n    * `id`: (Beta only) This is a unique ID associated with this set of parameters.\n\n    * `params`: (Beta only) User-defined set of parameters to use in the memcache process.\n\n  * `region`: (Beta only) The region of the Memcache instance. If it is not provided, the provider region is used.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_memcache_instances.md",
    "content": "+++\ntitle = \"google_memcache_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_memcache_instances\"\nidentifier = \"inspec/resources/gcp/google_memcache_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_memcache_instances` InSpec audit resource to to test a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\ndescribe google_memcache_instances(project: 'chef-gcp-inspec', region: 'europe-west2') do\n\tits('count') { should be >= 1 }\n  its('node_counts') { should include 1 }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_memcache_instances` resource:\n\nSee [google_memcache_instance](google_memcache_instance) for more detailed information.\n\n  * `names`: (Beta only) an array of `google_memcache_instance` name\n  * `display_names`: (Beta only) an array of `google_memcache_instance` display_name\n  * `memcache_nodes`: (Beta only) an array of `google_memcache_instance` memcache_nodes\n  * `create_times`: (Beta only) an array of `google_memcache_instance` create_time\n  * `discovery_endpoints`: (Beta only) an array of `google_memcache_instance` discovery_endpoint\n  * `labels`: (Beta only) an array of `google_memcache_instance` labels\n  * `memcache_full_versions`: (Beta only) an array of `google_memcache_instance` memcache_full_version\n  * `zones`: (Beta only) an array of `google_memcache_instance` zones\n  * `authorized_networks`: (Beta only) an array of `google_memcache_instance` authorized_network\n  * `node_counts`: (Beta only) an array of `google_memcache_instance` node_count\n  * `memcache_versions`: (Beta only) an array of `google_memcache_instance` memcache_version\n  * `node_configs`: (Beta only) an array of `google_memcache_instance` node_config\n  * `parameters`: (Beta only) an array of `google_memcache_instance` parameters\n  * `regions`: (Beta only) an array of `google_memcache_instance` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_ml_engine_model.md",
    "content": "+++\ntitle = \"google_ml_engine_model resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_ml_engine_model\"\nidentifier = \"inspec/resources/gcp/google_ml_engine_model resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_ml_engine_model` InSpec audit resource to to test a Google Cloud Model resource.\n\n## Examples\n\n```ruby\ndescribe google_ml_engine_model(project: 'chef-gcp-inspec', name: 'ml_model') do\n  it { should exist }\n  its('description') { should cmp 'My awesome ML model' }\n  its('regions') { should include 'us-central1' }\n  its('online_prediction_logging') { should cmp 'true' }\n  its('online_prediction_console_logging') { should cmp 'true' }\nend\n\ndescribe google_ml_engine_model(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_ml_engine_model` resource:\n\n\n  * `name`: The name specified for the model.\n\n  * `description`: The description specified for the model when it was created.\n\n  * `default_version`: The default version of the model. This version will be used to handle prediction requests that do not specify a version.\n\n    * `name`: The name specified for the version when it was created.\n\n  * `regions`: The list of regions where the model is going to be deployed. Currently only one region per model is supported\n\n  * `online_prediction_logging`: If true, online prediction access logs are sent to StackDriver Logging.\n\n  * `online_prediction_console_logging`: If true, online prediction nodes send stderr and stdout streams to Stackdriver Logging\n\n  * `labels`: One or more labels that you can add, to organize your models.\n\n\n## GCP permissions\n\nEnsure the [Cloud ML](https://console.cloud.google.com/apis/library/ml.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_ml_engine_models.md",
    "content": "+++\ntitle = \"google_ml_engine_models resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_ml_engine_models\"\nidentifier = \"inspec/resources/gcp/google_ml_engine_models resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_ml_engine_models` InSpec audit resource to to test a Google Cloud Model resource.\n\n## Examples\n\n```ruby\ndescribe google_ml_engine_models(project: 'chef-gcp-inspec') do\n  its('descriptions') { should include 'My awesome ML model' }\n  its('online_prediction_loggings') { should include 'true' }\n  its('online_prediction_console_loggings') { should include 'true' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_ml_engine_models` resource:\n\nSee [google_ml_engine_model](google_ml_engine_model) for more detailed information.\n\n  * `names`: an array of `google_ml_engine_model` name\n  * `descriptions`: an array of `google_ml_engine_model` description\n  * `default_versions`: an array of `google_ml_engine_model` default_version\n  * `regions`: an array of `google_ml_engine_model` regions\n  * `online_prediction_loggings`: an array of `google_ml_engine_model` online_prediction_logging\n  * `online_prediction_console_loggings`: an array of `google_ml_engine_model` online_prediction_console_logging\n  * `labels`: an array of `google_ml_engine_model` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud ML](https://console.cloud.google.com/apis/library/ml.googleapis.com) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_monitoring_group.md",
    "content": "+++\ntitle = \"google_monitoring_group resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_monitoring_group\"\nidentifier = \"inspec/resources/gcp/google_monitoring_group resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_monitoring_group` InSpec audit resource to test the properties of a Google Cloud Group resource.\n\n## Examples\n\n```ruby\ndescribe google_monitoring_group(name: 'projects/*/groups/value_group_id') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('filter') { should cmp 'value_filter' }\nend\n\ndescribe google_monitoring_group(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_monitoring_group` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_monitoring_group` resource:\n\n\n  * `name`: Output only. The name of this group. The format is: projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to CreateGroup and a unique [GROUP_ID] that is generated automatically.\n\n  * `display_name`: A user-assigned name for this group, used only for display purposes.\n\n  * `parent_name`: The name of the group's parent, if it has one. The format is: projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] For groups with no parent, parent_name is the empty string, \"\".\n\n  * `filter`: The filter used to determine which monitored resources belong to this group.\n\n  * `is_cluster`: If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Monitoring API](https://console.cloud.google.com/apis/library/monitoring.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_monitoring_groups.md",
    "content": "+++\ntitle = \"google_monitoring_groups resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_monitoring_groups\"\nidentifier = \"inspec/resources/gcp/google_monitoring_groups resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_monitoring_groups` InSpec audit resource to test the properties of a Google Cloud Group resource.\n\n## Examples\n\n```ruby\n  describe google_monitoring_groups(name: 'projects/*') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('display_names') { should include 'value_displayname' }\n    its('filters') { should include 'value_filter' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_monitoring_groups` resource:\n\nSee [google_monitoring_group](google_monitoring_group) for more detailed information.\n\n* `names`: an array of `google_monitoring_group` name\n* `display_names`: an array of `google_monitoring_group` display_name\n* `parent_names`: an array of `google_monitoring_group` parent_name\n* `filters`: an array of `google_monitoring_group` filter\n* `is_clusters`: an array of `google_monitoring_group` is_cluster\n\n## Properties\n\nProperties that can be accessed from the `google_monitoring_groups` resource:\n\nSee [google_monitoring_group](google_monitoring_group) for more detailed information.\n\n* `names`: an array of `google_monitoring_group` name\n* `display_names`: an array of `google_monitoring_group` display_name\n* `parent_names`: an array of `google_monitoring_group` parent_name\n* `filters`: an array of `google_monitoring_group` filter\n* `is_clusters`: an array of `google_monitoring_group` is_cluster\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Monitoring API](https://console.cloud.google.com/apis/library/monitoring.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_organization.md",
    "content": "+++\ntitle = \"google_organization resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_organization\"\nidentifier = \"inspec/resources/gcp/google_organization resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_organization` InSpec audit resource to to test a Google Cloud Organization resource.\n\n## Examples\n\n```ruby\ndescribe google_organization(name: \"organizations/123456\") do\n  its('name') { should eq \"organizations/123456\" }\n  its('lifecycle_state') { should cmp 'ACTIVE' }\nend\n```\n\n### Test that a GCP organization has the expected name\n\n    describe google_organization(name: 'organizations/1234') do\n      its('name') { should eq 'organizations/1234' }\n    end\n\n### Test that a GCP organization has the expected lifecycle state e.g. \"ACTIVE\"\n\n    describe google_organization(display_name: 'google.com') do\n      its('lifecycle_state') { should eq \"ACTIVE\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_organization` resource:\n\n\n  * `name`: The resource name of the organization. This is the organization's relative path in the API. Its format is \"organizations/[organizationId]\". For example, \"organizations/1234\".\n\n  * `display_name`: A human-readable string that refers to the Organization in the GCP Console UI. This string is set by the server and cannot be changed. The string will be set to the primary domain (for example, \"google.com\") of the G Suite customer that owns the organization.\n\n  * `lifecycle_state`: The lifecycle state of the folder. Updates to the lifecycleState must be performed via folders.delete and folders.undelete.\n  Possible values:\n    * LIFECYCLE_STATE_UNSPECIFIED\n    * ACTIVE\n    * DELETE_REQUESTED\n\n  * `creation_time`: Timestamp when the Organization was created. Assigned by the server.\n\n  * `owner`: The entity that owns the Organization\n\n    * `directory_customer_id`: The G Suite customer id used in the Directory API\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_organization_iam_binding.md",
    "content": "+++\ntitle = \"google_organization_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_organization_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_organization_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_organization_iam_binding` is used to test a Google Organization Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_organization_iam_binding(name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_organization_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_organization_iam_policy.md",
    "content": "+++\ntitle = \"google_organization_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_organization_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_organization_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_organization_iam_policy` is used to test a Google Organization Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_organization_iam_policy(name: \"name\") do\n  it { should exist }\nend\n\ngoogle_organization_iam_policy(name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_organization_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_organization_policy.md",
    "content": "+++\ntitle = \"google_organization_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_organization_policy\"\nidentifier = \"inspec/resources/gcp/google_organization_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_organization\\_policy\n\n**This resource is deprecated. Please use `google_orgpolicy_organization_policy` instead**\n\nUse the `google_organization_policy` InSpec audit resource to test constraints set on a GCP organization.\n\n<br>\n\n## Syntax\n\nGoogle organization policies can restrict certain GCP services. For more information see https://cloud.google.com/resource-manager/docs/organization-policy/understanding-constraints\n\nA `google_organization_policy` resource block declares the tests for a single GCP organization constraint identified by the pair of the `name` of the organization and the `constraint`:\n\n    describe google_organization_policy(name: 'organizations/123456', constraint: 'constraints/compute.disableGuestAttributesAccess') do\n      it { should exist }\n      its('boolean_policy.enforced') { should be true }\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that a GCP organization has a specific constraint enforced\n\n    describe google_organization_policy(name: 'organizations/123456', constraint: 'constraints/compute.disableGuestAttributesAccess') do\n      it { should exist }\n      its('boolean_policy.enforced') { should be true }\n    end\n\n### Test that a GCP organization has certain values allowed for a list constraint\n\n    describe google_organization_policy(name: 'organizations/123456', constraint: 'constraints/someListConstraint') do\n      it { should exist }\n      its('list_policy.allowed_values') { should include 'included_val' }\n      its('list_policy.allowed_values') { should_not include 'excluded' }\n      its('list_policy.denied_values') { should include 'denied' }\n    end\n\n<br>\n\n## Properties\n\n  * `update_time`: The time stamp this policy was last updated.\n\n  * `boolean_policy`: Only available for constraints that are boolean policies.\n\n    * `enforced`: Boolean for if this policy is enforced.\n\n  * `list_policy`: Available for list policies.\n\n    * `allowed_values`: List of values allowed at this resource.\n\n    * `denied_values`: List of values denied at this resource.\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the project.\n"
  },
  {
    "path": "docs-chef-io/content/google_organizations.md",
    "content": "+++\ntitle = \"google_organizations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_organizations\"\nidentifier = \"inspec/resources/gcp/google_organizations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_organizations` InSpec audit resource to to test a Google Cloud Organization resource.\n\n## Examples\n\n```ruby\ndescribe google_organizations do\n  its('names') { should include \"organizations/123456\" }\nend\n```\n\n### Test that there are no more than a specified number of organizations available\n\n    describe google_organizations do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected organization name is available\n\n    describe google_organizations do\n      its('names') { should include \"organization/1234\" }\n    end\n\n### Test that an expected organization display name is available\n\n    describe google_organizations do\n      its('display_names') { should include \"google.com\" }\n    end\n    \n### Test that all organizations are ACTIVE\n\n    describe google_organizations do\n      its('lifecycle_state'){ should eq 'ACTIVE' }\n    end    \n\n### Test that a particular subset of ACTIVE organizations with display name 'goog*' exist\n\n    google_organizations.where(display_name: /^goog/, lifecycle_state: 'ACTIVE').names.each do |name|\n      describe google_organization(name: name) do\n        it { should exist }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_organizations` resource:\n\nSee [google_organization](google_organization) for more detailed information.\n\n  * `names`: an array of `google_organization` name\n  * `display_names`: an array of `google_organization` display_name\n  * `lifecycle_states`: an array of `google_organization` lifecycle_state\n  * `creation_times`: an array of `google_organization` creation_time\n  * `owners`: an array of `google_organization` owner\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_folder_constraints.md",
    "content": "+++\ntitle = \"google_orgpolicy_folder_constraints resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_folder_constraints\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_folder_constraints resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_folder_constraints` InSpec audit resource to to test a Google Cloud FolderConstraint resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_folder_constraints(parent: ' value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name'}\n    its('display_names') { should include 'value_displayName'}\n    its('descriptions') { should include 'value_description'}\n    its('constraint_defaults') { should include 'value_constraint_default'}\n    its('list_constraints') { should include 'value_list_constraint'}\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_folder_constraints` resource:\n\n  * `display_names`: The human readable name. Mutable.\n\n  * `descriptions`: Detailed description of what this constraint controls as well as how and where it is enforced. Mutable.\n\n  * `constraint_defaults`: The evaluation behavior of this constraint in the absence of a policy.\n  Possible values:\n    * CONSTRAINT_DEFAULT_UNSPECIFIED\n    * ALLOW\n    * DENY\n\n  * `supports_dry_runs`: Shows if dry run is supported for this constraint or not.\n\n  * `names`: Immutable. The resource name of the constraint. Must be in one of the following forms: * `projects/{project_number}/constraints/{constraint_name}` * `folders/{folder_id}/constraints/{constraint_name}` * `organizations/{organization_id}/constraints/{constraint_name}` For example, \"/projects/123/constraints/compute.disableSerialPortAccess\".\n\n  * `list_constraints`: A constraint that allows or disallows a list of string values, which are configured by an Organization Policy administrator with a policy.\n\n    * `supports_under`: Indicates whether subtrees of the Resource Manager resource hierarchy can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"under:folders/123\"` would match any resource under the 'folders/123' folder.\n\n    * `supports_in`: Indicates whether values grouped into categories can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"in:Python\"` would match any value in the 'Python' group.\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_folder_policies.md",
    "content": "+++\ntitle = \"google_orgpolicy_folder_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_folder_policies\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_folder_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_folder_policies` InSpec audit resource to to test a Google Cloud FolderPolicy resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_folder_policies(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_folder_policies` resource:\n\nSee [google_orgpolicy_folder_policy](google_orgpolicy_folder_policy) for more detailed information.\n\n  * `dry_run_specs`: an array of `google_orgpolicy_folder_policy` dry_run_spec\n  * `specs`: an array of `google_orgpolicy_folder_policy` spec\n  * `names`: an array of `google_orgpolicy_folder_policy` name\n  * `alternates`: an array of `google_orgpolicy_folder_policy` alternate\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_folder_policy.md",
    "content": "+++\ntitle = \"google_orgpolicy_folder_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_folder_policy\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_folder_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_folder_policy` InSpec audit resource to to test a Google Cloud FolderPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_orgpolicy_folder_policy(parent: 'value_parent', name: ' value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_orgpolicy_folder_policy(parent: 'value_parent', name: ' value_name') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_folder_policy` resource:\n\n\n  * `dry_run_spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `name`: Immutable. The resource name of the policy. Must be one of the following forms, where `constraint_name` is the name of the constraint which this policy configures: * `projects/{project_number}/policies/{constraint_name}` * `folders/{folder_id}/policies/{constraint_name}` * `organizations/{organization_id}/policies/{constraint_name}` For example, `projects/123/policies/compute.disableSerialPortAccess`. Note: `projects/{project_id}/policies/{constraint_name}` is also an acceptable name for API requests, but responses will return the name using the equivalent project number.\n\n  * `alternate`: Similar to PolicySpec but with an extra 'launch' field for launch reference. The PolicySpec here is specific for dry-run/darklaunch.\n\n    * `launch`: Reference to the launch that will be used while audit logging and to control the launch. Should be set only in the alternate policy.\n\n    * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n      * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n      * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n        * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n          * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n          * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n          * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n          * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n        * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n        * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n        * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n        * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n          * `denied_values`: List of values denied at this resource.\n\n          * `allowed_values`: List of values allowed at this resource.\n\n      * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n      * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n      * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_organization_constraints.md",
    "content": "+++\ntitle = \"google_orgpolicy_organization_constraints resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_organization_constraints\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_organization_constraints resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_organization_constraints` InSpec audit resource to to test a Google Cloud OrganizationConstraint resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_organization_constraints(parent: 'value_parent') do\n    it { should exist }\n    its('names') { should include 'value_name'}\n    its('display_names') { should include 'value_displayName'}\n    its('descriptions') { should include 'value_description'}\n    its('constraint_defaults') { should include 'value_constraint_default'}\n    its('list_constraints') { should include 'value_list_constraint'}\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_organization_constraints` resource:\n\n  * `display_names`: The human readable name. Mutable.\n\n  * `descriptions`: Detailed description of what this constraint controls as well as how and where it is enforced. Mutable.\n\n  * `constraint_defaults`: The evaluation behavior of this constraint in the absence of a policy.\n  Possible values:\n    * CONSTRAINT_DEFAULT_UNSPECIFIED\n    * ALLOW\n    * DENY\n\n  * `supports_dry_runs`: Shows if dry run is supported for this constraint or not.\n\n  * `names`: Immutable. The resource name of the constraint. Must be in one of the following forms: * `projects/{project_number}/constraints/{constraint_name}` * `folders/{folder_id}/constraints/{constraint_name}` * `organizations/{organization_id}/constraints/{constraint_name}` For example, \"/projects/123/constraints/compute.disableSerialPortAccess\".\n\n  * `list_constraints`: A constraint that allows or disallows a list of string values, which are configured by an Organization Policy administrator with a policy.\n\n    * `supports_under`: Indicates whether subtrees of the Resource Manager resource hierarchy can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"under:folders/123\"` would match any resource under the 'folders/123' folder.\n\n    * `supports_in`: Indicates whether values grouped into categories can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"in:Python\"` would match any value in the 'Python' group.\n\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_organization_policies.md",
    "content": "+++\ntitle = \"google_orgpolicy_organization_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_organization_policies\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_organization_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_organization_policies` InSpec audit resource to to test a Google Cloud OrganizationPolicy resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_organization_policies(parent: ' value_parent') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_organization_policies` resource:\n\nSee [google_orgpolicy_organization_policy](google_orgpolicy_organization_policy) for more detailed information.\n\n  * `dry_run_specs`: an array of `google_orgpolicy_organization_policy` dry_run_spec\n  * `specs`: an array of `google_orgpolicy_organization_policy` spec\n  * `names`: an array of `google_orgpolicy_organization_policy` name\n  * `alternates`: an array of `google_orgpolicy_organization_policy` alternate\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_organization_policy.md",
    "content": "+++\ntitle = \"google_orgpolicy_organization_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_organization_policy\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_organization_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_organization_policy` InSpec audit resource to to test a Google Cloud OrganizationPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_orgpolicy_organization_policy(parent: 'value_parent', name: ' value_name') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\nend\n\ndescribe google_orgpolicy_organization_policy(parent: 'value_parent', name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_organization_policy` resource:\n\n\n  * `dry_run_spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `name`: Immutable. The resource name of the policy. Must be one of the following forms, where `constraint_name` is the name of the constraint which this policy configures: * `projects/{project_number}/policies/{constraint_name}` * `folders/{folder_id}/policies/{constraint_name}` * `organizations/{organization_id}/policies/{constraint_name}` For example, `projects/123/policies/compute.disableSerialPortAccess`. Note: `projects/{project_id}/policies/{constraint_name}` is also an acceptable name for API requests, but responses will return the name using the equivalent project number.\n\n  * `alternate`: Similar to PolicySpec but with an extra 'launch' field for launch reference. The PolicySpec here is specific for dry-run/darklaunch.\n\n    * `launch`: Reference to the launch that will be used while audit logging and to control the launch. Should be set only in the alternate policy.\n\n    * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n      * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n      * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n        * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n          * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n          * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n          * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n          * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n        * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n        * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n        * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n        * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n          * `denied_values`: List of values denied at this resource.\n\n          * `allowed_values`: List of values allowed at this resource.\n\n      * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n      * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n      * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_project_constraints.md",
    "content": "+++\ntitle = \"google_orgpolicy_project_constraints resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_project_constraints\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_project_constraints resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_orgpolicy_project_constraints` is used to test a Google Orgpolicy Project Constraint resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_project_constraints(parent: 'projects/test') do\n    it { should exist }\n    its('names') { should include 'value_name'}\n    its('display_names') { should include 'value_display_name'}\n    its('descriptions') { should include 'value_description'}\n    its('constraint_defaults') { should include value_constraint_default'}\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_project_constraint` resource:\n\n  * `display_names`: The human readable name. Mutable.\n\n  * `descriptions`: Detailed description of what this constraint controls as well as how and where it is enforced. Mutable.\n\n  * `constraint_defaults`: The evaluation behavior of this constraint in the absence of a policy.\n  Possible values:\n    * CONSTRAINT_DEFAULT_UNSPECIFIED\n    * ALLOW\n    * DENY\n\n  * `supports_dry_runs`: Shows if dry run is supported for this constraint or not.\n\n  * `names`: Immutable. The resource name of the constraint. Must be in one of the following forms: * `projects/{project_number}/constraints/{constraint_name}` * `folders/{folder_id}/constraints/{constraint_name}` * `organizations/{organization_id}/constraints/{constraint_name}` For example, \"/projects/123/constraints/compute.disableSerialPortAccess\".\n\n  * `list_constraints`: A constraint that allows or disallows a list of string values, which are configured by an Organization Policy administrator with a policy.\n\n    * `supports_under`: Indicates whether subtrees of the Resource Manager resource hierarchy can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"under:folders/123\"` would match any resource under the 'folders/123' folder.\n\n    * `supports_in`: Indicates whether values grouped into categories can be used in `Policy.allowed_values` and `Policy.denied_values`. For example, `\"in:Python\"` would match any value in the 'Python' group.\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://orgpolicy.googleapis.com/](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_project_policies.md",
    "content": "+++\ntitle = \"google_orgpolicy_project_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_project_policies\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_project_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_project_policies` InSpec audit resource to to test a Google Cloud ProjectPolicy resource.\n\n## Examples\n\n```ruby\n  describe google_orgpolicy_project_policies(parent: 'value_parent') do\n    it { should exist }\n    its('names'){ should include value_name}\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_project_policies` resource:\n\nSee [google_orgpolicy_project_policy](google_orgpolicy_project_policy) for more detailed information.\n\n  * `dry_run_specs`: an array of `google_orgpolicy_project_policy` dry_run_spec\n  * `specs`: an array of `google_orgpolicy_project_policy` spec\n  * `names`: an array of `google_orgpolicy_project_policy` name\n  * `alternates`: an array of `google_orgpolicy_project_policy` alternate\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [None](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_orgpolicy_project_policy.md",
    "content": "+++\ntitle = \"google_orgpolicy_project_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_orgpolicy_project_policy\"\nidentifier = \"inspec/resources/gcp/google_orgpolicy_project_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_orgpolicy_project_policy` InSpec audit resource to to test a Google Cloud ProjectPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_orgpolicy_project_policy(parent: value_parent,name: 'value_name') do\n\tit { should exist }\n  its('name'){ should cmp value_name}\n\nend\n\ndescribe google_orgpolicy_project_policy(parent: value_parent,name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_orgpolicy_project_policy` resource:\n\n\n  * `dry_run_spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n    * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n    * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n      * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n        * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n        * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n        * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n        * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n      * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n      * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n      * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n      * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n        * `denied_values`: List of values denied at this resource.\n\n        * `allowed_values`: List of values allowed at this resource.\n\n    * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n    * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n    * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n  * `name`: Immutable. The resource name of the policy. Must be one of the following forms, where `constraint_name` is the name of the constraint which this policy configures: * `projects/{project_number}/policies/{constraint_name}` * `folders/{folder_id}/policies/{constraint_name}` * `organizations/{organization_id}/policies/{constraint_name}` For example, `projects/123/policies/compute.disableSerialPortAccess`. Note: `projects/{project_id}/policies/{constraint_name}` is also an acceptable name for API requests, but responses will return the name using the equivalent project number.\n\n  * `alternate`: Similar to PolicySpec but with an extra 'launch' field for launch reference. The PolicySpec here is specific for dry-run/darklaunch.\n\n    * `launch`: Reference to the launch that will be used while audit logging and to control the launch. Should be set only in the alternate policy.\n\n    * `spec`: Defines a Google Cloud policy specification which is used to specify constraints for configurations of Google Cloud resources.\n\n      * `update_time`: Output only. The time stamp this was previously updated. This represents the last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.\n\n      * `rules`: In policies for boolean constraints, the following requirements apply: - There must be one and only one policy rule where condition is unset. - Boolean policy rules with conditions must set `enforced` to the opposite of the policy rule without a condition. - During policy evaluation, policy rules with conditions that are true for a target resource take precedence.\n\n        * `condition`: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.\n\n          * `title`: Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n\n          * `location`: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n\n          * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n          * `description`: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n\n        * `deny_all`: Setting this to true means that all values are denied. This field can be set only in policies for list constraints.\n\n        * `allow_all`: Setting this to true means that all values are allowed. This field can be set only in policies for list constraints.\n\n        * `enforce`: If `true`, then the policy is enforced. If `false`, then any configuration is acceptable. This field can be set only in policies for boolean constraints.\n\n        * `values`: A message that holds specific allowed and denied values. This message can define specific values and subtrees of the Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - `projects/` (for example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`) - `organizations/` (for example, `organizations/1234`) The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used.\n\n          * `denied_values`: List of values denied at this resource.\n\n          * `allowed_values`: List of values allowed at this resource.\n\n      * `etag`: An opaque tag indicating the current version of the policySpec, used for concurrency control. This field is ignored if used in a `CreatePolicy` request. When the policy is returned from either a `GetPolicy` or a `ListPolicies` request, this `etag` indicates the version of the current policySpec to use when executing a read-modify-write loop. When the policy is returned from a `GetEffectivePolicy` request, the `etag` will be unset.\n\n      * `reset`: Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific constraint at this resource. This field can be set in policies for either list or boolean constraints. If set, `rules` must be empty and `inherit_from_parent` must be set to false.\n\n      * `inherit_from_parent`: Determines the inheritance behavior for this policy. If `inherit_from_parent` is true, policy rules set higher up in the hierarchy (up to the closest root) are inherited and present in the effective policy. If it is false, then no rules are inherited, and this policy becomes the new root for evaluation. This field can be set only for policies which configure list constraints.\n\n\n## GCP permissions\n\nEnsure the [None](https://console.cloud.google.com/apis/library/orgpolicy.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project.md",
    "content": "+++\ntitle = \"google_project resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project\"\nidentifier = \"inspec/resources/gcp/google_project resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project` InSpec audit resource to to test a Google Cloud Project resource.\n\n## Examples\n\n```ruby\ndescribe google_project(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('project_id') { should cmp 'chef-gcp-inspec' }\n  its('lifecycle_state') { should cmp 'ACTIVE' }\nend\n```\n\n### Test that a GCP project has the expected project number\n\n    describe google_project(project: 'chef-inspec-gcp') do\n      its('project_number') { should eq 12345678 }\n    end\n\n### Test that a GCP project has the expected lifecycle state e.g. \"ACTIVE\"\n\n    describe google_project(project: 'chef-inspec-gcp') do\n      its('lifecycle_state') { should eq \"ACTIVE\" }\n    end\n\n### Validate that a GCP project has some arbitrary label with expected content (for example defined by regexp )\n\n    describe google_project(project: 'chef-inspec-gcp').label_value_by_key('season') do\n      it {should match '^(winter|spring|summer|autumn)$' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project` resource:\n\n\n  * `number`: Number uniquely identifying the project.\n\n  * `lifecycle_state`: The Project lifecycle state.\n  Possible values:\n    * LIFECYCLE_STATE_UNSPECIFIED\n    * ACTIVE\n    * DELETE_REQUESTED\n    * DELETE_IN_PROGRESS\n\n  * `name`: The user-assigned display name of the Project. It must be 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point.\n\n  * `create_time`: Time of creation\n\n  * `labels`: The labels associated with this Project.  Label keys must be between 1 and 63 characters long and must conform to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.  Label values must be between 0 and 63 characters long and must conform to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.  No more than 256 labels can be associated with a given resource.  Clients should store labels in a representation such as JSON that does not depend on specific characters being disallowed\n\n  * `parent`: A parent organization\n\n    * `type`: Must be organization.\n\n    * `id`: Id of the organization\n\n  * `project_id`: The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_alert_policies.md",
    "content": "+++\ntitle = \"google_project_alert_policies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_alert_policies\"\nidentifier = \"inspec/resources/gcp/google_project_alert_policies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_alert_policies` InSpec audit resource to to test a Google Cloud AlertPolicy resource.\n\n## Examples\n\n```ruby\ndescribe google_project_alert_policies(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('policy_display_names') { should include 'Display'}\n  its('combiners') { should include 'OR'}\nend\n```\n\n### Test that there are no more than a specified number of project alert policies available for the project\n\n    describe google_project_alert_policies(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected policy name is available for the project\n\n    describe google_project_alert_policies(project: 'chef-inspec-gcp') do\n      its('policy_names') { should include 'projects/spaterson-project/alertPolicies/9271751234503117449' }\n    end\n\n### Test whether any expected policy display name is available for the project\n\n    describe google_project_alert_policies(project: 'chef-inspec-gcp') do\n      its('policy_display_names') { should_not include 'banned policy' }\n    end\n\n### Ensure no existing policies are inactive\n\n    describe google_project_alert_policies(project: 'chef-inspec-gcp') do\n      its('policy_enabled_states') { should_not include false }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project_alert_policies` resource:\n\nSee [google_project_alert_policy](google_project_alert_policy) for more detailed information.\n\n  * `policy_names`: an array of `google_project_alert_policy` name\n  * `policy_display_names`: an array of `google_project_alert_policy` display_name\n  * `combiners`: an array of `google_project_alert_policy` combiner\n  * `creation_records`: an array of `google_project_alert_policy` creation_record\n  * `policy_enabled_states`: an array of `google_project_alert_policy` enabled\n  * `conditions`: an array of `google_project_alert_policy` conditions\n  * `notification_channels`: an array of `google_project_alert_policy` notification_channels\n  * `user_labels`: an array of `google_project_alert_policy` user_labels\n  * `documentations`: an array of `google_project_alert_policy` documentation\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Monitoring API](https://console.cloud.google.com/apis/library/monitoring.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_alert_policy.md",
    "content": "+++\ntitle = \"google_project_alert_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_alert_policy\"\nidentifier = \"inspec/resources/gcp/google_project_alert_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_alert_policy` InSpec audit resource to to test a Google Cloud AlertPolicy resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_project_alert_policies(project: 'chef-gcp-inspec').policy_names do |policy_name|\n    describe google_project_alert_policy(project: 'chef-gcp-inspec', name: policy_name) do\n      it { should exist }\n      its('display_name') { should cmp 'Display'}\n      its('combiner') { should cmp 'OR'}\n      it { should be_enabled }\n    end\n  end\nend\n```\n\n### Test that a GCP alert policy is enabled \n\n    describe google_project_alert_policy(policy: 'spaterson', name: '9271751234503117449') do\n      it { should be_enabled }\n    end\n\n### Test that a GCP compute alert policy display name is correct\n\n    describe google_project_alert_policy(policy: 'spaterson-project', name: '9271751234503117449') do\n      its('display_name') { should eq 'policy name' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project_alert_policy` resource:\n\n\n  * `name`: The unique resource name for this policy. Its syntax is: projects/[PROJECT_ID]/alertPolicies/[ALERT_POLICY_ID]\n\n  * `display_name`: A short name or phrase used to identify the policy in dashboards, notifications, and incidents. To avoid confusion, don't use the same display name for multiple policies in the same project. The name is limited to 512 Unicode characters.\n\n  * `combiner`: How to combine the results of multiple conditions to determine if an incident should be opened.\n  Possible values:\n    * AND\n    * OR\n    * AND_WITH_MATCHING_RESOURCE\n\n  * `creation_record`: A read-only record of the creation of the alerting policy. If provided in a call to create or update, this field will be ignored.\n\n    * `mutate_time`: When the change occurred.\n\n    * `mutated_by`: The email address of the user making the change.\n\n  * `enabled`: Whether or not the policy is enabled. The default is true.\n\n  * `conditions`: A list of conditions for the policy. The conditions are combined by AND or OR according to the combiner field. If the combined conditions evaluate to true, then an incident is created. A policy can have from one to six conditions.\n\n    * `condition_absent`: A condition that checks that a time series continues to receive new data points.\n\n      * `aggregations`: Specifies the alignment of data points in individual time series as well as how to combine the retrieved time series together (such as when aggregating multiple streams on each resource to a single stream for each resource or when aggregating streams across all members of a group of resources). Multiple aggregations are applied in the order specified.\n\n        * `per_series_aligner`: The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * ALIGN_NONE\n          * ALIGN_DELTA\n          * ALIGN_RATE\n          * ALIGN_INTERPOLATE\n          * ALIGN_NEXT_OLDER\n          * ALIGN_MIN\n          * ALIGN_MAX\n          * ALIGN_MEAN\n          * ALIGN_COUNT\n          * ALIGN_SUM\n          * ALIGN_STDDEV\n          * ALIGN_COUNT_TRUE\n          * ALIGN_COUNT_FALSE\n          * ALIGN_FRACTION_TRUE\n          * ALIGN_PERCENTILE_99\n          * ALIGN_PERCENTILE_95\n          * ALIGN_PERCENTILE_50\n          * ALIGN_PERCENTILE_05\n          * ALIGN_PERCENT_CHANGE\n\n        * `group_by_fields`: The set of fields to preserve when crossSeriesReducer is specified. The groupByFields determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The crossSeriesReducer is applied to each subset of time series. It is not possible to reduce across different resource types, so this field implicitly contains resource.type. Fields not specified in groupByFields are aggregated away. If groupByFields is not specified and all the time series have the same resource type, then the time series are aggregated into a single output time series. If crossSeriesReducer is not defined, this field is ignored.\n\n        * `alignment_period`: The alignment period for per-time series alignment. If present, alignmentPeriod must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If perSeriesAligner is not specified or equals ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified and does not equal ALIGN_NONE, then this field must be defined; otherwise an error is returned.\n\n        * `cross_series_reducer`: The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * REDUCE_NONE\n          * REDUCE_MEAN\n          * REDUCE_MIN\n          * REDUCE_MAX\n          * REDUCE_SUM\n          * REDUCE_STDDEV\n          * REDUCE_COUNT\n          * REDUCE_COUNT_TRUE\n          * REDUCE_COUNT_FALSE\n          * REDUCE_FRACTION_TRUE\n          * REDUCE_PERCENTILE_99\n          * REDUCE_PERCENTILE_95\n          * REDUCE_PERCENTILE_50\n          * REDUCE_PERCENTILE_05\n\n      * `trigger`: The number/percent of time series for which the comparison must hold in order for the condition to trigger. If unspecified, then the condition will trigger if the comparison is true for any of the time series that have been identified by filter and aggregations.\n\n        * `percent`: The percentage of time series that must fail the predicate for the condition to be triggered.\n\n        * `count`: The absolute number of time series that must fail the predicate for the condition to be triggered.\n\n      * `duration`: The amount of time that a time series must fail to report new data to be considered failing. Currently, only values that are a multiple of a minute--e.g. 60s, 120s, or 300s --are supported.\n\n      * `filter`: A filter that identifies which time series should be compared with the threshold.The filter is similar to the one that is specified in the MetricService.ListTimeSeries request (that call is useful to verify the time series that will be retrieved / processed) and must specify the metric type and optionally may contain restrictions on resource type, resource labels, and metric labels. This field may not exceed 2048 Unicode characters in length.\n\n    * `name`: The unique resource name for this condition. Its syntax is: projects/[PROJECT_ID]/alertPolicies/[POLICY_ID]/conditions/[CONDITION_ID] [CONDITION_ID] is assigned by Stackdriver Monitoring when the condition is created as part of a new or updated alerting policy.\n\n    * `condition_monitoring_query_language`: A Monitoring Query Language query that outputs a boolean stream\n\n      * `query`: Monitoring Query Language query that outputs a boolean stream.\n\n      * `duration`: The amount of time that a time series must violate the threshold to be considered failing. Currently, only values that are a multiple of a minute--e.g., 0, 60, 120, or 300 seconds--are supported. If an invalid value is given, an error will be returned. When choosing a duration, it is useful to keep in mind the frequency of the underlying time series data (which may also be affected by any alignments specified in the aggregations field); a good duration is long enough so that a single outlier does not generate spurious alerts, but short enough that unhealthy states are detected and alerted on quickly.\n\n      * `trigger`: The number/percent of time series for which the comparison must hold in order for the condition to trigger. If unspecified, then the condition will trigger if the comparison is true for any of the time series that have been identified by filter and aggregations, or by the ratio, if denominator_filter and denominator_aggregations are specified.\n\n        * `percent`: The percentage of time series that must fail the predicate for the condition to be triggered.\n\n        * `count`: The absolute number of time series that must fail the predicate for the condition to be triggered.\n\n    * `condition_threshold`: A condition that compares a time series against a threshold.\n\n      * `threshold_value`: A value against which to compare the time series.\n\n      * `denominator_filter`: A filter that identifies a time series that should be used as the denominator of a ratio that will be compared with the threshold. If a denominator_filter is specified, the time series specified by the filter field will be used as the numerator.The filter is similar to the one that is specified in the MetricService.ListTimeSeries request (that call is useful to verify the time series that will be retrieved / processed) and must specify the metric type and optionally may contain restrictions on resource type, resource labels, and metric labels. This field may not exceed 2048 Unicode characters in length.\n\n      * `denominator_aggregations`: Specifies the alignment of data points in individual time series selected by denominatorFilter as well as how to combine the retrieved time series together (such as when aggregating multiple streams on each resource to a single stream for each resource or when aggregating streams across all members of a group of resources).When computing ratios, the aggregations and denominator_aggregations fields must use the same alignment period and produce time series that have the same periodicity and labels.This field is similar to the one in the MetricService.ListTimeSeries request. It is advisable to use the ListTimeSeries method when debugging this field.\n\n        * `per_series_aligner`: The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * ALIGN_NONE\n          * ALIGN_DELTA\n          * ALIGN_RATE\n          * ALIGN_INTERPOLATE\n          * ALIGN_NEXT_OLDER\n          * ALIGN_MIN\n          * ALIGN_MAX\n          * ALIGN_MEAN\n          * ALIGN_COUNT\n          * ALIGN_SUM\n          * ALIGN_STDDEV\n          * ALIGN_COUNT_TRUE\n          * ALIGN_COUNT_FALSE\n          * ALIGN_FRACTION_TRUE\n          * ALIGN_PERCENTILE_99\n          * ALIGN_PERCENTILE_95\n          * ALIGN_PERCENTILE_50\n          * ALIGN_PERCENTILE_05\n          * ALIGN_PERCENT_CHANGE\n\n        * `group_by_fields`: The set of fields to preserve when crossSeriesReducer is specified. The groupByFields determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The crossSeriesReducer is applied to each subset of time series. It is not possible to reduce across different resource types, so this field implicitly contains resource.type. Fields not specified in groupByFields are aggregated away. If groupByFields is not specified and all the time series have the same resource type, then the time series are aggregated into a single output time series. If crossSeriesReducer is not defined, this field is ignored.\n\n        * `alignment_period`: The alignment period for per-time series alignment. If present, alignmentPeriod must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If perSeriesAligner is not specified or equals ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified and does not equal ALIGN_NONE, then this field must be defined; otherwise an error is returned.\n\n        * `cross_series_reducer`: The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * REDUCE_NONE\n          * REDUCE_MEAN\n          * REDUCE_MIN\n          * REDUCE_MAX\n          * REDUCE_SUM\n          * REDUCE_STDDEV\n          * REDUCE_COUNT\n          * REDUCE_COUNT_TRUE\n          * REDUCE_COUNT_FALSE\n          * REDUCE_FRACTION_TRUE\n          * REDUCE_PERCENTILE_99\n          * REDUCE_PERCENTILE_95\n          * REDUCE_PERCENTILE_50\n          * REDUCE_PERCENTILE_05\n\n      * `duration`: The amount of time that a time series must violate the threshold to be considered failing. Currently, only values that are a multiple of a minute--e.g., 0, 60, 120, or 300 seconds--are supported. If an invalid value is given, an error will be returned. When choosing a duration, it is useful to keep in mind the frequency of the underlying time series data (which may also be affected by any alignments specified in the aggregations field); a good duration is long enough so that a single outlier does not generate spurious alerts, but short enough that unhealthy states are detected and alerted on quickly.\n\n      * `comparison`: The comparison to apply between the time series (indicated by filter and aggregation) and the threshold (indicated by threshold_value). The comparison is applied on each time series, with the time series on the left-hand side and the threshold on the right-hand side. Only COMPARISON_LT and COMPARISON_GT are supported currently.\n      Possible values:\n        * COMPARISON_GT\n        * COMPARISON_GE\n        * COMPARISON_LT\n        * COMPARISON_LE\n        * COMPARISON_EQ\n        * COMPARISON_NE\n\n      * `trigger`: The number/percent of time series for which the comparison must hold in order for the condition to trigger. If unspecified, then the condition will trigger if the comparison is true for any of the time series that have been identified by filter and aggregations, or by the ratio, if denominator_filter and denominator_aggregations are specified.\n\n        * `percent`: The percentage of time series that must fail the predicate for the condition to be triggered.\n\n        * `count`: The absolute number of time series that must fail the predicate for the condition to be triggered.\n\n      * `aggregations`: Specifies the alignment of data points in individual time series as well as how to combine the retrieved time series together (such as when aggregating multiple streams on each resource to a single stream for each resource or when aggregating streams across all members of a group of resources). Multiple aggregations are applied in the order specified.This field is similar to the one in the MetricService.ListTimeSeries request. It is advisable to use the ListTimeSeries method when debugging this field.\n\n        * `per_series_aligner`: The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * ALIGN_NONE\n          * ALIGN_DELTA\n          * ALIGN_RATE\n          * ALIGN_INTERPOLATE\n          * ALIGN_NEXT_OLDER\n          * ALIGN_MIN\n          * ALIGN_MAX\n          * ALIGN_MEAN\n          * ALIGN_COUNT\n          * ALIGN_SUM\n          * ALIGN_STDDEV\n          * ALIGN_COUNT_TRUE\n          * ALIGN_COUNT_FALSE\n          * ALIGN_FRACTION_TRUE\n          * ALIGN_PERCENTILE_99\n          * ALIGN_PERCENTILE_95\n          * ALIGN_PERCENTILE_50\n          * ALIGN_PERCENTILE_05\n          * ALIGN_PERCENT_CHANGE\n\n        * `group_by_fields`: The set of fields to preserve when crossSeriesReducer is specified. The groupByFields determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The crossSeriesReducer is applied to each subset of time series. It is not possible to reduce across different resource types, so this field implicitly contains resource.type. Fields not specified in groupByFields are aggregated away. If groupByFields is not specified and all the time series have the same resource type, then the time series are aggregated into a single output time series. If crossSeriesReducer is not defined, this field is ignored.\n\n        * `alignment_period`: The alignment period for per-time series alignment. If present, alignmentPeriod must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If perSeriesAligner is not specified or equals ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified and does not equal ALIGN_NONE, then this field must be defined; otherwise an error is returned.\n\n        * `cross_series_reducer`: The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series.Time series data must be aligned in order to perform cross- time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.\n        Possible values:\n          * REDUCE_NONE\n          * REDUCE_MEAN\n          * REDUCE_MIN\n          * REDUCE_MAX\n          * REDUCE_SUM\n          * REDUCE_STDDEV\n          * REDUCE_COUNT\n          * REDUCE_COUNT_TRUE\n          * REDUCE_COUNT_FALSE\n          * REDUCE_FRACTION_TRUE\n          * REDUCE_PERCENTILE_99\n          * REDUCE_PERCENTILE_95\n          * REDUCE_PERCENTILE_50\n          * REDUCE_PERCENTILE_05\n\n      * `filter`: A filter that identifies which time series should be compared with the threshold.The filter is similar to the one that is specified in the MetricService.ListTimeSeries request (that call is useful to verify the time series that will be retrieved / processed) and must specify the metric type and optionally may contain restrictions on resource type, resource labels, and metric labels. This field may not exceed 2048 Unicode characters in length.\n\n    * `display_name`: A short name or phrase used to identify the condition in dashboards, notifications, and incidents. To avoid confusion, don't use the same display name for multiple conditions in the same policy.\n\n  * `notification_channels`: Identifies the notification channels to which notifications should be sent when incidents are opened or closed or when new violations occur on an already opened incident. Each element of this array corresponds to the name field in each of the NotificationChannel objects that are returned from the notificationChannels.list method. The syntax of the entries in this field is `projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]`\n\n  * `user_labels`: This field is intended to be used for organizing and identifying the AlertPolicy objects.The field can contain up to 64 entries. Each key and value is limited to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values can contain only lowercase letters, numerals, underscores, and dashes. Keys must begin with a letter.\n\n  * `documentation`: Documentation that is included with notifications and incidents related to this policy. Best practice is for the documentation to include information to help responders understand, mitigate, escalate, and correct the underlying problems detected by the alerting policy. Notification channels that have limited capacity might not show this documentation.\n\n    * `content`: The text of the documentation, interpreted according to mimeType. The content may not exceed 8,192 Unicode characters and may not exceed more than 10,240 bytes when encoded in UTF-8 format, whichever is smaller.\n\n    * `mime_type`: The format of the content field. Presently, only the value \"text/markdown\" is supported.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Monitoring API](https://console.cloud.google.com/apis/library/monitoring.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_alert_policy_condition.md",
    "content": "+++\ntitle = \"google_project_alert_policy_condition resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_alert_policy_condition\"\nidentifier = \"inspec/resources/gcp/google_project_alert_policy_condition resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_project\\_alert\\_policy\\_condition\n\nUse the `google_project_alert_policy_condition` InSpec audit resource to test properties of a single GCP project alert policy condition.\n\n<br>\n\n## Syntax\n\nA `google_project_alert_policy_condition` resource block declares the tests for a single GCP project alert policy condition by name and filter.\n\n    describe google_project_alert_policy_condition(name: 'projects/spaterson-project/alertPolicies/9271751234503117449', filter 'project=\\\"spaterson-project\\\"') do\n      it { should exist }\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n\n### Test that a GCP project alert policy condition has a particular threshold value\n\n    describe google_project_alert_policy_condition(name: 'projects/spaterson-project/alertPolicies/9271751234503117449', filter 'project=\\\"spaterson-project\\\"') do\n      its('condition_threshold_value'){ should eq 0.001 }\n    end\n\n### Test that a GCP project alert policy condition has a particular aggregation alignment period\n\n    describe google_project_alert_policy_condition(name: 'projects/spaterson-project/alertPolicies/9271751234503117449', filter 'project=\\\"spaterson-project\\\"') do\n      its('aggregation_alignment_period'){ should eq '60s' }\n    end\n\n<br>\n\n## Properties\n\n*  `condition_threshold_value`, `aggregation_alignment_period`, `aggregation_per_series_aligner`, `aggregation_cross_series_reducer`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/api/logging.googleapis.com/) is enabled for the project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_iam_binding.md",
    "content": "+++\ntitle = \"google_project_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_project_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_project_iam_binding` is used to test a Google Project Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_project_iam_binding(project: \"project\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\nThis resource supports [IAM conditions](https://cloud.google.com/iam/docs/conditions-overview). Specifying a `condition` in the constructor matches only bindings with that condition. `condition` has three possible fields, `title`, `expression` and `description`. If any of these fields are unspecified they will not be matched.\n\n```\ndescribe google_project_iam_binding(project: \"project\", role: \"roles/browser\", condition: { title: \"my title\" }) do\n  it { should exist }\n  its('members.count'){ should cmp 1 }\n  its('members') { should include 'user:testuser@example.com' }\n  its('condition.title') {should cmp 'my title' }\n  its('condition.expression') { should cmp \"request.time < timestamp('2020-10-01T00:00:00.000Z')\" }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_project_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `condition`: Contains information about when this binding is to be applied.\n\n  \t* `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n  \t* `title`: An optional title for the expression, i.e. a short string describing its purpose.\n\n  \t* `description`: An optional description of the expression. This is a longer text which describes the expression.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_iam_bindings.md",
    "content": "+++\ntitle = \"google_project_iam_bindings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_iam_bindings\"\nidentifier = \"inspec/resources/gcp/google_project_iam_bindings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_project\\_iam\\_bindings\n\n**This resource is deprecated. Please use `google_project_iam_policy` instead**\n\nUse the `google_project_iam_bindings` InSpec audit resource to test properties of all, or a filtered group of, GCP project IAM bindings.\n\n<br>\n\n## Syntax\n\nA `google_project_iam_bindings` resource block collects GCP project IAM bindings then tests that group.\n\n    describe google_project_iam_bindings(project: 'chef-inspec-gcp') do\n      it { should exist }\n    end\n\nUse this InSpec resource to enumerate roles then test in-depth using `google_project_iam_binding`.\n\n    google_project_iam_bindings(project: 'chef-inspec-gcp').iam_binding_roles.each do |iam_binding_role|\n      describe google_project_iam_binding(project: 'chef-inspec-gcp',  role: iam_binding_role) do\n        it { should exist }\n        its('members') {should include 'user:someuser@domain.com' }\n      end\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that there are no more than a specified number of IAM bindings roles available for the project\n\n    describe google_project_iam_bindings(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected role is available for the project\n\n    describe google_project_iam_bindings(project: 'chef-inspec-gcp') do\n      its('iam_binding_roles') { should include \"roles/storage.admin\" }\n    end\n    \n### Test that a particular role does not exist using filtering of the plural resource\n\n    describe google_project_iam_bindings(project: 'chef-inspec-gcp').where(iam_binding_role: \"roles/iam.securityReviewer\") do\n      it { should_not exist }\n    end\n\n<br>\n\n## Filter criteria\n\nThis resource supports the following filter criteria:  `iam_binding_role`.  This may be used with `where`, as a block or as a method.\n\n## Properties\n\n*  `iam_binding_roles` - an array of google_project_iam_binding role strings e.g. `[\"roles/compute.admin\", \"roles/owner\"]`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the project."
  },
  {
    "path": "docs-chef-io/content/google_project_iam_custom_role.md",
    "content": "+++\ntitle = \"google_project_iam_custom_role resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_iam_custom_role\"\nidentifier = \"inspec/resources/gcp/google_project_iam_custom_role resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_iam_custom_role` InSpec audit resource to to test a Google Cloud CustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_project_iam_custom_role(project: 'chef-gcp-inspec', name: 'admin-role') do\n  it { should exist }\n  its('stage') { should eq 'GA' }\n  its('included_permissions') { should eq [\"iam.roles.list\"] }\nend\n\ndescribe google_project_iam_custom_role(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP project IAM custom role has the expected stage in the launch lifecycle\n\n    describe google_project_iam_custom_role(project: 'chef-inspec-gcp', name: 'chef-inspec-gcp-role-abcd') do\n      its('stage') { should eq \"GA\" }\n    end\n\n### Test that a GCP project IAM custom role has the expected included permissions\n\n    describe google_project_iam_custom_role(project: 'chef-inspec-gcp', name: 'chef-inspec-gcp-role-abcd') do\n      its('included_permissions') { should eq [\"iam.roles.list\"] }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project_iam_custom_role` resource:\n\n\n  * `name`: The name of the role.\n\n  * `title`: A human-readable title for the role. Typically this is limited to 100 UTF-8 bytes.\n\n  * `description`: Human-readable description for the role\n\n  * `included_permissions`: Names of permissions this role grants when bound in an IAM policy.\n\n  * `stage`: The current launch stage of the role.\n  Possible values:\n    * ALPHA\n    * BETA\n    * GA\n    * DEPRECATED\n    * DISABLED\n    * EAP\n\n  * `deleted`: The current deleted state of the role\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_iam_custom_roles.md",
    "content": "+++\ntitle = \"google_project_iam_custom_roles resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_iam_custom_roles\"\nidentifier = \"inspec/resources/gcp/google_project_iam_custom_roles resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_iam_custom_roles` InSpec audit resource to to test a Google Cloud CustomRole resource.\n\n## Examples\n\n```ruby\ndescribe google_project_iam_custom_roles(project: 'chef-gcp-inspec') do\n  its('names') { should include \"projects/project-id/roles/role-id\" }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_project_iam_custom_roles` resource:\n\nSee [google_project_iam_custom_role](google_project_iam_custom_role) for more detailed information.\n\n  * `names`: an array of `google_project_iam_custom_role` name\n  * `titles`: an array of `google_project_iam_custom_role` title\n  * `descriptions`: an array of `google_project_iam_custom_role` description\n  * `included_permissions`: an array of `google_project_iam_custom_role` included_permissions\n  * `stages`: an array of `google_project_iam_custom_role` stage\n  * `deleteds`: an array of `google_project_iam_custom_role` deleted\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_iam_policy.md",
    "content": "+++\ntitle = \"google_project_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_project_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_project_iam_policy` is used to test a Google Project Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_project_iam_policy(project: \"project\") do\n  it { should exist }\nend\n\ngoogle_project_iam_policy(project: \"project\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\nThis resource supports [IAM conditions](https://cloud.google.com/iam/docs/conditions-overview).\n\n## Properties\n\nProperties that can be accessed from the `google_project_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n    * `condition`: Contains information about when this binding is to be applied.\n\n      * `expression`: Textual representation of an expression in Common Expression Language syntax.\n\n      * `title`: An optional title for the expression, i.e. a short string describing its purpose.\n\n      * `description`: An optional description of the expression. This is a longer text which describes the expression.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_logging_audit_config.md",
    "content": "+++\ntitle = \"google_project_logging_audit_config resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_logging_audit_config\"\nidentifier = \"inspec/resources/gcp/google_project_logging_audit_config resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_project\\_logging\\_audit\\_config\n\nUse the `google_compute_zone` InSpec audit resource to test properties of a single GCP compute zone.\n\n<br>\n\n## Syntax\n\nA `google_project_logging_audit_config` resource block declares the tests for a single GCP zone by project and name.\n\n    describe google_project_logging_audit_config(project: 'chef-inspec-gcp') do\n      it { should exist }\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n\n### Test that a GCP project logging audit configuration has a default type defined\n\n    describe google_project_logging_audit_config(project: 'chef-inspec-gcp') do\n      its('default_types') { should include 'ADMIN_READ' }\n    end\n\n\n### Test that a GCP project logging audit configuration has default exempted members\n\n    describe google_compute_zone(project: 'chef-inspec-gcp',  zone: 'us-east1-b') do\n      it { should_not have_default_exempted_members }\n    end\n\n<br>\n\n## Properties\n\n*  `default_types`, `default_exempted_members`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the project."
  },
  {
    "path": "docs-chef-io/content/google_project_metric.md",
    "content": "+++\ntitle = \"google_project_metric resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_metric\"\nidentifier = \"inspec/resources/gcp/google_project_metric resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_metric` InSpec audit resource to to test a Google Cloud Metric resource.\n\n## Examples\n\n```ruby\ndescribe google_project_metric(project: 'chef-gcp-inspec', name: 'some/metric') do\n  it { should exist }\n  its('filter') { should cmp 'resource.type=gae_app AND severity>=ERROR' }\n  its('metric_descriptor.metric_kind') { should cmp 'DELTA' }\n  its('metric_descriptor.value_type') { should cmp 'INT64' }\nend\n\ndescribe google_project_metric(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP project metric exists\n\n    describe google_project_metric(project: 'chef-inspec-gcp',  metric: 'metric_name') do\n      it { should exist }\n    end\n\n### Test that a GCP compute zone has an expected CPU platform\n\n    describe google_project_metric(project: 'chef-inspec-gcp',  metric: 'metric_name') do\n      its('filter') { should eq \"(protoPayload.serviceName=\\\"cloudresourcemanager.googleapis.com\\\")\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project_metric` resource:\n\n\n  * `name`: The client-assigned metric identifier. Examples - \"error_count\", \"nginx/requests\". Metric identifiers are limited to 100 characters and can include only the following characters A-Z, a-z, 0-9, and the special characters _-.,+!*',()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.\n\n  * `description`: A description of this metric, which is used in documentation. The maximum length of the description is 8000 characters.\n\n  * `filter`: An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-filters) which is used to match log entries.\n\n  * `metric_descriptor`: The metric descriptor associated with the logs-based metric.\n\n    * `unit`: The unit in which the metric value is reported. It is only applicable if the valueType is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard\n\n    * `value_type`: Whether the measurement is an integer, a floating-point number, etc. Some combinations of metricKind and valueType might not be supported. For counter metrics, set this to INT64.\n    Possible values:\n      * BOOL\n      * INT64\n      * DOUBLE\n      * STRING\n      * DISTRIBUTION\n      * MONEY\n\n    * `metric_kind`: Whether the metric records instantaneous values, changes to a value, etc. Some combinations of metricKind and valueType might not be supported. For counter metrics, set this to DELTA.\n    Possible values:\n      * DELTA\n      * GAUGE\n      * CUMULATIVE\n\n    * `labels`: The set of labels that can be used to describe a specific instance of this metric type. For example, the appengine.googleapis.com/http/server/response_latencies metric type has a label for the HTTP response code, response_code, so you can look at latencies for successful responses or just for responses that failed.\n\n      * `key`: The label key.\n\n      * `description`: A human-readable description for the label.\n\n      * `value_type`: The type of data that can be assigned to the label.\n      Possible values:\n        * BOOL\n        * INT64\n        * STRING\n\n    * `display_name`: A concise name for the metric, which can be displayed in user interfaces. Use sentence case  without an ending period, for example \"Request count\". This field is optional but it is  recommended to be set for any metrics associated with user-visible concepts, such as Quota.\n\n    * `type`: The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`.\n\n  * `label_extractors`: A map from a label key string to an extractor expression which is used to extract data from a log entry field and assign as the label value. Each label key specified in the LabelDescriptor must have an associated extractor expression in this map. The syntax of the extractor expression is the same as for the valueExtractor field.\n\n  * `value_extractor`: A valueExtractor is required when using a distribution logs-based metric to extract the values to record from a log entry. Two functions are supported for value extraction - EXTRACT(field) or REGEXP_EXTRACT(field, regex). The argument are 1. field - The name of the log entry field from which the value is to be extracted. 2. regex - A regular expression using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax) with a single capture group to extract data from the specified log entry field. The value of the field is converted to a string before applying the regex. It is an error to specify a regex that does not include exactly one capture group.\n\n  * `bucket_options`: The bucketOptions are required when the logs-based metric is using a DISTRIBUTION value type and it describes the bucket boundaries used to create a histogram of the extracted values.\n\n    * `linear_buckets`: Specifies a linear sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket.\n\n      * `num_finite_buckets`: Must be greater than 0.\n\n      * `width`: Must be greater than 0.\n\n      * `offset`: Lower bound of the first bucket.\n\n    * `exponential_buckets`: Specifies an exponential sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket.\n\n      * `num_finite_buckets`: Must be greater than 0.\n\n      * `growth_factor`: Must be greater than 1.\n\n      * `scale`: Must be greater than 0.\n\n    * `explicit_buckets`: Specifies a set of buckets with arbitrary widths.\n\n      * `bounds`: The values must be monotonically increasing.\n\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_metrics.md",
    "content": "+++\ntitle = \"google_project_metrics resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_metrics\"\nidentifier = \"inspec/resources/gcp/google_project_metrics resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_project_metrics` InSpec audit resource to to test a Google Cloud Metric resource.\n\n## Examples\n\n```ruby\ndescribe google_project_metrics(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('metric_filters') { should include 'resource.type=gae_app AND severity>=ERROR' }\n  its('metric_names') { should include 'some/metric' }\nend\n\ndescribe.one do\n  google_project_metrics(project: 'chef-gcp-inspec').metric_types.each do |metric_type|\n    describe metric_type do\n      it { should match 'some/metric' }\n    end\n  end\nend\n```\n\n### Test that there are no more than a specified number of metrics available for the project\n\n    describe google_project_metrics(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected metric name is available for the project\n\n    describe google_project_metrics(project: 'chef-inspec-gcp') do\n      its('metric_names') { should include \"metric-name\" }\n    end\n\n### Test that a subset of all metrics with name matching \"*project*\" have a particular writer identity \n\n    google_project_metrics(project: 'chef-inspec-gcp').where(metric_name: /project/).metric_names.each do |metric_name|\n      describe google_project_metric(project: 'chef-inspec-gcp',  metric: metric_name) do\n        its('filter') { should eq \"(protoPayload.serviceName=\\\"cloudresourcemanager.googleapis.com\\\")\" }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_project_metrics` resource:\n\nSee [google_project_metric](google_project_metric) for more detailed information.\n\n  * `metric_names`: an array of `google_project_metric` name\n  * `descriptions`: an array of `google_project_metric` description\n  * `metric_filters`: an array of `google_project_metric` filter\n  * `metric_descriptors`: an array of `google_project_metric` metric_descriptor\n  * `label_extractors`: an array of `google_project_metric` label_extractors\n  * `value_extractors`: an array of `google_project_metric` value_extractor\n  * `bucket_options`: an array of `google_project_metric` bucket_options\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Stackdriver Logging API](https://console.cloud.google.com/apis/library/logging.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_service.md",
    "content": "+++\ntitle = \"google_project_service resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_service\"\nidentifier = \"inspec/resources/gcp/google_project_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_project_service` is used to test a Google Service resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_project_service(project: 'chef-gcp-inspec', name: 'maps-android-backend.googleapis.com') do\n  it { should exist }\n  its('state') { should cmp \"ENABLED\" }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_project_service` resource:\n\n\n  * `name`: The resource name of the service\n\n  * `parent`: The name of the parent of this service. For example 'projects/123'\n\n  * `state`: Whether or not the service has been enabled for use by the consumer.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * DISABLED\n    * ENABLED\n\n  * `disable_dependent_services`: Indicates if dependent services should also be disabled. Can only be turned on if service is disabled.\n\n  * `config`: The service configuration of the available service.\n\n    * `name`: The DNS address at which this service is available.\n\n    * `title`: The product title for this service\n\n    * `apis`: The list of API interfaces exported by this service.\n\n      * `name`: Name of the API\n\n      * `version`: The version of the API\n\n\n## GCP permissions\n\nEnsure the [Service Usage API](https://console.cloud.google.com/apis/library/serviceusage.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_project_services.md",
    "content": "+++\ntitle = \"google_project_services resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_project_services\"\nidentifier = \"inspec/resources/gcp/google_project_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_project_services` is used to test a Google Service resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_project_services(project: 'chef-gcp-inspec').names.each do |name|\n    describe name do\n      it { should match 'maps-android-backend.googleapis.com' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_project_services` resource:\n\nSee [google_project_service](google_project_service) for more detailed information.\n\n  * `names`: an array of `google_project_service` name\n  * `parents`: an array of `google_project_service` parent\n  * `states`: an array of `google_project_service` state\n  * `disable_dependent_services`: an array of `google_project_service` disable_dependent_services\n  * `configs`: an array of `google_project_service` config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Service Usage API](https://console.cloud.google.com/apis/library/serviceusage.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_projects.md",
    "content": "+++\ntitle = \"google_projects resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_projects\"\nidentifier = \"inspec/resources/gcp/google_projects resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_projects` InSpec audit resource to to test a Google Cloud Project resource.\n\n## Examples\n\n```ruby\ndescribe google_projects() do\n  its('count') { should be >= 1 }\n  its('project_ids') { should include 'chef-gcp-inspec' }\n  its('lifecycle_states') { should include 'ACTIVE' }\nend\n```\n\n### Test that there are no more than a specified number of projects available for the project\n\n    describe google_projects do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected named project is available\n\n    describe google_projects do\n      its('project_names'){ should include \"GCP Project Name\" }\n    end\n\n### Test that an expected project identifier is available\n\n    describe google_projects do\n      its('project_ids'){ should include \"gcp_project_id\" }\n    end\n    \n### Test that an expected project number is available\n\n    describe google_projects do\n      its('project_numbers'){ should include 1122334455 }\n    end    \n\n### Test that a particular subset of projects with id 'prod*' are in ACTIVE lifecycle state\n\n    google_projects.where(project_id: /^prod/).project_ids.each do |gcp_project_id|\n      describe google_project(project: gcp_project_id) do\n        it { should exist }\n        its('lifecycle_state') { should eq \"ACTIVE\" }\n      end\n    end\n\n### Test that a particular subset of ACTIVE projects with id 'prod*' exist\n\n    google_projects.where(project_id: /^prod/, lifecycle_state: 'ACTIVE').project_ids.each do |gcp_project_id|\n      describe google_project(project: gcp_project_id) do\n        it { should exist }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_projects` resource:\n\nSee [google_project](google_project) for more detailed information.\n\n  * `project_numbers`: an array of `google_project` number\n  * `lifecycle_states`: an array of `google_project` lifecycle_state\n  * `project_names`: an array of `google_project` name\n  * `create_times`: an array of `google_project` create_time\n  * `labels`: an array of `google_project` labels\n  * `parents`: an array of `google_project` parent\n  * `project_ids`: an array of `google_project` project_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_subscription.md",
    "content": "+++\ntitle = \"google_pubsub_subscription resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_subscription\"\nidentifier = \"inspec/resources/gcp/google_pubsub_subscription resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_pubsub_subscription` InSpec audit resource to to test a Google Cloud Subscription resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_subscription(project: 'chef-gcp-inspec', name: 'inspec-gcp-subscription') do\n  it { should exist }\nend\n\ndescribe google_pubsub_subscription(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_subscription` resource:\n\n\n  * `name`: Name of the subscription.\n\n  * `topic`: A reference to a Topic resource.\n\n  * `labels`: A set of key/value label pairs to assign to this Subscription.\n\n  * `push_config`: If push delivery is used with this subscription, this field is used to configure it. An empty pushConfig signifies that the subscriber will pull and ack messages using API methods.\n\n    * `oidc_token`: If specified, Pub/Sub will generate and attach an OIDC JWT token as an Authorization header in the HTTP request for every pushed message.\n\n      * `service_account_email`: Service account email to be used for generating the OIDC token. The caller (for subscriptions.create, subscriptions.patch, and subscriptions.modifyPushConfig RPCs) must have the iam.serviceAccounts.actAs permission for the service account.\n\n      * `audience`: Audience to be used when generating OIDC token. The audience claim identifies the recipients that the JWT is intended for. The audience value is a single case-sensitive string. Having multiple values (array) for the audience field is not supported. More info about the OIDC JWT token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the Push endpoint URL will be used.\n\n    * `push_endpoint`: A URL locating the endpoint to which messages should be pushed. For example, a Webhook endpoint might use \"https://example.com/push\".\n\n    * `attributes`: Endpoint configuration attributes.  Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery.  The currently supported attribute is x-goog-version, which you can use to change the format of the pushed message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the pushed message (i.e., its fields and metadata). The endpoint version is based on the version of the Pub/Sub API.  If not present during the subscriptions.create call, it will default to the version of the API used to make such call. If not present during a subscriptions.modifyPushConfig call, its value will not be changed. subscriptions.get calls will always return a valid version, even if the subscription was created without this attribute.  The possible values for this attribute are:  - v1beta1: uses the push format defined in the v1beta1 Pub/Sub API. - v1 or v1beta2: uses the push format defined in the v1 Pub/Sub API.\n\n  * `ack_deadline_seconds`: This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis).  For pull subscriptions, this value is used as the initial value for the ack deadline. To override this value for a given message, call subscriptions.modifyAckDeadline with the corresponding ackId if using pull. The minimum custom deadline you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds (10 minutes). If this parameter is 0, a default value of 10 seconds is used.  For push delivery, this value is also used to set the request timeout for the call to the push endpoint.  If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message.\n\n  * `message_retention_duration`: How long to retain unacknowledged messages in the subscription's backlog, from the moment a message is published. If retainAckedMessages is true, then this also configures the retention of acknowledged messages, and thus configures how far back in time a subscriptions.seek can be done. Defaults to 7 days. Cannot be more than 7 days (`\"604800s\"`) or less than 10 minutes (`\"600s\"`).  A duration in seconds with up to nine fractional digits, terminated by 's'. Example: `\"600.5s\"`.\n\n  * `retain_acked_messages`: Indicates whether to retain acknowledged messages. If `true`, then messages are not expunged from the subscription's backlog, even if they are acknowledged, until they fall out of the messageRetentionDuration window.\n\n  * `expiration_policy`: A policy that specifies the conditions for this subscription's expiration. A subscription is considered active as long as any connected subscriber is successfully consuming messages from the subscription or is issuing operations on the subscription. If expirationPolicy is not set, a default policy with ttl of 31 days will be used.  If it is set but ttl is \"\", the resource never expires.  The minimum allowed value for expirationPolicy.ttl is 1 day.\n\n    * `ttl`: Specifies the \"time-to-live\" duration for an associated resource. The resource expires if it is not active for a period of ttl. If ttl is not set, the associated resource never expires. A duration in seconds with up to nine fractional digits, terminated by 's'. Example - \"3.5s\".\n\n  * `filter`: The subscription only delivers the messages that match the filter.  Pub/Sub automatically acknowledges the messages that don't match the filter. You can filter messages by their attributes. The maximum length of a filter is 256 bytes. After creating the subscription,  you can't modify the filter.\n\n  * `dead_letter_policy`: A policy that specifies the conditions for dead lettering messages in this subscription. If dead_letter_policy is not set, dead lettering is disabled.  The Cloud Pub/Sub service account associated with this subscription's parent project (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have permission to Acknowledge() messages on this subscription.\n\n    * `dead_letter_topic`: The name of the topic to which dead letter messages should be published. Format is `projects/{project}/topics/{topic}`.  The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,  service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have permission to Publish() to this topic.  The operation will fail if the topic does not exist. Users should ensure that there is a subscription attached to this topic since messages published to a topic with no subscriptions are lost.\n\n    * `max_delivery_attempts`: The maximum number of delivery attempts for any message. The value must be between 5 and 100.  The number of delivery attempts is defined as 1 + (the sum of number of  NACKs and number of times the acknowledgement deadline has been exceeded for the message).  A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that client libraries may automatically extend ack_deadlines.  This field will be honored on a best effort basis.  If this parameter is 0, a default value of 5 is used.\n\n  * `retry_policy`: A policy that specifies how Pub/Sub retries message delivery for this subscription.  If not set, the default retry policy is applied. This generally implies that messages will be retried as soon as possible for healthy subscribers.  RetryPolicy will be triggered on NACKs or acknowledgement deadline exceeded events for a given message\n\n    * `minimum_backoff`: The minimum delay between consecutive deliveries of a given message. Value should be between 0 and 600 seconds. Defaults to 10 seconds. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n    * `maximum_backoff`: The maximum delay between consecutive deliveries of a given message. Value should be between 0 and 600 seconds. Defaults to 600 seconds.  A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n  * `enable_message_ordering`: If `true`, messages published with the same orderingKey in PubsubMessage will be delivered to the subscribers in the order in which they are received by the Pub/Sub system. Otherwise, they may be delivered in any order.\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_subscription_iam_binding.md",
    "content": "+++\ntitle = \"google_pubsub_subscription_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_subscription_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_pubsub_subscription_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_pubsub_subscription_iam_binding` is used to test a Google Subscription Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_pubsub_subscription_iam_binding(project: \"project\", name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_subscription_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_subscription_iam_policy.md",
    "content": "+++\ntitle = \"google_pubsub_subscription_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_subscription_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_pubsub_subscription_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_pubsub_subscription_iam_policy` is used to test a Google Subscription Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_subscription_iam_policy(project: \"project\", name: \"name\") do\n  it { should exist }\nend\n\ngoogle_pubsub_subscription_iam_policy(project: \"project\", name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_subscription_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_subscriptions.md",
    "content": "+++\ntitle = \"google_pubsub_subscriptions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_subscriptions\"\nidentifier = \"inspec/resources/gcp/google_pubsub_subscriptions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_pubsub_subscriptions` InSpec audit resource to to test a Google Cloud Subscription resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_subscriptions(project: 'chef-gcp-inspec') do\n  its('count') { should be >= 1 }\nend\n\ngoogle_pubsub_subscriptions(project: 'chef-gcp-inspec').names.each do |subscription_name|\n  describe google_pubsub_subscription(project: 'chef-gcp-inspec', name: subscription_name) do\n    it { should exist }\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_subscriptions` resource:\n\nSee [google_pubsub_subscription](google_pubsub_subscription) for more detailed information.\n\n  * `names`: an array of `google_pubsub_subscription` name\n  * `topics`: an array of `google_pubsub_subscription` topic\n  * `labels`: an array of `google_pubsub_subscription` labels\n  * `push_configs`: an array of `google_pubsub_subscription` push_config\n  * `ack_deadline_seconds`: an array of `google_pubsub_subscription` ack_deadline_seconds\n  * `message_retention_durations`: an array of `google_pubsub_subscription` message_retention_duration\n  * `retain_acked_messages`: an array of `google_pubsub_subscription` retain_acked_messages\n  * `expiration_policies`: an array of `google_pubsub_subscription` expiration_policy\n  * `filters`: an array of `google_pubsub_subscription` filter\n  * `dead_letter_policies`: an array of `google_pubsub_subscription` dead_letter_policy\n  * `retry_policies`: an array of `google_pubsub_subscription` retry_policy\n  * `enable_message_orderings`: an array of `google_pubsub_subscription` enable_message_ordering\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_topic.md",
    "content": "+++\ntitle = \"google_pubsub_topic resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_topic\"\nidentifier = \"inspec/resources/gcp/google_pubsub_topic resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_pubsub_topic` InSpec audit resource to to test a Google Cloud Topic resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_topic(project: 'chef-gcp-inspec', name: 'inspec-gcp-topic') do\n  it { should exist }\nend\n\ndescribe google_pubsub_topic(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_topic` resource:\n\n\n  * `name`: Name of the topic.\n\n  * `kms_key_name`: The resource name of the Cloud KMS CryptoKey to be used to protect access to messages published on this topic. Your project's PubSub service account (`service-{{PROJECT_NUMBER}}@gcp-sa-pubsub.iam.gserviceaccount.com`) must have `roles/cloudkms.cryptoKeyEncrypterDecrypter` to use this feature. The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`\n\n  * `labels`: A set of key/value label pairs to assign to this Topic.\n\n  * `message_storage_policy`: Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored. If not present, then no constraints are in effect.\n\n    * `allowed_persistence_regions`: A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage. Messages published by publishers running in non-allowed GCP regions (or running outside of GCP altogether) will be routed for storage in one of the allowed regions. An empty list means that no regions are allowed, and is not a valid configuration.\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_topic_iam_binding.md",
    "content": "+++\ntitle = \"google_pubsub_topic_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_topic_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_pubsub_topic_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_pubsub_topic_iam_binding` is used to test a Google Topic Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_pubsub_topic_iam_binding(project: \"project\", name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_topic_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_topic_iam_policy.md",
    "content": "+++\ntitle = \"google_pubsub_topic_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_topic_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_pubsub_topic_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_pubsub_topic_iam_policy` is used to test a Google Topic Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_topic_iam_policy(project: \"project\", name: \"name\") do\n  it { should exist }\nend\n\ngoogle_pubsub_topic_iam_policy(project: \"project\", name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_topic_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_pubsub_topics.md",
    "content": "+++\ntitle = \"google_pubsub_topics resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_pubsub_topics\"\nidentifier = \"inspec/resources/gcp/google_pubsub_topics resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_pubsub_topics` InSpec audit resource to to test a Google Cloud Topic resource.\n\n## Examples\n\n```ruby\ndescribe google_pubsub_topics(project: 'chef-gcp-inspec') do\n  it { should exist }\n  its('names') { should include 'inspec-gcp-topic' }\n  its('count') { should be >=1 }\nend\n\ndescribe.one do\n  google_pubsub_topics(project: 'chef-gcp-inspec').names.each do |topic_name|\n    describe google_pubsub_topic(project: 'chef-gcp-inspec', name: topic_name) do\n      it { should exist }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_pubsub_topics` resource:\n\nSee [google_pubsub_topic](google_pubsub_topic) for more detailed information.\n\n  * `names`: an array of `google_pubsub_topic` name\n  * `kms_key_names`: an array of `google_pubsub_topic` kms_key_name\n  * `labels`: an array of `google_pubsub_topic` labels\n  * `message_storage_policies`: an array of `google_pubsub_topic` message_storage_policy\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Pub/Sub API](https://console.cloud.google.com/apis/library/pubsub.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_redis_instance.md",
    "content": "+++\ntitle = \"google_redis_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_redis_instance\"\nidentifier = \"inspec/resources/gcp/google_redis_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_redis_instance` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_redis_instance(project: 'chef-gcp-inspec', region: 'us-central1', name: 'my-redis-cache') do\n  it { should exist }\n  its('tier') { should cmp 'STANDARD_HA' }\n  its('memory_size_gb') { should cmp '1' }\n  its('alternative_location_id') { should cmp 'us-central1-f' }\n  its('redis_version') { should cmp 'REDIS_3_2' }\n  its('display_name') { should cmp 'InSpec test instance' }\n  its('reserved_ip_range') { should cmp '192.168.0.0/29' }\n  its('labels') { should include('key' => 'value') }\nend\n\ndescribe google_redis_instance(project: 'chef-gcp-inspec', region: 'us-central1', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_redis_instance` resource:\n\n\n  * `alternative_location_id`: Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in [locationId].\n\n  * `auth_enabled`: Optional. Indicates whether OSS Redis AUTH is enabled for the instance. If set to \"true\" AUTH is enabled on the instance. Default value is \"false\" meaning AUTH is disabled.\n\n  * `authorized_network`: The full name of the Google Compute Engine network to which the instance is connected. If left unspecified, the default network will be used.\n\n  * `connect_mode`: The connection mode of the Redis instance.\n  Possible values:\n    * DIRECT_PEERING\n    * PRIVATE_SERVICE_ACCESS\n\n  * `create_time`: The time the instance was created in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.\n\n  * `current_location_id`: The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the [locationId] provided by the user at creation time. For Standard Tier instances, this can be either [locationId] or [alternativeLocationId] and can change after a failover event.\n\n  * `display_name`: An arbitrary and optional user-provided name for the instance.\n\n  * `host`: Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.\n\n  * `labels`: Resource labels to represent user provided metadata.\n\n  * `redis_configs`: Redis configuration parameters, according to http://redis.io/topics/config. Please check Memorystore documentation for the list of supported parameters: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance.FIELDS.redis_configs\n\n  * `location_id`: The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If [alternativeLocationId] is also provided, it must be different from [locationId].\n\n  * `name`: The ID of the instance or a fully qualified identifier for the instance.\n\n  * `memory_size_gb`: Redis memory size in GiB.\n\n  * `port`: The port number of the exposed Redis endpoint.\n\n  * `persistence_iam_identity`: Output only. Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is \"serviceAccount:\". The value may change over time for a given instance so should be checked before each import/export operation.\n\n  * `redis_version`: The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are:  - REDIS_5_0 for Redis 5.0 compatibility - REDIS_4_0 for Redis 4.0 compatibility - REDIS_3_2 for Redis 3.2 compatibility\n\n  * `reserved_ip_range`: The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.\n\n  * `tier`: The service tier of the instance. Must be one of these values:  - BASIC: standalone instance - STANDARD_HA: highly available primary/replica instances\n  Possible values:\n    * BASIC\n    * STANDARD_HA\n\n  * `transit_encryption_mode`: (Beta only) The TLS mode of the Redis instance, If not provided, TLS is disabled for the instance.  - SERVER_AUTHENTICATION: Client to Server traffic encryption enabled with server authentcation\n  Possible values:\n    * SERVER_AUTHENTICATION\n    * DISABLED\n\n  * `server_ca_certs`: (Beta only) List of server CA certificates for the instance.\n\n    * `serial_number`: Serial number, as extracted from the certificate.\n\n    * `cert`: Serial number, as extracted from the certificate.\n\n    * `create_time`: The time when the certificate was created.\n\n    * `expire_time`: The time when the certificate expires.\n\n    * `sha1_fingerprint`: Sha1 Fingerprint of the certificate.\n\n  * `region`: The name of the Redis region of the instance.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_redis_instances.md",
    "content": "+++\ntitle = \"google_redis_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_redis_instances\"\nidentifier = \"inspec/resources/gcp/google_redis_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_redis_instances` is used to test a Google Instance resource\n\n\n## Beta Resource\nThis resource has beta fields available. To retrieve these fields, include `beta: true` in the constructor for the resource.\n\n## Examples\n\n```ruby\ndescribe google_redis_instances(project: 'chef-gcp-inspec', region: 'us-central1') do\n  its('tiers') { should include 'STANDARD_HA' }\n  its('memory_size_gbs') { should include '1' }\n  its('alternative_location_ids') { should include 'us-central1-f' }\n  its('redis_versions') { should include 'REDIS_3_2' }\n  its('display_names') { should include 'InSpec test instance' }\n  its('reserved_ip_ranges') { should include '192.168.0.0/29' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_redis_instances` resource:\n\nSee [google_redis_instance](google_redis_instance) for more detailed information.\n\n  * `alternative_location_ids`: an array of `google_redis_instance` alternative_location_id\n  * `auth_enableds`: an array of `google_redis_instance` auth_enabled\n  * `authorized_networks`: an array of `google_redis_instance` authorized_network\n  * `connect_modes`: an array of `google_redis_instance` connect_mode\n  * `create_times`: an array of `google_redis_instance` create_time\n  * `current_location_ids`: an array of `google_redis_instance` current_location_id\n  * `display_names`: an array of `google_redis_instance` display_name\n  * `hosts`: an array of `google_redis_instance` host\n  * `labels`: an array of `google_redis_instance` labels\n  * `redis_configs`: an array of `google_redis_instance` redis_configs\n  * `location_ids`: an array of `google_redis_instance` location_id\n  * `names`: an array of `google_redis_instance` name\n  * `memory_size_gbs`: an array of `google_redis_instance` memory_size_gb\n  * `ports`: an array of `google_redis_instance` port\n  * `persistence_iam_identities`: an array of `google_redis_instance` persistence_iam_identity\n  * `redis_versions`: an array of `google_redis_instance` redis_version\n  * `reserved_ip_ranges`: an array of `google_redis_instance` reserved_ip_range\n  * `tiers`: an array of `google_redis_instance` tier\n  * `transit_encryption_modes`: (Beta only) an array of `google_redis_instance` transit_encryption_mode\n  * `server_ca_certs`: (Beta only) an array of `google_redis_instance` server_ca_certs\n  * `regions`: an array of `google_redis_instance` region\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_folder.md",
    "content": "+++\ntitle = \"google_resourcemanager_folder resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_folder\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_folder resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_resourcemanager_folder` InSpec audit resource to to test a Google Cloud Folder resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').names.each do |name|\n    describe google_resourcemanager_folder(name: name) do\n      it { should exist }\n      its('display_name') { should eq 'inspec-gcp-folder' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_folder` resource:\n\n\n  * `name`: The resource name of the Folder. Its format is folders/{folder_id}, for example: \"folders/1234\".\n\n  * `lifecycle_state`: The lifecycle state of the folder. Updates to the lifecycleState must be performed via folders.delete and folders.undelete.\n  Possible values:\n    * LIFECYCLE_STATE_UNSPECIFIED\n    * ACTIVE\n    * DELETE_REQUESTED\n\n  * `create_time`: Time of creation\n\n  * `parent`: The Folder’s parent's resource name. Updates to the folder's parent must be performed via folders.move.\n\n  * `display_name`: The folder’s display name. A folder’s display name must be unique amongst its siblings, e.g. no two folders with the same parent can share the same display name. The display name must start and end with a letter or digit, may contain letters, digits, spaces, hyphens and underscores and can be no longer than 30 characters. This is captured by the regular expression: `[\\p{L}\\p{N}]([\\p{L}\\p{N}_- ]{0,28}[\\p{L}\\p{N}])?`.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_folder_iam_binding.md",
    "content": "+++\ntitle = \"google_resourcemanager_folder_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_folder_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_folder_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_resourcemanager_folder_iam_binding` is used to test a Google Folder Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_resourcemanager_folder_iam_binding(name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_folder_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_folder_iam_policy.md",
    "content": "+++\ntitle = \"google_resourcemanager_folder_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_folder_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_folder_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_resourcemanager_folder_iam_policy` is used to test a Google Folder Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_resourcemanager_folder_iam_policy(name: \"name\") do\n  it { should exist }\nend\n\ngoogle_resourcemanager_folder_iam_policy(name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_folder_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_folders.md",
    "content": "+++\ntitle = \"google_resourcemanager_folders resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_folders\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_folders resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_resourcemanager_folders` InSpec audit resource to to test a Google Cloud Folder resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_resourcemanager_folders(parent: 'organizations/12345').display_names.each do |display_name|\n    describe display_name do\n      it { should eq 'inspec-gcp-folder' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_folders` resource:\n\nSee [google_resourcemanager_folder](google_resourcemanager_folder) for more detailed information.\n\n  * `names`: an array of `google_resourcemanager_folder` name\n  * `lifecycle_states`: an array of `google_resourcemanager_folder` lifecycle_state\n  * `create_times`: an array of `google_resourcemanager_folder` create_time\n  * `parents`: an array of `google_resourcemanager_folder` parent\n  * `display_names`: an array of `google_resourcemanager_folder` display_name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_organization_policy.md",
    "content": "+++\ntitle = \"google_resourcemanager_organization_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_organization_policy\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_organization_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_resourcemanager_organization_policy` is used to test organization policy constraints. More information can be found here [Organization Policy Constraints](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)\n\n## Examples\n\n```ruby\ndescribe google_resourcemanager_organization_policy(organization_name: \"organizations/123456789\", constraint: \"constraints/compute.disableSerialPortAccess\") do\n  it { should exist }\n  its('constraint') { should eq 'constraints/compute.disableSerialPortAccess' }\n  its('boolean_policy.enforced') { should be true }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_organization_policy` resource:\n\n  * `version`: The version of the policy.\n\n  * `constraint`: The name of the constraint the policy is configuring.\n\n  * `update_time`: The time stamp the policy was previously updated.\n\n  * `list_policy`: List of values either allowed or disallowed\n\n    * `allowed_values`: List of values allowed\n\n    * `denied_values`: List of values denied\n\n  * `boolean_policy`: Used to specify how a boolean policy will behave\n\n    * `enforced`: If true then the policy is enforced. If false then any configuration is acceptable\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_project_iam_binding.md",
    "content": "+++\ntitle = \"google_resourcemanager_project_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_project_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_project_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_resourcemanager_project_iam_binding` is used to test a Google Project Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_resourcemanager_project_iam_binding(project_id: \"projectId\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_project_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_resourcemanager_project_iam_policy.md",
    "content": "+++\ntitle = \"google_resourcemanager_project_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_resourcemanager_project_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_resourcemanager_project_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_resourcemanager_project_iam_policy` is used to test a Google Project Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_resourcemanager_project_iam_policy(project_id: \"projectId\") do\n  it { should exist }\nend\n\ngoogle_resourcemanager_project_iam_policy(project_id: \"projectId\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_resourcemanager_project_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_run_job.md",
    "content": "+++\ntitle = \"google_run_job resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_run_job\"\nidentifier = \"inspec/resources/gcp/google_run_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_run_job` InSpec audit resource to test the properties of a Google Cloud Job resource.\n\n## Examples\n\n```ruby\ndescribe google_run_job(name: 'projects/{project}/locations/{location}/jobs/{value_name}') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('uid') { should cmp 'value_uid' }\n\tits('generation') { should cmp 'value_generation' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('delete_time') { should cmp 'value_deletetime' }\n\tits('expire_time') { should cmp 'value_expiretime' }\n\tits('creator') { should cmp 'value_creator' }\n\tits('last_modifier') { should cmp 'value_lastmodifier' }\n\tits('client') { should cmp 'value_client' }\n\tits('client_version') { should cmp 'value_clientversion' }\n\tits('launch_stage') { should cmp 'value_launchstage' }\n\tits('observed_generation') { should cmp 'value_observedgeneration' }\n\tits('start_execution_token') { should cmp 'value_startexecutiontoken' }\n\tits('run_execution_token') { should cmp 'value_runexecutiontoken' }\n\tits('etag') { should cmp 'value_etag' }\nend\n\ndescribe google_run_job(name: \"projects/{project}/locations/{location}/jobs/{does_not_exit}\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_run_job` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_run_job` resource:\n\n\n  * `name`: The fully qualified name of this Job. Format: projects/{project}/locations/{location}/jobs/{job}\n\n  * `uid`: Output only. Server assigned unique identifier for the Execution. The value is a UUID4 string and guaranteed to remain unchanged until the resource is deleted.\n\n  * `generation`: Output only. A number that monotonically increases every time the user modifies the desired state.\n\n  * `labels`: Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, state, etc. For more information, visit https://cloud.google.com/resource-manager/docs/creating-managing-labels or https://cloud.google.com/run/docs/configuring/labels. Cloud Run API v2 does not support labels with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system labels in v1 now have a corresponding field in v2 Job.\n\n    * `additional_properties`:\n\n  * `annotations`: Unstructured key value map that may be set by external tools to store and arbitrary metadata. They are not queryable and should be preserved when modifying objects. Cloud Run API v2 does not support annotations with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected on new resources. All system annotations in v1 now have a corresponding field in v2 Job. This field follows Kubernetes annotations' namespacing, limits, and rules.\n\n    * `additional_properties`:\n\n  * `create_time`: Output only. The creation time.\n\n  * `update_time`: Output only. The last-modified time.\n\n  * `delete_time`: Output only. The deletion time. It is only populated as a response to a Delete request.\n\n  * `expire_time`: Output only. For a deleted resource, the time after which it will be permamently deleted.\n\n  * `creator`: Output only. Email address of the authenticated creator.\n\n  * `last_modifier`: Output only. Email address of the last authenticated modifier.\n\n  * `client`: Arbitrary identifier for the API client.\n\n  * `client_version`: Arbitrary version identifier for the API client.\n\n  * `launch_stage`: The launch stage as defined by [Google Cloud Platform Launch Stages](https://cloud.google.com/terms/launch-stages). Cloud Run supports `ALPHA`, `BETA`, and `GA`. If no value is specified, GA is assumed. Set the launch stage to a preview stage on input to allow use of preview features in that stage. On read (or output), describes whether the resource uses preview features. For example, if ALPHA is provided as input, but only BETA and GA-level features are used, this field will be BETA on output.\n  Possible values:\n    * LAUNCH_STAGE_UNSPECIFIED\n    * UNIMPLEMENTED\n    * PRELAUNCH\n    * EARLY_ACCESS\n    * ALPHA\n    * BETA\n    * GA\n    * DEPRECATED\n\n  * `binary_authorization`: Settings for Binary Authorization feature.\n\n    * `use_default`: Optional. If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n\n    * `policy`: Optional. The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n\n    * `breakglass_justification`: Optional. If present, indicates to use Breakglass using this justification. If use_default is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n\n  * `template`: ExecutionTemplate describes the data an execution should have when created from a template.\n\n    * `labels`: Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, state, etc. For more information, visit https://cloud.google.com/resource-manager/docs/creating-managing-labels or https://cloud.google.com/run/docs/configuring/labels. Cloud Run API v2 does not support labels with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system labels in v1 now have a corresponding field in v2 ExecutionTemplate.\n\n      * `additional_properties`:\n\n    * `annotations`: Unstructured key value map that may be set by external tools to store and arbitrary metadata. They are not queryable and should be preserved when modifying objects. Cloud Run API v2 does not support annotations with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system annotations in v1 now have a corresponding field in v2 ExecutionTemplate. This field follows Kubernetes annotations' namespacing, limits, and rules.\n\n      * `additional_properties`:\n\n    * `parallelism`: Specifies the maximum desired number of tasks the execution should run at given time. Must be <= task_count. When the job is run, if this field is 0 or unset, the maximum possible value will be used for that execution. The actual number of tasks running in steady state will be less than this number when there are fewer tasks waiting to be completed remaining, i.e. when the work left to do is less than max parallelism.\n\n    * `task_count`: Specifies the desired number of tasks the execution should run. Setting to 1 means that parallelism is limited to 1 and the success of that task signals the success of the execution. Defaults to 1.\n\n    * `template`: TaskTemplate describes the data a task should have when created from a template.\n\n      * `containers`: Holds the single container that defines the unit of execution for this task.\n\n        * `name`: Name of the container specified as a DNS_LABEL (RFC 1123).\n\n        * `image`: Required. Name of the container image in Dockerhub, Google Artifact Registry, or Google Container Registry. If the host is not provided, Dockerhub is assumed.\n\n        * `command`: Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided.\n\n        * `args`: Arguments to the entrypoint. The docker image's CMD is used if this is not provided.\n\n        * `env`: List of environment variables to set in the container.\n\n          * `name`: Required. Name of the environment variable. Must not exceed 32768 characters.\n\n          * `value`: Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any route environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\", and the maximum length is 32768 bytes.\n\n          * `value_source`: EnvVarSource represents a source for the value of an EnvVar.\n\n            * `secret_key_ref`: SecretEnvVarSource represents a source for the value of an EnvVar.\n\n              * `secret`: Required. The name of the secret in Cloud Secret Manager. Format: {secret_name} if the secret is in the same project. projects/{project}/secrets/{secret_name} if the secret is in a different project.\n\n              * `version`: The Cloud Secret Manager secret version. Can be 'latest' for the latest version, an integer for a specific version, or a version alias.\n\n        * `resources`: ResourceRequirements describes the compute resource requirements.\n\n          * `limits`: Only `memory` and `cpu` keys in the map are supported. Notes: * The only supported values for CPU are '1', '2', '4', and '8'. Setting 4 CPU requires at least 2Gi of memory. For more information, go to https://cloud.google.com/run/docs/configuring/cpu. * For supported 'memory' values and syntax, go to https://cloud.google.com/run/docs/configuring/memory-limits\n\n            * `additional_properties`:\n\n          * `cpu_idle`: Determines whether CPU is only allocated during requests (true by default). However, if ResourceRequirements is set, the caller must explicitly set this field to true to preserve the default behavior.\n\n          * `startup_cpu_boost`: Determines whether CPU should be boosted on startup of a new container instance above the requested CPU threshold, this can help reduce cold-start latency.\n\n        * `ports`: List of ports to expose from the container. Only a single port can be specified. The specified ports must be listening on all interfaces (0.0.0.0) within the container to be accessible. If omitted, a port number will be chosen and passed to the container through the PORT environment variable for the container to listen on.\n\n          * `name`: If specified, used to specify which protocol to use. Allowed values are \"http1\" and \"h2c\".\n\n          * `container_port`: Port number the container listens on. This must be a valid TCP port number, 0 < container_port < 65536.\n\n        * `volume_mounts`: Volume to mount into the container's filesystem.\n\n          * `name`: Required. This must match the Name of a Volume.\n\n          * `mount_path`: Required. Path within the container at which the volume should be mounted. Must not contain ':'. For Cloud SQL volumes, it can be left empty, or must otherwise be `/cloudsql`. All instances defined in the Volume will be available as `/cloudsql/[instance]`. For more information on Cloud SQL volumes, visit https://cloud.google.com/sql/docs/mysql/connect-run\n\n        * `working_dir`: Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image.\n\n        * `liveness_probe`: Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n\n          * `initial_delay_seconds`: Optional. Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240.\n\n          * `timeout_seconds`: Optional. Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than period_seconds.\n\n          * `period_seconds`: Optional. How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeout_seconds.\n\n          * `failure_threshold`: Optional. Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n\n          * `http_get`: HTTPGetAction describes an action based on HTTP Get requests.\n\n            * `path`: Optional. Path to access on the HTTP server. Defaults to '/'.\n\n            * `http_headers`: Optional. Custom headers to set in the request. HTTP allows repeated headers.\n\n              * `name`: Required. The header field name\n\n              * `value`: Optional. The header field value\n\n            * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `tcp_socket`: TCPSocketAction describes an action based on opening a socket\n\n            * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `grpc`: GRPCAction describes an action involving a GRPC port.\n\n            * `port`: Optional. Port number of the gRPC service. Number must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n            * `service`: Optional. Service is the name of the service to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md ). If this is not specified, the default behavior is defined by gRPC.\n\n        * `startup_probe`: Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n\n          * `initial_delay_seconds`: Optional. Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240.\n\n          * `timeout_seconds`: Optional. Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than period_seconds.\n\n          * `period_seconds`: Optional. How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeout_seconds.\n\n          * `failure_threshold`: Optional. Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n\n          * `http_get`: HTTPGetAction describes an action based on HTTP Get requests.\n\n            * `path`: Optional. Path to access on the HTTP server. Defaults to '/'.\n\n            * `http_headers`: Optional. Custom headers to set in the request. HTTP allows repeated headers.\n\n              * `name`: Required. The header field name\n\n              * `value`: Optional. The header field value\n\n            * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `tcp_socket`: TCPSocketAction describes an action based on opening a socket\n\n            * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `grpc`: GRPCAction describes an action involving a GRPC port.\n\n            * `port`: Optional. Port number of the gRPC service. Number must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n            * `service`: Optional. Service is the name of the service to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md ). If this is not specified, the default behavior is defined by gRPC.\n\n        * `depends_on`: Names of the containers that must start before this container.\n\n      * `volumes`: Optional. A list of Volumes to make available to containers.\n\n        * `name`: Required. Volume's name.\n\n        * `secret`: The secret's value will be presented as the content of a file whose name is defined in the item path. If no items are defined, the name of the file is the secret.\n\n          * `secret`: Required. The name of the secret in Cloud Secret Manager. Format: {secret} if the secret is in the same project. projects/{project}/secrets/{secret} if the secret is in a different project.\n\n          * `items`: If unspecified, the volume will expose a file whose name is the secret, relative to VolumeMount.mount_path. If specified, the key will be used as the version to fetch from Cloud Secret Manager and the path will be the name of the file exposed in the volume. When items are defined, they must specify a path and a version.\n\n            * `path`: Required. The relative path of the secret in the container.\n\n            * `version`: The Cloud Secret Manager secret version. Can be 'latest' for the latest value, or an integer or a secret alias for a specific version.\n\n            * `mode`: Integer octal mode bits to use on this file, must be a value between 01 and 0777 (octal). If 0 or not set, the Volume's default mode will be used. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n\n          * `default_mode`: Integer representation of mode bits to use on created files by default. Must be a value between 0000 and 0777 (octal), defaulting to 0444. Directories within the path are not affected by this setting. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. This might be in conflict with other options that affect the file mode, like fsGroup, and as a result, other mode bits could be set.\n\n        * `cloud_sql_instance`: Represents a set of Cloud SQL instances. Each one will be available under /cloudsql/[instance]. Visit https://cloud.google.com/sql/docs/mysql/connect-run for more information on how to connect Cloud SQL and Cloud Run.\n\n          * `instances`: The Cloud SQL instance connection names, as can be found in https://console.cloud.google.com/sql/instances. Visit https://cloud.google.com/sql/docs/mysql/connect-run for more information on how to connect Cloud SQL and Cloud Run. Format: {project}:{location}:{instance}\n\n        * `empty_dir`: In memory (tmpfs) ephemeral storage. It is ephemeral in the sense that when the sandbox is taken down, the data is destroyed with it (it does not persist across sandbox runs).\n\n          * `medium`: The medium on which the data is stored. Acceptable values today is only MEMORY or none. When none, the default will currently be backed by memory but could change over time. +optional\n          Possible values:\n            * MEDIUM_UNSPECIFIED\n            * MEMORY\n\n          * `size_limit`: Limit on the storage usable by this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers. The default is nil which means that the limit is undefined. More info: https://cloud.google.com/run/docs/configuring/in-memory-volumes#configure-volume. Info in Kubernetes: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir\n\n        * `nfs`: Represents an NFS mount.\n\n          * `server`: Hostname or IP address of the NFS server\n\n          * `path`: Path that is exported by the NFS server.\n\n          * `read_only`: If true, the volume will be mounted as read only for all mounts.\n\n        * `gcs`: Represents a volume backed by a Cloud Storage bucket using Cloud Storage FUSE.\n\n          * `bucket`: Cloud Storage Bucket name.\n\n          * `read_only`: If true, the volume will be mounted as read only for all mounts.\n\n      * `max_retries`: Number of retries allowed per Task, before marking this Task failed. Defaults to 3.\n\n      * `timeout`: Optional. Max allowed time duration the Task may be active before the system will actively try to mark it failed and kill associated containers. This applies per attempt of a task, meaning each retry can run for the full timeout. Defaults to 600 seconds.\n\n      * `service_account`: Optional. Email address of the IAM service account associated with the Task of a Job. The service account represents the identity of the running task, and determines what permissions the task has. If not provided, the task will use the project's default service account.\n\n      * `execution_environment`: Optional. The execution environment being used to host this Task.\n      Possible values:\n        * EXECUTION_ENVIRONMENT_UNSPECIFIED\n        * EXECUTION_ENVIRONMENT_GEN1\n        * EXECUTION_ENVIRONMENT_GEN2\n\n      * `encryption_key`: A reference to a customer managed encryption key (CMEK) to use to encrypt this container image. For more information, go to https://cloud.google.com/run/docs/securing/using-cmek\n\n      * `vpc_access`: VPC Access settings. For more information on sending traffic to a VPC network, visit https://cloud.google.com/run/docs/configuring/connecting-vpc.\n\n        * `connector`: VPC Access connector name. Format: projects/{project}/locations/{location}/connectors/{connector}, where {project} can be project id or number. For more information on sending traffic to a VPC network via a connector, visit https://cloud.google.com/run/docs/configuring/vpc-connectors.\n\n        * `egress`: Optional. Traffic VPC egress settings. If not provided, it defaults to PRIVATE_RANGES_ONLY.\n        Possible values:\n          * VPC_EGRESS_UNSPECIFIED\n          * ALL_TRAFFIC\n          * PRIVATE_RANGES_ONLY\n\n        * `network_interfaces`: Optional. Direct VPC egress settings. Currently only single network interface is supported.\n\n          * `network`: Optional. The VPC network that the Cloud Run resource will be able to send traffic to. At least one of network or subnetwork must be specified. If both network and subnetwork are specified, the given VPC subnetwork must belong to the given VPC network. If network is not specified, it will be looked up from the subnetwork.\n\n          * `subnetwork`: Optional. The VPC subnetwork that the Cloud Run resource will get IPs from. At least one of network or subnetwork must be specified. If both network and subnetwork are specified, the given VPC subnetwork must belong to the given VPC network. If subnetwork is not specified, the subnetwork with the same name with the network will be used.\n\n          * `tags`: Optional. Network tags applied to this Cloud Run resource.\n\n  * `observed_generation`: Output only. The generation of this Job. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n  * `terminal_condition`: Defines a status condition for a resource.\n\n    * `type`: type is used to communicate the status of the reconciliation process. See also: https://github.com/knative/serving/blob/main/docs/spec/errors.md#error-conditions-and-reporting Types common to all resources include: * \"Ready\": True when the Resource is ready.\n\n    * `state`: State of the condition.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CONDITION_PENDING\n      * CONDITION_RECONCILING\n      * CONDITION_FAILED\n      * CONDITION_SUCCEEDED\n\n    * `message`: Human readable message indicating details about the current status.\n\n    * `last_transition_time`: Last time the condition transitioned from one status to another.\n\n    * `severity`: How to interpret failures of this condition, one of Error, Warning, Info\n    Possible values:\n      * SEVERITY_UNSPECIFIED\n      * ERROR\n      * WARNING\n      * INFO\n\n    * `reason`: Output only. A common (service-level) reason for this condition.\n    Possible values:\n      * COMMON_REASON_UNDEFINED\n      * UNKNOWN\n      * REVISION_FAILED\n      * PROGRESS_DEADLINE_EXCEEDED\n      * CONTAINER_MISSING\n      * CONTAINER_PERMISSION_DENIED\n      * CONTAINER_IMAGE_UNAUTHORIZED\n      * CONTAINER_IMAGE_AUTHORIZATION_CHECK_FAILED\n      * ENCRYPTION_KEY_PERMISSION_DENIED\n      * ENCRYPTION_KEY_CHECK_FAILED\n      * SECRETS_ACCESS_CHECK_FAILED\n      * WAITING_FOR_OPERATION\n      * IMMEDIATE_RETRY\n      * POSTPONED_RETRY\n      * INTERNAL\n\n    * `revision_reason`: Output only. A reason for the revision condition.\n    Possible values:\n      * REVISION_REASON_UNDEFINED\n      * PENDING\n      * RESERVE\n      * RETIRED\n      * RETIRING\n      * RECREATING\n      * HEALTH_CHECK_CONTAINER_ERROR\n      * CUSTOMIZED_PATH_RESPONSE_PENDING\n      * MIN_INSTANCES_NOT_PROVISIONED\n      * ACTIVE_REVISION_LIMIT_REACHED\n      * NO_DEPLOYMENT\n      * HEALTH_CHECK_SKIPPED\n      * MIN_INSTANCES_WARMING\n\n    * `execution_reason`: Output only. A reason for the execution condition.\n    Possible values:\n      * EXECUTION_REASON_UNDEFINED\n      * JOB_STATUS_SERVICE_POLLING_ERROR\n      * NON_ZERO_EXIT_CODE\n      * CANCELLED\n      * CANCELLING\n      * DELETED\n\n  * `conditions`: Output only. The Conditions of all other associated sub-resources. They contain additional diagnostics information in case the Job does not reach its desired state. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n    * `type`: type is used to communicate the status of the reconciliation process. See also: https://github.com/knative/serving/blob/main/docs/spec/errors.md#error-conditions-and-reporting Types common to all resources include: * \"Ready\": True when the Resource is ready.\n\n    * `state`: State of the condition.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CONDITION_PENDING\n      * CONDITION_RECONCILING\n      * CONDITION_FAILED\n      * CONDITION_SUCCEEDED\n\n    * `message`: Human readable message indicating details about the current status.\n\n    * `last_transition_time`: Last time the condition transitioned from one status to another.\n\n    * `severity`: How to interpret failures of this condition, one of Error, Warning, Info\n    Possible values:\n      * SEVERITY_UNSPECIFIED\n      * ERROR\n      * WARNING\n      * INFO\n\n    * `reason`: Output only. A common (service-level) reason for this condition.\n    Possible values:\n      * COMMON_REASON_UNDEFINED\n      * UNKNOWN\n      * REVISION_FAILED\n      * PROGRESS_DEADLINE_EXCEEDED\n      * CONTAINER_MISSING\n      * CONTAINER_PERMISSION_DENIED\n      * CONTAINER_IMAGE_UNAUTHORIZED\n      * CONTAINER_IMAGE_AUTHORIZATION_CHECK_FAILED\n      * ENCRYPTION_KEY_PERMISSION_DENIED\n      * ENCRYPTION_KEY_CHECK_FAILED\n      * SECRETS_ACCESS_CHECK_FAILED\n      * WAITING_FOR_OPERATION\n      * IMMEDIATE_RETRY\n      * POSTPONED_RETRY\n      * INTERNAL\n\n    * `revision_reason`: Output only. A reason for the revision condition.\n    Possible values:\n      * REVISION_REASON_UNDEFINED\n      * PENDING\n      * RESERVE\n      * RETIRED\n      * RETIRING\n      * RECREATING\n      * HEALTH_CHECK_CONTAINER_ERROR\n      * CUSTOMIZED_PATH_RESPONSE_PENDING\n      * MIN_INSTANCES_NOT_PROVISIONED\n      * ACTIVE_REVISION_LIMIT_REACHED\n      * NO_DEPLOYMENT\n      * HEALTH_CHECK_SKIPPED\n      * MIN_INSTANCES_WARMING\n\n    * `execution_reason`: Output only. A reason for the execution condition.\n    Possible values:\n      * EXECUTION_REASON_UNDEFINED\n      * JOB_STATUS_SERVICE_POLLING_ERROR\n      * NON_ZERO_EXIT_CODE\n      * CANCELLED\n      * CANCELLING\n      * DELETED\n\n  * `execution_count`: Output only. Number of executions created for this job.\n\n  * `latest_created_execution`: Reference to an Execution. Use /Executions.GetExecution with the given name to get full execution including the latest status.\n\n    * `name`: Name of the execution.\n\n    * `create_time`: Creation timestamp of the execution.\n\n    * `completion_time`: Creation timestamp of the execution.\n\n    * `delete_time`: The deletion time of the execution. It is only populated as a response to a Delete request.\n\n    * `completion_status`: Status for the execution completion.\n    Possible values:\n      * COMPLETION_STATUS_UNSPECIFIED\n      * EXECUTION_SUCCEEDED\n      * EXECUTION_FAILED\n      * EXECUTION_RUNNING\n      * EXECUTION_PENDING\n      * EXECUTION_CANCELLED\n\n  * `reconciling`: Output only. Returns true if the Job is currently being acted upon by the system to bring it into the desired state. When a new Job is created, or an existing one is updated, Cloud Run will asynchronously perform all necessary steps to bring the Job to the desired state. This process is called reconciliation. While reconciliation is in process, `observed_generation` and `latest_succeeded_execution`, will have transient values that might mismatch the intended state: Once reconciliation is over (and this field is false), there are two possible outcomes: reconciliation succeeded and the state matches the Job, or there was an error, and reconciliation failed. This state can be found in `terminal_condition.state`. If reconciliation succeeded, the following fields will match: `observed_generation` and `generation`, `latest_succeeded_execution` and `latest_created_execution`. If reconciliation failed, `observed_generation` and `latest_succeeded_execution` will have the state of the last succeeded execution or empty for newly created Job. Additional information on the failure can be found in `terminal_condition` and `conditions`.\n\n  * `satisfies_pzs`: Output only. Reserved for future use.\n\n  * `start_execution_token`: A unique string used as a suffix creating a new execution. The Job will become ready when the execution is successfully started. The sum of job name and token length must be fewer than 63 characters.\n\n  * `run_execution_token`: A unique string used as a suffix for creating a new execution. The Job will become ready when the execution is successfully completed. The sum of job name and token length must be fewer than 63 characters.\n\n  * `etag`: Output only. A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates.\n\n\n## GCP permissions\n\nEnsure the [https://run.googleapis.com/](https://console.cloud.google.com/apis/library/run.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_run_jobs.md",
    "content": "+++\ntitle = \"google_run_jobs resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_run_jobs\"\nidentifier = \"inspec/resources/gcp/google_run_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_run_jobs` InSpec audit resource to test the properties of a Google Cloud Job resource.\n\n## Examples\n\n```ruby\n  describe google_run_jobs(parent: 'projects/{project}/locations/{location}') do\n    it { should exist }\n    its('names') { should include 'value_name' }\n    its('creators') { should include 'value_creator' }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_run_jobs` resource:\n\nSee [google_run_job](google_run_job) for more detailed information.\n\n* `names`: an array of `google_run_job` name\n* `uids`: an array of `google_run_job` uid\n* `generations`: an array of `google_run_job` generation\n* `labels`: an array of `google_run_job` labels\n* `annotations`: an array of `google_run_job` annotations\n* `create_times`: an array of `google_run_job` create_time\n* `update_times`: an array of `google_run_job` update_time\n* `delete_times`: an array of `google_run_job` delete_time\n* `expire_times`: an array of `google_run_job` expire_time\n* `creators`: an array of `google_run_job` creator\n* `last_modifiers`: an array of `google_run_job` last_modifier\n* `clients`: an array of `google_run_job` client\n* `client_versions`: an array of `google_run_job` client_version\n* `launch_stages`: an array of `google_run_job` launch_stage\n* `binary_authorizations`: an array of `google_run_job` binary_authorization\n* `templates`: an array of `google_run_job` template\n* `observed_generations`: an array of `google_run_job` observed_generation\n* `terminal_conditions`: an array of `google_run_job` terminal_condition\n* `conditions`: an array of `google_run_job` conditions\n* `execution_counts`: an array of `google_run_job` execution_count\n* `latest_created_executions`: an array of `google_run_job` latest_created_execution\n* `reconcilings`: an array of `google_run_job` reconciling\n* `satisfies_pzs`: an array of `google_run_job` satisfies_pzs\n* `start_execution_tokens`: an array of `google_run_job` start_execution_token\n* `run_execution_tokens`: an array of `google_run_job` run_execution_token\n* `etags`: an array of `google_run_job` etag\n\n## Properties\n\nProperties that can be accessed from the `google_run_jobs` resource:\n\nSee [google_run_job](google_run_job) for more detailed information.\n\n* `names`: an array of `google_run_job` name\n* `uids`: an array of `google_run_job` uid\n* `generations`: an array of `google_run_job` generation\n* `labels`: an array of `google_run_job` labels\n* `annotations`: an array of `google_run_job` annotations\n* `create_times`: an array of `google_run_job` create_time\n* `update_times`: an array of `google_run_job` update_time\n* `delete_times`: an array of `google_run_job` delete_time\n* `expire_times`: an array of `google_run_job` expire_time\n* `creators`: an array of `google_run_job` creator\n* `last_modifiers`: an array of `google_run_job` last_modifier\n* `clients`: an array of `google_run_job` client\n* `client_versions`: an array of `google_run_job` client_version\n* `launch_stages`: an array of `google_run_job` launch_stage\n* `binary_authorizations`: an array of `google_run_job` binary_authorization\n* `templates`: an array of `google_run_job` template\n* `observed_generations`: an array of `google_run_job` observed_generation\n* `terminal_conditions`: an array of `google_run_job` terminal_condition\n* `conditions`: an array of `google_run_job` conditions\n* `execution_counts`: an array of `google_run_job` execution_count\n* `latest_created_executions`: an array of `google_run_job` latest_created_execution\n* `reconcilings`: an array of `google_run_job` reconciling\n* `satisfies_pzs`: an array of `google_run_job` satisfies_pzs\n* `start_execution_tokens`: an array of `google_run_job` start_execution_token\n* `run_execution_tokens`: an array of `google_run_job` run_execution_token\n* `etags`: an array of `google_run_job` etag\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://run.googleapis.com/](https://console.cloud.google.com/apis/library/run.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_run_service.md",
    "content": "+++\ntitle = \"google_run_service resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_run_service\"\nidentifier = \"inspec/resources/gcp/google_run_service resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_run_service` InSpec audit resource to test the properties of a Google Cloud Service resource.\n\n## Examples\n\n```ruby\ndescribe google_run_service(name: 'value_name') do\n  it { should exist }\n  its('name') { should cmp value_name }\n  its('uri') { should cmp value_uri }\n  its('generation') { should cmp value_generation }\n  its('create_time') { should cmp value_create_time }\n  its('update_time') { should cmp value_update_time }\n  its('creator') { should cmp value_creator }\n  its('ingress') { should cmp value_ingress }\nend\n\ndescribe google_run_service(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_run_service` resource:\n\n## Properties\n\nProperties that can be accessed from the `google_run_service` resource:\n\n\n  * `name`: The fully qualified name of this Service. In CreateServiceRequest, this field is ignored, and instead composed from CreateServiceRequest.parent and CreateServiceRequest.service_id. Format: projects/{project}/locations/{location}/services/{service_id}\n\n  * `description`: User-provided description of the Service. This field currently has a 512-character limit.\n\n  * `uid`: Output only. Server assigned unique identifier for the trigger. The value is a UUID4 string and guaranteed to remain unchanged until the resource is deleted.\n\n  * `generation`: Output only. A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a `string` instead of an `integer`.\n\n  * `labels`: Optional. Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, state, etc. For more information, visit https://cloud.google.com/resource-manager/docs/creating-managing-labels or https://cloud.google.com/run/docs/configuring/labels. Cloud Run API v2 does not support labels with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system labels in v1 now have a corresponding field in v2 Service.\n\n    * `additional_properties`:\n\n  * `annotations`: Optional. Unstructured key value map that may be set by external tools to store and arbitrary metadata. They are not queryable and should be preserved when modifying objects. Cloud Run API v2 does not support annotations with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected in new resources. All system annotations in v1 now have a corresponding field in v2 Service. This field follows Kubernetes annotations' namespacing, limits, and rules.\n\n    * `additional_properties`:\n\n  * `create_time`: Output only. The creation time.\n\n  * `update_time`: Output only. The last-modified time.\n\n  * `delete_time`: Output only. The deletion time. It is only populated as a response to a Delete request.\n\n  * `expire_time`: Output only. For a deleted resource, the time after which it will be permamently deleted.\n\n  * `creator`: Output only. Email address of the authenticated creator.\n\n  * `last_modifier`: Output only. Email address of the last authenticated modifier.\n\n  * `client`: Arbitrary identifier for the API client.\n\n  * `client_version`: Arbitrary version identifier for the API client.\n\n  * `ingress`: Optional. Provides the ingress settings for this Service. On output, returns the currently observed ingress settings, or INGRESS_TRAFFIC_UNSPECIFIED if no revision is active.\n  Possible values:\n    * INGRESS_TRAFFIC_UNSPECIFIED\n    * INGRESS_TRAFFIC_ALL\n    * INGRESS_TRAFFIC_INTERNAL_ONLY\n    * INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER\n    * INGRESS_TRAFFIC_NONE\n\n  * `launch_stage`: Optional. The launch stage as defined by [Google Cloud Platform Launch Stages](https://cloud.google.com/terms/launch-stages). Cloud Run supports `ALPHA`, `BETA`, and `GA`. If no value is specified, GA is assumed. Set the launch stage to a preview stage on input to allow use of preview features in that stage. On read (or output), describes whether the resource uses preview features. For example, if ALPHA is provided as input, but only BETA and GA-level features are used, this field will be BETA on output.\n  Possible values:\n    * LAUNCH_STAGE_UNSPECIFIED\n    * UNIMPLEMENTED\n    * PRELAUNCH\n    * EARLY_ACCESS\n    * ALPHA\n    * BETA\n    * GA\n    * DEPRECATED\n\n  * `binary_authorization`: Settings for Binary Authorization feature.\n\n    * `use_default`: Optional. If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n\n    * `policy`: Optional. The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n\n    * `breakglass_justification`: Optional. If present, indicates to use Breakglass using this justification. If use_default is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n\n  * `template`: RevisionTemplate describes the data a revision should have when created from a template.\n\n    * `revision`: Optional. The unique name for the revision. If this field is omitted, it will be automatically generated based on the Service name.\n\n    * `labels`: Optional. Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, state, etc. For more information, visit https://cloud.google.com/resource-manager/docs/creating-managing-labels or https://cloud.google.com/run/docs/configuring/labels. Cloud Run API v2 does not support labels with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system labels in v1 now have a corresponding field in v2 RevisionTemplate.\n\n      * `additional_properties`:\n\n    * `annotations`: Optional. Unstructured key value map that may be set by external tools to store and arbitrary metadata. They are not queryable and should be preserved when modifying objects. Cloud Run API v2 does not support annotations with `run.googleapis.com`, `cloud.googleapis.com`, `serving.knative.dev`, or `autoscaling.knative.dev` namespaces, and they will be rejected. All system annotations in v1 now have a corresponding field in v2 RevisionTemplate. This field follows Kubernetes annotations' namespacing, limits, and rules.\n\n      * `additional_properties`:\n\n    * `scaling`: Settings for revision-level scaling settings.\n\n      * `min_instance_count`: Optional. Minimum number of serving instances that this resource should have.\n\n      * `max_instance_count`: Optional. Maximum number of serving instances that this resource should have.\n\n    * `vpc_access`: VPC Access settings. For more information on sending traffic to a VPC network, visit https://cloud.google.com/run/docs/configuring/connecting-vpc.\n\n      * `connector`: VPC Access connector name. Format: projects/{project}/locations/{location}/connectors/{connector}, where {project} can be project id or number. For more information on sending traffic to a VPC network via a connector, visit https://cloud.google.com/run/docs/configuring/vpc-connectors.\n\n      * `egress`: Optional. Traffic VPC egress settings. If not provided, it defaults to PRIVATE_RANGES_ONLY.\n      Possible values:\n        * VPC_EGRESS_UNSPECIFIED\n        * ALL_TRAFFIC\n        * PRIVATE_RANGES_ONLY\n\n      * `network_interfaces`: Optional. Direct VPC egress settings. Currently only single network interface is supported.\n\n        * `network`: Optional. The VPC network that the Cloud Run resource will be able to send traffic to. At least one of network or subnetwork must be specified. If both network and subnetwork are specified, the given VPC subnetwork must belong to the given VPC network. If network is not specified, it will be looked up from the subnetwork.\n\n        * `subnetwork`: Optional. The VPC subnetwork that the Cloud Run resource will get IPs from. At least one of network or subnetwork must be specified. If both network and subnetwork are specified, the given VPC subnetwork must belong to the given VPC network. If subnetwork is not specified, the subnetwork with the same name with the network will be used.\n\n        * `tags`: Optional. Network tags applied to this Cloud Run resource.\n\n    * `timeout`: Optional. Max allowed time for an instance to respond to a request.\n\n    * `service_account`: Optional. Email address of the IAM service account associated with the revision of the service. The service account represents the identity of the running revision, and determines what permissions the revision has. If not provided, the revision will use the project's default service account.\n\n    * `containers`: Holds the single container that defines the unit of execution for this Revision.\n\n      * `name`: Name of the container specified as a DNS_LABEL (RFC 1123).\n\n      * `image`: Required. Name of the container image in Dockerhub, Google Artifact Registry, or Google Container Registry. If the host is not provided, Dockerhub is assumed.\n\n      * `command`: Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided.\n\n      * `args`: Arguments to the entrypoint. The docker image's CMD is used if this is not provided.\n\n      * `env`: List of environment variables to set in the container.\n\n        * `name`: Required. Name of the environment variable. Must not exceed 32768 characters.\n\n        * `value`: Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any route environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\", and the maximum length is 32768 bytes.\n\n        * `value_source`: EnvVarSource represents a source for the value of an EnvVar.\n\n          * `secret_key_ref`: SecretEnvVarSource represents a source for the value of an EnvVar.\n\n            * `secret`: Required. The name of the secret in Cloud Secret Manager. Format: {secret_name} if the secret is in the same project. projects/{project}/secrets/{secret_name} if the secret is in a different project.\n\n            * `version`: The Cloud Secret Manager secret version. Can be 'latest' for the latest version, an integer for a specific version, or a version alias.\n\n      * `resources`: ResourceRequirements describes the compute resource requirements.\n\n        * `limits`: Only `memory` and `cpu` keys in the map are supported. Notes: * The only supported values for CPU are '1', '2', '4', and '8'. Setting 4 CPU requires at least 2Gi of memory. For more information, go to https://cloud.google.com/run/docs/configuring/cpu. * For supported 'memory' values and syntax, go to https://cloud.google.com/run/docs/configuring/memory-limits\n\n          * `additional_properties`:\n\n        * `cpu_idle`: Determines whether CPU is only allocated during requests (true by default). However, if ResourceRequirements is set, the caller must explicitly set this field to true to preserve the default behavior.\n\n        * `startup_cpu_boost`: Determines whether CPU should be boosted on startup of a new container instance above the requested CPU threshold, this can help reduce cold-start latency.\n\n      * `ports`: List of ports to expose from the container. Only a single port can be specified. The specified ports must be listening on all interfaces (0.0.0.0) within the container to be accessible. If omitted, a port number will be chosen and passed to the container through the PORT environment variable for the container to listen on.\n\n        * `name`: If specified, used to specify which protocol to use. Allowed values are \"http1\" and \"h2c\".\n\n        * `container_port`: Port number the container listens on. This must be a valid TCP port number, 0 < container_port < 65536.\n\n      * `volume_mounts`: Volume to mount into the container's filesystem.\n\n        * `name`: Required. This must match the Name of a Volume.\n\n        * `mount_path`: Required. Path within the container at which the volume should be mounted. Must not contain ':'. For Cloud SQL volumes, it can be left empty, or must otherwise be `/cloudsql`. All instances defined in the Volume will be available as `/cloudsql/[instance]`. For more information on Cloud SQL volumes, visit https://cloud.google.com/sql/docs/mysql/connect-run\n\n      * `working_dir`: Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image.\n\n      * `liveness_probe`: Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n\n        * `initial_delay_seconds`: Optional. Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240.\n\n        * `timeout_seconds`: Optional. Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than period_seconds.\n\n        * `period_seconds`: Optional. How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeout_seconds.\n\n        * `failure_threshold`: Optional. Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n\n        * `http_get`: HTTPGetAction describes an action based on HTTP Get requests.\n\n          * `path`: Optional. Path to access on the HTTP server. Defaults to '/'.\n\n          * `http_headers`: Optional. Custom headers to set in the request. HTTP allows repeated headers.\n\n            * `name`: Required. The header field name\n\n            * `value`: Optional. The header field value\n\n          * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n        * `tcp_socket`: TCPSocketAction describes an action based on opening a socket\n\n          * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n        * `grpc`: GRPCAction describes an action involving a GRPC port.\n\n          * `port`: Optional. Port number of the gRPC service. Number must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `service`: Optional. Service is the name of the service to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md ). If this is not specified, the default behavior is defined by gRPC.\n\n      * `startup_probe`: Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n\n        * `initial_delay_seconds`: Optional. Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240.\n\n        * `timeout_seconds`: Optional. Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than period_seconds.\n\n        * `period_seconds`: Optional. How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeout_seconds.\n\n        * `failure_threshold`: Optional. Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n\n        * `http_get`: HTTPGetAction describes an action based on HTTP Get requests.\n\n          * `path`: Optional. Path to access on the HTTP server. Defaults to '/'.\n\n          * `http_headers`: Optional. Custom headers to set in the request. HTTP allows repeated headers.\n\n            * `name`: Required. The header field name\n\n            * `value`: Optional. The header field value\n\n          * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n        * `tcp_socket`: TCPSocketAction describes an action based on opening a socket\n\n          * `port`: Optional. Port number to access on the container. Must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n        * `grpc`: GRPCAction describes an action involving a GRPC port.\n\n          * `port`: Optional. Port number of the gRPC service. Number must be in the range 1 to 65535. If not specified, defaults to the exposed port of the container, which is the value of container.ports[0].containerPort.\n\n          * `service`: Optional. Service is the name of the service to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md ). If this is not specified, the default behavior is defined by gRPC.\n\n      * `depends_on`: Names of the containers that must start before this container.\n\n    * `volumes`: Optional. A list of Volumes to make available to containers.\n\n      * `name`: Required. Volume's name.\n\n      * `secret`: The secret's value will be presented as the content of a file whose name is defined in the item path. If no items are defined, the name of the file is the secret.\n\n        * `secret`: Required. The name of the secret in Cloud Secret Manager. Format: {secret} if the secret is in the same project. projects/{project}/secrets/{secret} if the secret is in a different project.\n\n        * `items`: If unspecified, the volume will expose a file whose name is the secret, relative to VolumeMount.mount_path. If specified, the key will be used as the version to fetch from Cloud Secret Manager and the path will be the name of the file exposed in the volume. When items are defined, they must specify a path and a version.\n\n          * `path`: Required. The relative path of the secret in the container.\n\n          * `version`: The Cloud Secret Manager secret version. Can be 'latest' for the latest value, or an integer or a secret alias for a specific version.\n\n          * `mode`: Integer octal mode bits to use on this file, must be a value between 01 and 0777 (octal). If 0 or not set, the Volume's default mode will be used. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n\n        * `default_mode`: Integer representation of mode bits to use on created files by default. Must be a value between 0000 and 0777 (octal), defaulting to 0444. Directories within the path are not affected by this setting. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. This might be in conflict with other options that affect the file mode, like fsGroup, and as a result, other mode bits could be set.\n\n      * `cloud_sql_instance`: Represents a set of Cloud SQL instances. Each one will be available under /cloudsql/[instance]. Visit https://cloud.google.com/sql/docs/mysql/connect-run for more information on how to connect Cloud SQL and Cloud Run.\n\n        * `instances`: The Cloud SQL instance connection names, as can be found in https://console.cloud.google.com/sql/instances. Visit https://cloud.google.com/sql/docs/mysql/connect-run for more information on how to connect Cloud SQL and Cloud Run. Format: {project}:{location}:{instance}\n\n      * `empty_dir`: In memory (tmpfs) ephemeral storage. It is ephemeral in the sense that when the sandbox is taken down, the data is destroyed with it (it does not persist across sandbox runs).\n\n        * `medium`: The medium on which the data is stored. Acceptable values today is only MEMORY or none. When none, the default will currently be backed by memory but could change over time. +optional\n        Possible values:\n          * MEDIUM_UNSPECIFIED\n          * MEMORY\n\n        * `size_limit`: Limit on the storage usable by this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers. The default is nil which means that the limit is undefined. More info: https://cloud.google.com/run/docs/configuring/in-memory-volumes#configure-volume. Info in Kubernetes: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir\n\n      * `nfs`: Represents an NFS mount.\n\n        * `server`: Hostname or IP address of the NFS server\n\n        * `path`: Path that is exported by the NFS server.\n\n        * `read_only`: If true, the volume will be mounted as read only for all mounts.\n\n      * `gcs`: Represents a volume backed by a Cloud Storage bucket using Cloud Storage FUSE.\n\n        * `bucket`: Cloud Storage Bucket name.\n\n        * `read_only`: If true, the volume will be mounted as read only for all mounts.\n\n    * `execution_environment`: Optional. The sandbox environment to host this Revision.\n    Possible values:\n      * EXECUTION_ENVIRONMENT_UNSPECIFIED\n      * EXECUTION_ENVIRONMENT_GEN1\n      * EXECUTION_ENVIRONMENT_GEN2\n\n    * `encryption_key`: A reference to a customer managed encryption key (CMEK) to use to encrypt this container image. For more information, go to https://cloud.google.com/run/docs/securing/using-cmek\n\n    * `max_instance_request_concurrency`: Optional. Sets the maximum number of requests that each serving instance can receive. If not specified or 0, defaults to 80 when requested CPU >= 1 and defaults to 1 when requested CPU < 1.\n\n    * `session_affinity`: Optional. Enable session affinity.\n\n    * `health_check_disabled`: Optional. Disables health checking containers during deployment.\n\n    * `node_selector`: Hardware constraints configuration.\n\n      * `accelerator`: Required. GPU accelerator type to attach to an instance.\n\n  * `traffic`: Optional. Specifies how to distribute traffic over a collection of Revisions belonging to the Service. If traffic is empty or not provided, defaults to 100% traffic to the latest `Ready` Revision.\n\n    * `type`: The allocation type for this traffic target.\n    Possible values:\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_UNSPECIFIED\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION\n\n    * `revision`: Revision to which to send this portion of traffic, if traffic allocation is by revision.\n\n    * `percent`: Specifies percent of the traffic to this Revision. This defaults to zero if unspecified.\n\n    * `tag`: Indicates a string to be part of the URI to exclusively reference this target.\n\n  * `scaling`: Scaling settings applied at the service level rather than at the revision level.\n\n    * `min_instance_count`: Optional. total min instances for the service. This number of instances is divided among all revisions with specified traffic based on the percent of traffic they are receiving. (BETA)\n\n  * `default_uri_disabled`: Optional. Disables public resolution of the default URI of this service.\n\n  * `custom_audiences`: One or more custom audiences that you want this service to support. Specify each custom audience as the full URL in a string. The custom audiences are encoded in the token and used to authenticate requests. For more information, see https://cloud.google.com/run/docs/configuring/custom-audiences.\n\n  * `observed_generation`: Output only. The generation of this Service currently serving traffic. See comments in `reconciling` for additional information on reconciliation process in Cloud Run. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a `string` instead of an `integer`.\n\n  * `terminal_condition`: Defines a status condition for a resource.\n\n    * `type`: type is used to communicate the status of the reconciliation process. See also: https://github.com/knative/serving/blob/main/docs/spec/errors.md#error-conditions-and-reporting Types common to all resources include: * \"Ready\": True when the Resource is ready.\n\n    * `state`: State of the condition.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CONDITION_PENDING\n      * CONDITION_RECONCILING\n      * CONDITION_FAILED\n      * CONDITION_SUCCEEDED\n\n    * `message`: Human readable message indicating details about the current status.\n\n    * `last_transition_time`: Last time the condition transitioned from one status to another.\n\n    * `severity`: How to interpret failures of this condition, one of Error, Warning, Info\n    Possible values:\n      * SEVERITY_UNSPECIFIED\n      * ERROR\n      * WARNING\n      * INFO\n\n    * `reason`: Output only. A common (service-level) reason for this condition.\n    Possible values:\n      * COMMON_REASON_UNDEFINED\n      * UNKNOWN\n      * REVISION_FAILED\n      * PROGRESS_DEADLINE_EXCEEDED\n      * CONTAINER_MISSING\n      * CONTAINER_PERMISSION_DENIED\n      * CONTAINER_IMAGE_UNAUTHORIZED\n      * CONTAINER_IMAGE_AUTHORIZATION_CHECK_FAILED\n      * ENCRYPTION_KEY_PERMISSION_DENIED\n      * ENCRYPTION_KEY_CHECK_FAILED\n      * SECRETS_ACCESS_CHECK_FAILED\n      * WAITING_FOR_OPERATION\n      * IMMEDIATE_RETRY\n      * POSTPONED_RETRY\n      * INTERNAL\n\n    * `revision_reason`: Output only. A reason for the revision condition.\n    Possible values:\n      * REVISION_REASON_UNDEFINED\n      * PENDING\n      * RESERVE\n      * RETIRED\n      * RETIRING\n      * RECREATING\n      * HEALTH_CHECK_CONTAINER_ERROR\n      * CUSTOMIZED_PATH_RESPONSE_PENDING\n      * MIN_INSTANCES_NOT_PROVISIONED\n      * ACTIVE_REVISION_LIMIT_REACHED\n      * NO_DEPLOYMENT\n      * HEALTH_CHECK_SKIPPED\n      * MIN_INSTANCES_WARMING\n\n    * `execution_reason`: Output only. A reason for the execution condition.\n    Possible values:\n      * EXECUTION_REASON_UNDEFINED\n      * JOB_STATUS_SERVICE_POLLING_ERROR\n      * NON_ZERO_EXIT_CODE\n      * CANCELLED\n      * CANCELLING\n      * DELETED\n\n  * `conditions`: Output only. The Conditions of all other associated sub-resources. They contain additional diagnostics information in case the Service does not reach its Serving state. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n    * `type`: type is used to communicate the status of the reconciliation process. See also: https://github.com/knative/serving/blob/main/docs/spec/errors.md#error-conditions-and-reporting Types common to all resources include: * \"Ready\": True when the Resource is ready.\n\n    * `state`: State of the condition.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * CONDITION_PENDING\n      * CONDITION_RECONCILING\n      * CONDITION_FAILED\n      * CONDITION_SUCCEEDED\n\n    * `message`: Human readable message indicating details about the current status.\n\n    * `last_transition_time`: Last time the condition transitioned from one status to another.\n\n    * `severity`: How to interpret failures of this condition, one of Error, Warning, Info\n    Possible values:\n      * SEVERITY_UNSPECIFIED\n      * ERROR\n      * WARNING\n      * INFO\n\n    * `reason`: Output only. A common (service-level) reason for this condition.\n    Possible values:\n      * COMMON_REASON_UNDEFINED\n      * UNKNOWN\n      * REVISION_FAILED\n      * PROGRESS_DEADLINE_EXCEEDED\n      * CONTAINER_MISSING\n      * CONTAINER_PERMISSION_DENIED\n      * CONTAINER_IMAGE_UNAUTHORIZED\n      * CONTAINER_IMAGE_AUTHORIZATION_CHECK_FAILED\n      * ENCRYPTION_KEY_PERMISSION_DENIED\n      * ENCRYPTION_KEY_CHECK_FAILED\n      * SECRETS_ACCESS_CHECK_FAILED\n      * WAITING_FOR_OPERATION\n      * IMMEDIATE_RETRY\n      * POSTPONED_RETRY\n      * INTERNAL\n\n    * `revision_reason`: Output only. A reason for the revision condition.\n    Possible values:\n      * REVISION_REASON_UNDEFINED\n      * PENDING\n      * RESERVE\n      * RETIRED\n      * RETIRING\n      * RECREATING\n      * HEALTH_CHECK_CONTAINER_ERROR\n      * CUSTOMIZED_PATH_RESPONSE_PENDING\n      * MIN_INSTANCES_NOT_PROVISIONED\n      * ACTIVE_REVISION_LIMIT_REACHED\n      * NO_DEPLOYMENT\n      * HEALTH_CHECK_SKIPPED\n      * MIN_INSTANCES_WARMING\n\n    * `execution_reason`: Output only. A reason for the execution condition.\n    Possible values:\n      * EXECUTION_REASON_UNDEFINED\n      * JOB_STATUS_SERVICE_POLLING_ERROR\n      * NON_ZERO_EXIT_CODE\n      * CANCELLED\n      * CANCELLING\n      * DELETED\n\n  * `latest_ready_revision`: Output only. Name of the latest revision that is serving traffic. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n  * `latest_created_revision`: Output only. Name of the last created revision. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n  * `traffic_statuses`: Output only. Detailed status information for corresponding traffic targets. See comments in `reconciling` for additional information on reconciliation process in Cloud Run.\n\n    * `type`: The allocation type for this traffic target.\n    Possible values:\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_UNSPECIFIED\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n      * TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION\n\n    * `revision`: Revision to which this traffic is sent.\n\n    * `percent`: Specifies percent of the traffic to this Revision.\n\n    * `tag`: Indicates the string used in the URI to exclusively reference this target.\n\n    * `uri`: Displays the target URI.\n\n  * `uri`: Output only. The main URI in which this Service is serving traffic.\n\n  * `satisfies_pzs`: Output only. Reserved for future use.\n\n  * `reconciling`: Output only. Returns true if the Service is currently being acted upon by the system to bring it into the desired state. When a new Service is created, or an existing one is updated, Cloud Run will asynchronously perform all necessary steps to bring the Service to the desired serving state. This process is called reconciliation. While reconciliation is in process, `observed_generation`, `latest_ready_revison`, `traffic_statuses`, and `uri` will have transient values that might mismatch the intended state: Once reconciliation is over (and this field is false), there are two possible outcomes: reconciliation succeeded and the serving state matches the Service, or there was an error, and reconciliation failed. This state can be found in `terminal_condition.state`. If reconciliation succeeded, the following fields will match: `traffic` and `traffic_statuses`, `observed_generation` and `generation`, `latest_ready_revision` and `latest_created_revision`. If reconciliation failed, `traffic_statuses`, `observed_generation`, and `latest_ready_revision` will have the state of the last serving revision, or empty for newly created Services. Additional information on the failure can be found in `terminal_condition` and `conditions`.\n\n  * `etag`: Output only. A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates.\n\n\n## GCP permissions\n\nEnsure the [https://run.googleapis.com/](https://console.cloud.google.com/apis/library/run.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_run_services.md",
    "content": "+++\ntitle = \"google_run_services resource\"\n\ndraft = false\n\n\n\n[menu.gcp]\ntitle = \"google_run_services\"\nidentifier = \"inspec/resources/gcp/google_run_services resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_run_services` InSpec audit resource to test the properties of a Google Cloud Service resource.\n\n## Examples\n\n```ruby\n  describe google_run_services(parent: 'value_parent') do\n    it { should exist }\n    its('names') { should include value_name }\n    its('uris') { should include value_uri }\n    its('generations') { should include value_generation }\n    its('create_times') { should include value_create_time }\n    its('update_times') { should include value_update_time }\n    its('creators') { should include value_creator }\n    its('ingresses') { should include value_ingress }\n  end\n```\n\n## Parameters\n\nParameters that can be accessed from the `google_run_services` resource:\n\nSee [google_run_service](google_run_service) for more detailed information.\n\n* `names`: an array of `google_run_service` name\n* `descriptions`: an array of `google_run_service` description\n* `uids`: an array of `google_run_service` uid\n* `generations`: an array of `google_run_service` generation\n* `labels`: an array of `google_run_service` labels\n* `annotations`: an array of `google_run_service` annotations\n* `create_times`: an array of `google_run_service` create_time\n* `update_times`: an array of `google_run_service` update_time\n* `delete_times`: an array of `google_run_service` delete_time\n* `expire_times`: an array of `google_run_service` expire_time\n* `creators`: an array of `google_run_service` creator\n* `last_modifiers`: an array of `google_run_service` last_modifier\n* `clients`: an array of `google_run_service` client\n* `client_versions`: an array of `google_run_service` client_version\n* `ingresses`: an array of `google_run_service` ingress\n* `launch_stages`: an array of `google_run_service` launch_stage\n* `binary_authorizations`: an array of `google_run_service` binary_authorization\n* `templates`: an array of `google_run_service` template\n* `traffics`: an array of `google_run_service` traffic\n* `scalings`: an array of `google_run_service` scaling\n* `default_uri_disableds`: an array of `google_run_service` default_uri_disabled\n* `custom_audiences`: an array of `google_run_service` custom_audiences\n* `observed_generations`: an array of `google_run_service` observed_generation\n* `terminal_conditions`: an array of `google_run_service` terminal_condition\n* `conditions`: an array of `google_run_service` conditions\n* `latest_ready_revisions`: an array of `google_run_service` latest_ready_revision\n* `latest_created_revisions`: an array of `google_run_service` latest_created_revision\n* `traffic_statuses`: an array of `google_run_service` traffic_statuses\n* `uris`: an array of `google_run_service` uri\n* `satisfies_pzs`: an array of `google_run_service` satisfies_pzs\n* `reconcilings`: an array of `google_run_service` reconciling\n* `etags`: an array of `google_run_service` etag\n\n## Properties\n\nProperties that can be accessed from the `google_run_services` resource:\n\nSee [google_run_service](google_run_service) for more detailed information.\n\n* `names`: an array of `google_run_service` name\n* `descriptions`: an array of `google_run_service` description\n* `uids`: an array of `google_run_service` uid\n* `generations`: an array of `google_run_service` generation\n* `labels`: an array of `google_run_service` labels\n* `annotations`: an array of `google_run_service` annotations\n* `create_times`: an array of `google_run_service` create_time\n* `update_times`: an array of `google_run_service` update_time\n* `delete_times`: an array of `google_run_service` delete_time\n* `expire_times`: an array of `google_run_service` expire_time\n* `creators`: an array of `google_run_service` creator\n* `last_modifiers`: an array of `google_run_service` last_modifier\n* `clients`: an array of `google_run_service` client\n* `client_versions`: an array of `google_run_service` client_version\n* `ingresses`: an array of `google_run_service` ingress\n* `launch_stages`: an array of `google_run_service` launch_stage\n* `binary_authorizations`: an array of `google_run_service` binary_authorization\n* `templates`: an array of `google_run_service` template\n* `traffics`: an array of `google_run_service` traffic\n* `scalings`: an array of `google_run_service` scaling\n* `default_uri_disableds`: an array of `google_run_service` default_uri_disabled\n* `custom_audiences`: an array of `google_run_service` custom_audiences\n* `observed_generations`: an array of `google_run_service` observed_generation\n* `terminal_conditions`: an array of `google_run_service` terminal_condition\n* `conditions`: an array of `google_run_service` conditions\n* `latest_ready_revisions`: an array of `google_run_service` latest_ready_revision\n* `latest_created_revisions`: an array of `google_run_service` latest_created_revision\n* `traffic_statuses`: an array of `google_run_service` traffic_statuses\n* `uris`: an array of `google_run_service` uri\n* `satisfies_pzs`: an array of `google_run_service` satisfies_pzs\n* `reconcilings`: an array of `google_run_service` reconciling\n* `etags`: an array of `google_run_service` etag\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://run.googleapis.com/](https://console.cloud.google.com/apis/library/run.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_config.md",
    "content": "+++\ntitle = \"google_runtime_config_config resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_config\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_config resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_runtime_config_config` InSpec audit resource to to test a Google Cloud Config resource.\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_config(project: 'chef-gcp-inspec', name: 'inspec-gcp-runtime-config') do\n  it { should exist }\n  its('description') { should cmp 'My runtime configurations' }\nend\n\ndescribe google_runtime_config_config(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_config` resource:\n\n\n  * `description`: The description to associate with the runtime config.\n\n  * `name`: The name of the runtime config.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_config_iam_binding.md",
    "content": "+++\ntitle = \"google_runtime_config_config_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_config_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_config_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_runtime_config_config_iam_binding` is used to test a Google Config Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_config_iam_binding(project: \"project\", name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_config_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_config_iam_policy.md",
    "content": "+++\ntitle = \"google_runtime_config_config_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_config_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_config_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_runtime_config_config_iam_policy` is used to test a Google Config Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_config_iam_policy(project: \"project\", name: \"name\") do\n  it { should exist }\nend\n\ngoogle_runtime_config_config_iam_policy(project: \"project\", name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_config_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_configs.md",
    "content": "+++\ntitle = \"google_runtime_config_configs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_configs\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_configs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_runtime_config_configs` InSpec audit resource to to test a Google Cloud Config resource.\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_configs(project: 'chef-gcp-inspec') do\n  its('descriptions') { should include 'My runtime configurations' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_configs` resource:\n\nSee [google_runtime_config_config](google_runtime_config_config) for more detailed information.\n\n  * `descriptions`: an array of `google_runtime_config_config` description\n  * `names`: an array of `google_runtime_config_config` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_variable.md",
    "content": "+++\ntitle = \"google_runtime_config_variable resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_variable\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_variable resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_runtime_config_variable` InSpec audit resource to to test a Google Cloud Variable resource.\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_variable(project: 'chef-gcp-inspec', config: 'inspec-gcp-runtime-config', name: 'prod-variables/hostname') do\n  it { should exist }\n  its('text') { should cmp 'example.com' }\nend\n\ndescribe google_runtime_config_variable(project: 'chef-gcp-inspec', config: 'inspec-gcp-runtime-config', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_variable` resource:\n\n\n  * `value`: The binary value of the variable. Either this or `text` can be set.\n\n  * `text`: The string value of the variable. Either this or `value` can be set.\n\n  * `name`: The name of the variable resource.\n\n  * `config`: The name of the runtime config that this variable belongs to.\n\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_runtime_config_variables.md",
    "content": "+++\ntitle = \"google_runtime_config_variables resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_runtime_config_variables\"\nidentifier = \"inspec/resources/gcp/google_runtime_config_variables resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_runtime_config_variables` InSpec audit resource to to test a Google Cloud Variable resource.\n\n## Examples\n\n```ruby\ndescribe google_runtime_config_variables(project: 'chef-gcp-inspec', config: 'inspec-gcp-runtime-config') do\n  its('texts') { should include 'example.com' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_runtime_config_variables` resource:\n\nSee [google_runtime_config_variable](google_runtime_config_variable) for more detailed information.\n\n  * `values`: an array of `google_runtime_config_variable` value\n  * `texts`: an array of `google_runtime_config_variable` text\n  * `names`: an array of `google_runtime_config_variable` name\n  * `configs`: an array of `google_runtime_config_variable` config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Resource Manager API](https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_secret_manager_secret.md",
    "content": "+++\ntitle = \"google_secret_manager_secret resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_secret_manager_secret\"\nidentifier = \"inspec/resources/gcp/google_secret_manager_secret resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_secret_manager_secret` InSpec audit resource to to test a Google Cloud Secret resource.\n\n## Examples\n\n```ruby\ndescribe google_secret_manager_secret(name: ' value_name') do\n\tit { should exist }\n\nend\n\ndescribe google_secret_manager_secret(name: \"does_not_exit\") do\n\tit { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_secret_manager_secret` resource:\n\n\n  * `name`: The resource name of the Secret. Format: `projects/{{project}}/secrets/{{secret_id}}`\n\n  * `create_time`: The time at which the Secret was created.\n\n  * `labels`: The labels assigned to this Secret.  Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}  Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}  No more than 64 labels can be assigned to a given resource.  An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n  * `replication`: The replication policy of the secret data attached to the Secret. It cannot be changed after the Secret has been created.\n\n    * `automatic`: The Secret will automatically be replicated without any restrictions.\n\n    * `user_managed`: The Secret will automatically be replicated without any restrictions.\n\n      * `replicas`: The list of Replicas for this Secret. Cannot be empty.\n\n        * `location`: The canonical IDs of the location to replicate data. For example: \"us-east1\".\n\n        * `customer_managed_encryption`: Customer Managed Encryption for the secret.\n\n          * `kms_key_name`: Describes the Cloud KMS encryption key that will be used to protect destination secret.\n\n  * `topics`: A list of up to 10 Pub/Sub topics to which messages are published when control plane operations are called on the secret or its versions.\n\n    * `name`: The resource name of the Pub/Sub topic that will be published to, in the following format: projects/*/topics/*. For publication to succeed, the Secret Manager Service Agent service account must have pubsub.publisher permissions on the topic.\n\n  * `expire_time`: Timestamp in UTC when the Secret is scheduled to expire. This is always provided on output, regardless of what was sent on input. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n  * `ttl`: The TTL for the Secret. A duration in seconds with up to nine fractional digits, terminated by 's'. Example: \"3.5s\".\n\n  * `rotation`: The rotation time and period for a Secret. At `next_rotation_time`, Secret Manager will send a Pub/Sub notification to the topics configured on the Secret. `topics` must be set to configure rotation.\n\n    * `next_rotation_time`: Timestamp in UTC at which the Secret is scheduled to rotate. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n\n    * `rotation_period`: The Duration between rotation notifications. Must be in seconds and at least 3600s (1h) and at most 3153600000s (100 years). If rotationPeriod is set, `next_rotation_time` must be set. `next_rotation_time` will be advanced by this period when the service automatically sends rotation notifications.\n\n  * `secret_id`: This must be unique within the project.\n\n\n## GCP permissions\n\nEnsure the [Secret Manager API](https://console.cloud.google.com/apis/library/secretmanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_secret_manager_secrets.md",
    "content": "+++\ntitle = \"google_secret_manager_secrets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_secret_manager_secrets\"\nidentifier = \"inspec/resources/gcp/google_secret_manager_secrets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_secret_manager_secrets` InSpec audit resource to to test a Google Cloud Secret resource.\n\n## Examples\n\n```ruby\n    describe google_secret_manager_secrets(parent: ' value_parent') do\n    it { should exist }\n  end\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_secret_manager_secrets` resource:\n\nSee [google_secret_manager_secret](google_secret_manager_secret) for more detailed information.\n\n  * `names`: an array of `google_secret_manager_secret` name\n  * `create_times`: an array of `google_secret_manager_secret` create_time\n  * `labels`: an array of `google_secret_manager_secret` labels\n  * `replications`: an array of `google_secret_manager_secret` replication\n  * `topics`: an array of `google_secret_manager_secret` topics\n  * `expire_times`: an array of `google_secret_manager_secret` expire_time\n  * `ttls`: an array of `google_secret_manager_secret` ttl\n  * `rotations`: an array of `google_secret_manager_secret` rotation\n  * `secret_ids`: an array of `google_secret_manager_secret` secret_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Secret Manager API](https://console.cloud.google.com/apis/library/secretmanager.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_service_account.md",
    "content": "+++\ntitle = \"google_service_account resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_service_account\"\nidentifier = \"inspec/resources/gcp/google_service_account resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_service_account` InSpec audit resource to to test a Google Cloud ServiceAccount resource.\n\n## Examples\n\n```ruby\ndescribe google_service_account(project: 'chef-gcp-inspec', name: \"display-name@project-id.iam.gserviceaccount.com\") do\n  it { should exist }\n  its('display_name') { should cmp '' }\nend\n\ndescribe google_service_account(project: 'chef-gcp-inspec', name: \"nonexistent@project-id.iam.gserviceaccount.com\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP project IAM service account has the expected unique identifier\n\n    describe google_service_account(project: 'sample-project', name: 'sample-account@sample-project.iam.gserviceaccount.com') do\n      its('unique_id') { should eq 12345678 }\n    end\n\n### Test that a GCP project IAM service account has the expected oauth2 client identifier\n\n    describe google_service_account(project: 'sample-project', name: 'sample-account@sample-project.iam.gserviceaccount.com') do\n      its('oauth2_client_id') { should eq 12345678 }\n    end\n\n### Test that a GCP project IAM service account does not have user managed keys\n\n\t\tdescribe google_service_account_keys(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\") do\n\t\t  its('key_types') { should_not include 'USER_MANAGED' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_service_account` resource:\n\n\n  * `name`: The name of the service account.\n\n  * `project_id`: Id of the project that owns the service account.\n\n  * `unique_id`: Unique and stable id of the service account\n\n  * `email`: Email address of the service account.\n\n  * `display_name`: User specified description of service account.\n\n  * `oauth2_client_id`: OAuth2 client id for the service account.\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_service_account_key.md",
    "content": "+++\ntitle = \"google_service_account_key resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_service_account_key\"\nidentifier = \"inspec/resources/gcp/google_service_account_key resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_service_account_key` InSpec audit resource to to test a Google Cloud ServiceAccountKey resource.\n\n## Examples\n\n```ruby\ngoogle_service_account_keys(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\").key_names.each do |sa_key_name|\n\tdescribe google_service_account_key(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\", name: sa_key_name.split('/').last) do\n\t\tit { should exist }\n\t\tits('key_type') { should_not cmp 'USER_MANAGED' }\n\tend\nend\n```\n\n### Test that a GCP project IAM service account key has the expected key algorithm\n\n    describe google_service_account_key(name: \"projects/sample-project/serviceAccounts/test-sa@sample-project.iam.gserviceaccount.com/keys/c6bd986da9fac6d71178db41d1741cbe751a5080\" ) do\n      its('key_algorithm') { should eq \"KEY_ALG_RSA_2048\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_service_account_key` resource:\n\n\n  * `name`: The name of the key.\n\n  * `private_key_type`: Output format for the service account key.\n  Possible values:\n    * TYPE_UNSPECIFIED\n    * TYPE_PKCS12_FILE\n    * TYPE_GOOGLE_CREDENTIALS_FILE\n\n  * `key_algorithm`: Specifies the algorithm for the key.\n  Possible values:\n    * KEY_ALG_UNSPECIFIED\n    * KEY_ALG_RSA_1024\n    * KEY_ALG_RSA_2048\n\n  * `private_key_data`: Private key data. Base-64 encoded.\n\n  * `public_key_data`: Public key data. Base-64 encoded.\n\n  * `valid_after_time`: Key can only be used after this time.\n\n  * `valid_before_time`: Key can only be used before this time.\n\n  * `key_type`: Specifies the type of the key. Possible values include KEY_TYPE_UNSPECIFIED, USER_MANAGED and SYSTEM_MANAGED\n  Possible values:\n    * KEY_TYPE_UNSPECIFIED\n    * USER_MANAGED\n    * SYSTEM_MANAGED\n\n  * `key_origin`: The key origin.\n  Possible values:\n    * ORIGIN_UNSPECIFIED\n    * USER_PROVIDED\n    * GOOGLE_PROVIDED\n\n  * `service_account`: The name of the serviceAccount.\n\n  * `path`: The full name of the file that will hold the service account private key. The management of this file will depend on the value of sync_file parameter.  File path must be absolute.\n  * `disabled`: The key status.\n\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_service_account_keys.md",
    "content": "+++\ntitle = \"google_service_account_keys resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_service_account_keys\"\nidentifier = \"inspec/resources/gcp/google_service_account_keys resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_service_account_keys` InSpec audit resource to to test a Google Cloud ServiceAccountKey resource.\n\n## Examples\n\n```ruby\ndescribe google_service_account_keys(project: 'chef-gcp-inspec', service_account: \"display-name@project-id.iam.gserviceaccount.com\") do\n  its('count') { should be <= 1000 }\n  its('key_types') { should_not include 'USER_MANAGED' }\nend\n```\n\n### Test that there are no more than a specified number of keys for the service account\n\n    describe google_service_account_keys(project: 'sample-project', service_account: 'sample-account@sample-project.iam.gserviceaccount.com') do\n      its('count') { should be <= 1000}\n    end\n\n### Test that a service account with expected name is available\n\n    describe google_service_account_keys(project: 'sample-project', service_account: 'sample-account@sample-project.iam.gserviceaccount.com') do\n      its('key_names'){ should include \"projects/sample-project/serviceAccounts/test-sa@sample-project.iam.gserviceaccount.com/keys/c6bd986da9fac6d71178db41d1741cbe751a5080\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_service_account_keys` resource:\n\nSee [google_service_account_key](google_service_account_key) for more detailed information.\n\n  * `key_names`: an array of `google_service_account_key` name\n  * `private_key_types`: an array of `google_service_account_key` private_key_type\n  * `key_algorithms`: an array of `google_service_account_key` key_algorithm\n  * `private_key_data`: an array of `google_service_account_key` private_key_data\n  * `public_key_data`: an array of `google_service_account_key` public_key_data\n  * `valid_after_times`: an array of `google_service_account_key` valid_after_time\n  * `valid_before_times`: an array of `google_service_account_key` valid_before_time\n  * `key_origins`: an array of `google_service_account_key` key_origin\n  * `key_types`: an array of `google_service_account_key` key_type\n  * `service_accounts`: an array of `google_service_account_key` service_account\n  * `paths`: an array of `google_service_account_key` path\n  * `disableds`: an array of `google_service_account_key` disabled\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_service_accounts.md",
    "content": "+++\ntitle = \"google_service_accounts resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_service_accounts\"\nidentifier = \"inspec/resources/gcp/google_service_accounts resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_service_accounts` InSpec audit resource to to test a Google Cloud ServiceAccount resource.\n\n## Examples\n\n```ruby\ndescribe google_service_accounts(project: 'chef-gcp-inspec', name: \"display-name@project-id.iam.gserviceaccount.com\") do\n  its('service_account_emails') { should include \"display-name@project-id.iam.gserviceaccount.com\" }\n  its('count') { should be <= 1000 }\nend\n```\n\n### Test that there are no more than a specified number of service accounts for the project\n\n    describe google_service_accounts(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 1000}\n    end\n\n### Test that an expected service account display name is available\n\n    describe google_service_accounts(project: 'chef-inspec-gcp') do\n      its('service_account_display_names'){ should include \"gcp_sa_name\" }\n    end\n    \n### Test that an expected service account unique identifier is available\n\n    describe google_service_accounts(project: 'chef-inspec-gcp') do\n      its('service_account_ids'){ should include 12345678 }\n    end    \n\n### Test that a service account with expected name is available\n\n    describe google_service_accounts(project: 'dummy-project') do\n      its('service_account_names'){ should include \"projects/dummy-project/serviceAccounts/dummy-acct@dummy-project.iam.gserviceaccount.com\" }\n    end\n\n### Use filtering to retrieve a particular service account\n\n    google_service_accounts(project: 'chef-inspec-gcp').where(service_account_display_names: /^dummyaccount/).service_account_names.each do |sa_name|\n      describe google_service_account(name: sa_name) do\n        it { should exist }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_service_accounts` resource:\n\nSee [google_service_account](google_service_account) for more detailed information.\n\n  * `service_account_names`: an array of `google_service_account` name\n  * `project_ids`: an array of `google_service_account` project_id\n  * `service_account_ids`: an array of `google_service_account` unique_id\n  * `service_account_emails`: an array of `google_service_account` email\n  * `service_account_display_names`: an array of `google_service_account` display_name\n  * `oauth2_client_ids`: an array of `google_service_account` oauth2_client_id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Identity and Access Management (IAM) API](https://console.cloud.google.com/apis/library/iam.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_service_networking_service_connections.md",
    "content": "+++\ntitle = \"google_service_networking_service_connections resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_service_networking_service_connections\"\nidentifier = \"inspec/resources/gcp/google_service_networking_service_connections resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_service_networking_service_connections` InSpec audit resource to to test a Google Cloud service_connection resource.\n\n## Examples\n\n```ruby\n    describe google_servicenetworking_service_connections(parent: ' value_parent',network: 'value_network') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_service_networking_service_connections` resource:\n\nSee [google_service_networking_service_connection](google_service_networking_service_connection) for more detailed information.\n\n  * `networks`: an array of `google_service_networking_service_connection` network\n  * `reserved_peering_ranges`: an array of `google_service_networking_service_connection` reserved_peering_ranges\n  * `peerings`: an array of `google_service_networking_service_connection` peering\n  * `services`: an array of `google_service_networking_service_connection` service\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [https://servicenetworking.googleapis.com/](https://console.cloud.google.com/apis/library/servicenetworking.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sourcerepo_repositories.md",
    "content": "+++\ntitle = \"google_sourcerepo_repositories resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sourcerepo_repositories\"\nidentifier = \"inspec/resources/gcp/google_sourcerepo_repositories resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sourcerepo_repositories` InSpec audit resource to to test a Google Cloud Repository resource.\n\n## Examples\n\n```ruby\nrepo_name = 'inspec-gcp-repository'\ndescribe.one do\n  google_sourcerepo_repositories(project: 'chef-gcp-inspec').names.each do |name|\n    describe name do\n      it { should match /\\/repos\\/#{repo_name}$/ }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sourcerepo_repositories` resource:\n\nSee [google_sourcerepo_repository](google_sourcerepo_repository) for more detailed information.\n\n  * `names`: an array of `google_sourcerepo_repository` name\n  * `urls`: an array of `google_sourcerepo_repository` url\n  * `sizes`: an array of `google_sourcerepo_repository` size\n  * `pubsub_configs`: an array of `google_sourcerepo_repository` pubsub_configs\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Source Repositories API](https://console.cloud.google.com/apis/library/sourcerepo.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sourcerepo_repository.md",
    "content": "+++\ntitle = \"google_sourcerepo_repository resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sourcerepo_repository\"\nidentifier = \"inspec/resources/gcp/google_sourcerepo_repository resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sourcerepo_repository` InSpec audit resource to to test a Google Cloud Repository resource.\n\n## Examples\n\n```ruby\ndescribe google_sourcerepo_repository(project: 'chef-gcp-inspec', name: 'inspec-gcp-repository') do\n  it { should exist }\nend\n\ndescribe google_sourcerepo_repository(project: 'chef-gcp-inspec', name: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sourcerepo_repository` resource:\n\n\n  * `name`: Resource name of the repository, of the form projects/{{project}}/repos/{{repo}}. The repo name may contain slashes. eg, projects/myproject/repos/name/with/slash\n\n  * `url`: URL to clone the repository from Google Cloud Source Repositories.\n\n  * `size`: The disk usage of the repo, in bytes.\n\n  * `pubsub_configs`: How this repository publishes a change in the repository through Cloud Pub/Sub.  Keyed by the topic names.\n\n\n## GCP permissions\n\nEnsure the [Cloud Source Repositories API](https://console.cloud.google.com/apis/library/sourcerepo.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_database.md",
    "content": "+++\ntitle = \"google_spanner_database resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_database\"\nidentifier = \"inspec/resources/gcp/google_spanner_database resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_spanner_database` InSpec audit resource to to test a Google Cloud Database resource.\n\n## Examples\n\n```ruby\ndescribe google_spanner_database(project: 'chef-gcp-inspec', instance: 'spinstance', name: 'spdatabase') do\n  it { should exist }\n  its('name') { should match 'spdatabase' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_database` resource:\n\n\n  * `name`: A unique identifier for the database, which cannot be changed after the instance is created. Values are of the form [a-z][-a-z0-9]*[a-z0-9].\n\n  * `instance`: The instance to create the database on.\n\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_databases.md",
    "content": "+++\ntitle = \"google_spanner_databases resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_databases\"\nidentifier = \"inspec/resources/gcp/google_spanner_databases resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_spanner_databases` InSpec audit resource to to test a Google Cloud Database resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n\tgoogle_spanner_databases(project: 'chef-gcp-inspec', instance: 'spinstance').names.each do |name|\n\t  describe name do\n\t  \tit { should match 'spdatabase' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_databases` resource:\n\nSee [google_spanner_database](google_spanner_database) for more detailed information.\n\n  * `names`: an array of `google_spanner_database` name\n  * `instances`: an array of `google_spanner_database` instance\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_instance.md",
    "content": "+++\ntitle = \"google_spanner_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_instance\"\nidentifier = \"inspec/resources/gcp/google_spanner_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_spanner_instance` InSpec audit resource to to test a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\ndescribe google_spanner_instance(project: 'chef-gcp-inspec', name: 'spinstance', config: 'regional-us-east1') do\n  it { should exist }\n  its('config') { should match 'regional-us-east1' }\n  its('name') { should match 'spinstance' }\n  its('display_name') { should eq 'inspectest' }\n  its('node_count') { should eq '1' }\n  its('labels') { should include('env' => 'test') }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_instance` resource:\n\n\n  * `name`: A unique identifier for the instance, which cannot be changed after the instance is created. The name must be between 6 and 30 characters in length.\n\n  * `config`: The name of the instance's configuration (similar but not quite the same as a region) which defines defines the geographic placement and replication of your databases in this instance. It determines where your data is stored. Values are typically of the form `regional-europe-west1` , `us-central` etc. In order to obtain a valid list please consult the [Configuration section of the docs](https://cloud.google.com/spanner/docs/instances).\n\n  * `display_name`: The descriptive name for this instance as it appears in UIs. Must be unique per project and between 4 and 30 characters in length.\n\n  * `node_count`: The number of nodes allocated to this instance.\n\n  * `labels`: An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_instance_iam_binding.md",
    "content": "+++\ntitle = \"google_spanner_instance_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_instance_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_spanner_instance_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_spanner_instance_iam_binding` is used to test a Google Instance Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_spanner_instance_iam_binding(project: \"project\", name: \"name\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_instance_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_instance_iam_policy.md",
    "content": "+++\ntitle = \"google_spanner_instance_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_instance_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_spanner_instance_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_spanner_instance_iam_policy` is used to test a Google Instance Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_spanner_instance_iam_policy(project: \"project\", name: \"name\") do\n  it { should exist }\nend\n\ngoogle_spanner_instance_iam_policy(project: \"project\", name: \"name\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_instance_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_spanner_instances.md",
    "content": "+++\ntitle = \"google_spanner_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_spanner_instances\"\nidentifier = \"inspec/resources/gcp/google_spanner_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_spanner_instances` InSpec audit resource to to test a Google Cloud Instance resource.\n\n## Examples\n\n```ruby\ndescribe.one do\n  google_spanner_instances(project: 'chef-gcp-inspec', config: 'regional-us-east1').configs.each do |config|\n    describe config do\n      it { should match 'regional-us-east1' }\n    end\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_spanner_instances` resource:\n\nSee [google_spanner_instance](google_spanner_instance) for more detailed information.\n\n  * `names`: an array of `google_spanner_instance` name\n  * `configs`: an array of `google_spanner_instance` config\n  * `display_names`: an array of `google_spanner_instance` display_name\n  * `node_counts`: an array of `google_spanner_instance` node_count\n  * `labels`: an array of `google_spanner_instance` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud Spanner API](https://console.cloud.google.com/apis/library/spanner.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_connect.md",
    "content": "+++\ntitle = \"google_sql_connect resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_connect\"\nidentifier = \"inspec/resources/gcp/google_sql_connect resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_connect` InSpec audit resource to to test a Google Cloud Connect resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_connect(project: 'chef-gcp-inspec', instance: 'test-pg') do\n  it { should exist }\n  its('region') { should include 'us-central1' }\n  its('database_version') { should include 'POSTGRES_13' }\n  its('backend_type') { should include 'SECOND_GEN' }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_connect` resource:\n\n\n  * `region`: The region where you want your Cloud SQL replicas to reside.\n\n  * `ip_addresses`: The assigned IP addresses for the instance.\n\n    * `ip_address`: The IP address assigned.\n\n    * `time_to_retire`: The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.\n\n    * `type`: The type of this IP address. A PRIMARY address is an address that can accept incoming connections. An OUTGOING address is the source address of connections originating from the instance, if supported.\n    Possible values:\n      * PRIMARY\n      * OUTGOING\n\n  * `database_version`: The MySQL version running on your source database server.\n  Possible values:\n    * MYSQL_5_5\n    * MYSQL_5_6\n    * MYSQL_5_7\n    * MYSQL_8_0\n\n  * `backend_type`: * FIRST_GEN: First Generation instance. MySQL only. * SECOND_GEN: Second Generation instance or PostgreSQL instance. * EXTERNAL: A database server that is not managed by Google.\n  Possible values:\n    * FIRST_GEN\n    * SECOND_GEN\n    * EXTERNAL\n\n  * `server_ca_cert`: Configuration specific to on-premises instances.\n\n    * `cert`: PEM representation of the X.509 certificate.\n\n    * `cert_serial_number`: Serial number, as extracted from the certificate.\n\n    * `common_name`: User supplied name. Constrained to [a-zA-Z.-_ ]+.\n\n    * `sha1_fingerprint`: Sha1 Fingerprint.\n\n    * `instance`: Name of the database instance.\n\n    * `create_time`: The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n    * `expiration_time`: The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_database.md",
    "content": "+++\ntitle = \"google_sql_database resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_database\"\nidentifier = \"inspec/resources/gcp/google_sql_database resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_database` InSpec audit resource to to test a Google Cloud Database resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_database(project: 'chef-gcp-inspec', instance: 'my-database', gcp_db_name: 'my-db') do\n  it { should exist }\n  its('name') { should eq 'my-db' }\n  its('instance') { should eq 'my-database' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_database` resource:\n\n\n  * `charset`: The charset value. See MySQL's [Supported Character Sets and Collations](https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html) and Postgres' [Character Set Support](https://www.postgresql.org/docs/9.6/static/multibyte.html) for more details and supported values. Postgres databases only support a value of `UTF8` at creation time.\n\n  * `collation`: The collation value. See MySQL's [Supported Character Sets and Collations](https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html) and Postgres' [Collation Support](https://www.postgresql.org/docs/9.6/static/collation.html) for more details and supported values. Postgres databases only support a value of `en_US.UTF8` at creation time.\n\n  * `name`: The name of the database in the Cloud SQL instance. This does not include the project ID or instance name.\n\n  * `instance`: The name of the Cloud SQL instance. This does not include the project ID.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_database_instance.md",
    "content": "+++\ntitle = \"google_sql_database_instance resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_database_instance\"\nidentifier = \"inspec/resources/gcp/google_sql_database_instance resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_database_instance` InSpec audit resource to to test a Google Cloud DatabaseInstance resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_database_instance(project: 'chef-gcp-inspec', instance: 'my-database') do\n  it { should exist }\n  its('state') { should eq 'RUNNABLE' }\n  its('backend_type') { should eq 'SECOND_GEN' }\n  its('database_version') { should eq 'MYSQL_5_7' }\nend\n```\n\n### Test that a GCP Cloud SQL Database instance is in the expected state\n\n    describe google_sql_database_instance(project: 'chef-inspec-gcp',  database: 'my-database') do\n      its('state') { should eq 'RUNNABLE' }\n    end\n\n### Test that a GCP Cloud SQL Database instance generation type\n\n    describe google_sql_database_instance(project: 'chef-inspec-gcp',  database: 'my-database') do\n      its('backend_type') { should eq \"SECOND_GEN\" }\n    end\n\n### Test that a GCP Cloud SQL Database instance connection name is as expected\n\n    describe google_sql_database_instance(project: 'spaterson-project',  database: 'gcp-inspec-db-instance') do\n      its('connection_name') { should eq \"spaterson-project:europe-west2:gcp-inspec-db-instance\" }\n    end\n\n### Confirm that a GCP Cloud SQL Database instance has the correct version \n\n    describe google_sql_database_instance(project: 'spaterson-project',  database: 'gcp-inspec-db-instance') do\n      its('database_version') { should eq \"MYSQL_5_7\" }\n    end\n\n### Confirm that a GCP Cloud SQL Database instance is running in the desired region and zone \n\n    describe google_sql_database_instance(project: 'spaterson-project',  database: 'gcp-inspec-db-instance') do\n      its('gce_zone') { should eq \"europe-west2-a\" }\n      its('region') { should eq \"europe-west2\" }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_sql_database_instance` resource:\n\n\n  * `backend_type`: * FIRST_GEN: First Generation instance. MySQL only. * SECOND_GEN: Second Generation instance or PostgreSQL instance. * EXTERNAL: A database server that is not managed by Google.\n  Possible values:\n    * FIRST_GEN\n    * SECOND_GEN\n    * EXTERNAL\n\n  * `kind`: This is always sql#instancesList.\n\n  * `connection_name`: Connection name of the Cloud SQL instance used in connection strings.\n\n  * `database_version`: The database engine type and version. For First Generation instances, can be MYSQL_5_5, or MYSQL_5_6. For Second Generation instances, can be MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. PostgreSQL instances: POSTGRES_9_6  The databaseVersion property can not be changed after instance creation.\n  Possible values:\n    * MYSQL_5_5\n    * MYSQL_5_6\n    * MYSQL_5_7\n    * POSTGRES_9_6\n\n  * `failover_replica`: The name and status of the failover replica. This property is applicable only to Second Generation instances.\n\n    * `available`: The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the failover replica when the status is true.\n\n    * `name`: The name of the failover replica. If specified at instance creation, a failover replica is created for the instance. The name doesn't include the project ID. This property is applicable only to Second Generation instances.\n\n  * `instance_type`: The instance type. This can be one of the following. * CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating   from a master. * ON_PREMISES_INSTANCE: An instance running on the customer's   premises. * READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a   read-replica.\n  Possible values:\n    * CLOUD_SQL_INSTANCE\n    * ON_PREMISES_INSTANCE\n    * READ_REPLICA_INSTANCE\n\n  * `ip_addresses`: The assigned IP addresses for the instance.\n\n    * `ip_address`: The IP address assigned.\n\n    * `time_to_retire`: The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.\n\n    * `type`: The type of this IP address. A PRIMARY address is an address that can accept incoming connections. An OUTGOING address is the source address of connections originating from the instance, if supported.\n    Possible values:\n      * PRIMARY\n      * OUTGOING\n\n  * `ipv6_address`: The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.\n\n  * `master_instance_name`: The name of the instance which will act as master in the replication setup.\n\n  * `max_disk_size`: The maximum disk size of the instance in bytes.\n\n  * `name`: Name of the Cloud SQL instance. This does not include the project ID.\n\n  * `region`: The geographical region. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation/PostgreSQL).\n\n  * `replica_configuration`: Configuration specific to failover replicas and read replicas.\n\n    * `failover_target`: Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.  Only one replica can be specified as failover target, and the replica has to be in different zone with the master instance.\n\n    * `mysql_replica_configuration`: MySQL specific configuration when replicating from a MySQL on-premises master. Replication configuration information such as the username, password, certificates, and keys are not stored in the instance metadata.  The configuration information is used only to set up the replication connection and is stored by MySQL in a file named master.info in the data directory.\n\n      * `ca_certificate`: PEM representation of the trusted CA's x509 certificate.\n\n      * `client_certificate`: PEM representation of the replica's x509 certificate\n\n      * `client_key`: PEM representation of the replica's private key. The corresponding public key is encoded in the client's certificate.\n\n      * `connect_retry_interval`: Seconds to wait between connect retries. MySQL's default is 60 seconds.\n\n      * `dump_file_path`: Path to a SQL dump file in Google Cloud Storage from which the replica instance is to be created. The URI is in the form gs://bucketName/fileName. Compressed gzip files (.gz) are also supported. Dumps should have the binlog coordinates from which replication should begin. This can be accomplished by setting --master-data to 1 when using mysqldump.\n\n      * `master_heartbeat_period`: Interval in milliseconds between replication heartbeats.\n\n      * `password`: The password for the replication connection.\n\n      * `ssl_cipher`: A list of permissible ciphers to use for SSL encryption.\n\n      * `username`: The username for the replication connection.\n\n      * `verify_server_certificate`: Whether or not to check the master's Common Name value in the certificate that it sends during the SSL handshake.\n\n    * `replica_names`: The replicas of the instance.\n\n    * `service_account_email_address`: The service account email address assigned to the instance. This property is applicable only to Second Generation instances.\n\n  * `settings`: The user settings.\n\n    * `kind`: This is always sql#settings.\n\n    * `database_flags`: The database flags passed to the instance at startup\n\n      * `name`: The name of the flag. These flags are passed at instance startup, so include both server options and system variables for MySQL. Flags should be specified with underscores, not hyphens.\n\n      * `value`: The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.\n\n    * `ip_configuration`: The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.\n\n      * `ipv4_enabled`: Whether the instance should be assigned an IP address or not.\n\n      * `authorized_networks`: The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).\n\n        * `expiration_time`: The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n        * `name`: An optional label to identify this entry.\n\n        * `value`: The whitelisted value for the access control list. For example, to grant access to a client from an external IP (IPv4 or IPv6) address or subnet, use that address or subnet here.\n\n      * `require_ssl`: Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.\n\n    * `tier`: The tier or machine type for this instance, for example db-n1-standard-1. For MySQL instances, this field determines whether the instance is Second Generation (recommended) or First Generation.\n\n    * `availability_type`: The availabilityType define if your postgres instance is run zonal or regional.\n    Possible values:\n      * ZONAL\n      * REGIONAL\n\n    * `backup_configuration`: The daily backup configuration for the instance.\n\n      * `enabled`: Enable Autobackup for your instance.\n\n      * `binary_log_enabled`: Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well. MySQL only.\n\n      * `start_time`: Define the backup start time in UTC (HH:MM)\n\n    * `settings_version`: The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.\n\n    * `user_labels`: User-provided labels, represented as a dictionary where each label is a single key value pair.\n\n    * `activation_policy`: Specifies when the instance is activated.\n    Possible values:\n      * SQL_ACTIVATION_POLICY_UNSPECIFIED\n      * ALWAYS\n      * NEVER\n\n    * `data_disk_size_gb`: The size of data disk, in GB. The data disk size minimum is 10GB.\n\n    * `data_disk_type`: Specifies when the instance is activated.\n    Possible values:\n      * SQL_ACTIVATION_POLICY_UNSPECIFIED\n      * ALWAYS\n      * NEVER\n\n    * `pricing_plan`: The pricing plan for this instance.\n    Possible values:\n      * SQL_PRICING_PLAN_UNSPECIFIED\n      * PACKAGE\n      * PER_USE\n\n    * `replication_type`: The pricing plan for this instance.\n    Possible values:\n      * SQL_REPLICATION_TYPE_UNSPECIFIED\n      * SYNCHRONOUS\n      * ASYNCHRONOUS\n\n    * `storage_auto_resize`: Configuration to increase storage size automatically. The default value is true.\n\n    * `storage_auto_resize_limit`: The maximum size to which storage capacity can be automatically increased. The default value is 0, which specifies that there is no limit.\n\n  * `gce_zone`: The Compute Engine zone that the instance is currently serving from. This value could be different from the zone that was specified when the instance was created if the instance has failed over to its secondary zone.\n\n  * `state`: The current serving state of the database instance.\n  Possible values:\n    * SQL_INSTANCE_STATE_UNSPECIFIED\n    * RUNNABLE\n    * SUSPENDED\n    * PENDING_DELETE\n    * PENDING_CREATE\n    * MAINTENANCE\n    * FAILED\n\n  * `disk_encryption_configuration`: Disk encryption settings\n\n    * `kms_key_name`: The KMS key used to encrypt the Cloud SQL instance\n\n  * `disk_encryption_status`: Disk encryption status\n\n    * `kms_key_version_name`: The KMS key version used to encrypt the Cloud SQL instance\n\n  * `server_ca_cert`: SSL configuration\n\n    * `cert`: PEM representation of the X.509 certificate.\n\n    * `cert_serial_number`: Serial number, as extracted from the certificate.\n\n    * `common_name`: User supplied name. Constrained to [a-zA-Z.-_ ]+.\n\n    * `create_time`: The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n    * `expiration_time`: The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n    * `sha1_fingerprint`: SHA-1 fingerprint of the certificate.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_database_instances.md",
    "content": "+++\ntitle = \"google_sql_database_instances resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_database_instances\"\nidentifier = \"inspec/resources/gcp/google_sql_database_instances resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_database_instances` InSpec audit resource to to test a Google Cloud DatabaseInstance resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_database_instances(project: 'chef-gcp-inspec') do\n  its('instance_states') { should include 'RUNNABLE' }\n  its('instance_names') { should include 'my-database' }\nend\n```\n\n### Test that there are no more than a specified number of zones available for the project\n\n    describe google_sql_database_instances(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n\n### Test that a database instance exists in the expected zone  \n\n    describe google_sql_database_instances(project: 'chef-inspec-gcp') do\n      its('instance_zones') { should include \"us-east1-b\" }\n    end\n\n### Test that a database instance exists in the expected region  \n\n    describe google_sql_database_instances(project: 'chef-inspec-gcp') do\n      its('instance_regions') { should include \"us-east1\" }\n    end\n\n\n### Confirm that at least one database instance is in \"RUNNABLE\" state\n\n    describe google_sql_database_instances(project: 'chef-inspec-gcp') do\n      its('instance_states') { should include \"RUNNABLE\" }\n    end\n\n### Test that a subset of all database instances matching \"*mysqldb*\" are all version \"MYSQL_5_7\"\n\n    google_sql_database_instances(project: 'chef-inspec-gcp').where(instance_name: /mysqldb/).instance_names.each do |instance_name|\n      describe google_sql_database_instance(project: 'chef-inspec-gcp',  database: instance_name) do\n        it { should exist }\n        its('database_version') { should eq \"MYSQL_5_7\" }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_sql_database_instances` resource:\n\nSee [google_sql_database_instance](google_sql_database_instance) for more detailed information.\n\n  * `backend_types`: an array of `google_sql_database_instance` backend_type\n  * `kinds`: an array of `google_sql_database_instance` kind\n  * `connection_names`: an array of `google_sql_database_instance` connection_name\n  * `instance_versions`: an array of `google_sql_database_instance` database_version\n  * `failover_replicas`: an array of `google_sql_database_instance` failover_replica\n  * `instance_types`: an array of `google_sql_database_instance` instance_type\n  * `ip_addresses`: an array of `google_sql_database_instance` ip_addresses\n  * `ipv6_addresses`: an array of `google_sql_database_instance` ipv6_address\n  * `master_instance_names`: an array of `google_sql_database_instance` master_instance_name\n  * `max_disk_sizes`: an array of `google_sql_database_instance` max_disk_size\n  * `instance_names`: an array of `google_sql_database_instance` name\n  * `instance_regions`: an array of `google_sql_database_instance` region\n  * `replica_configurations`: an array of `google_sql_database_instance` replica_configuration\n  * `settings`: an array of `google_sql_database_instance` settings\n  * `instance_zones`: an array of `google_sql_database_instance` gce_zone\n  * `instance_states`: an array of `google_sql_database_instance` state\n  * `disk_encryption_configurations`: an array of `google_sql_database_instance` disk_encryption_configuration\n  * `disk_encryption_statuses`: an array of `google_sql_database_instance` disk_encryption_status\n  * `server_ca_certs`: an array of `google_sql_database_instance` server_ca_cert\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_databases.md",
    "content": "+++\ntitle = \"google_sql_databases resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_databases\"\nidentifier = \"inspec/resources/gcp/google_sql_databases resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_databases` InSpec audit resource to to test a Google Cloud Database resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_databases(project: 'chef-gcp-inspec', instance: 'my-database') do\n  it { should exist }\n  its('names') { should include 'my-db' }\n  its('instances') { should include 'my-database' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_databases` resource:\n\nSee [google_sql_database](google_sql_database) for more detailed information.\n\n  * `charsets`: an array of `google_sql_database` charset\n  * `collations`: an array of `google_sql_database` collation\n  * `names`: an array of `google_sql_database` name\n  * `instances`: an array of `google_sql_database` instance\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_flags.md",
    "content": "+++\ntitle = \"google_sql_flags resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_flags\"\nidentifier = \"inspec/resources/gcp/google_sql_flags resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_flags` InSpec audit resource to to test a Google Cloud Flag resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_flags do\nits('names') { should include , 'audit_log' }\nits('types') { should include , 'STRING' }\nits('applies_tos.first') { should include , 'MYSQL_5_6' }\nits('allowed_string_values.first') { should include , 'true' }\nits('requires_restarts') { should include , 'true' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_flags` resource:\n\nSee [google_sql_flag](google_sql_flag) for more detailed information.\n\n  * `allowed_string_values`: an array of `google_sql_flag` allowed_string_values\n  * `applies_tos`: an array of `google_sql_flag` applies_to\n  * `max_values`: an array of `google_sql_flag` max_value\n  * `min_values`: an array of `google_sql_flag` min_value\n  * `names`: an array of `google_sql_flag` name\n  * `requires_restarts`: an array of `google_sql_flag` requires_restart\n  * `types`: an array of `google_sql_flag` type\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_operation.md",
    "content": "+++\ntitle = \"google_sql_operation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_operation\"\nidentifier = \"inspec/resources/gcp/google_sql_operation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_operation` InSpec audit resource to to test a Google Cloud Operation resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_operation(project: 'chef-gcp-inspec', operation: 'e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5') do\n  it { should exist }\n  its('name') { should eq 'e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5' }\n  its('status') { should eq 'DONE' }\n  its('operation_type') { should eq 'CREATE' }\nend\n\ndescribe google_sql_operation(project: 'chef-gcp-inspec', operation: 'nonexistant') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_operation` resource:\n\n\n  * `user`: The email address of the user who initiated this operation.\n\n  * `name`: An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation.\n\n  * `status`: An Operation resource. For successful operations that return an Operation resource, only the fields relevant to the operation are populated in the resource.\n  Possible values:\n    * PENDING\n    * RUNNING\n    * DONE\n    * SQL_OPERATION_STATUS_UNSPECIFIED\n\n  * `operation_type`: An Operation resource. For successful operations that return an Operation resource, only the fields relevant to the operation are populated in the resource.\n  Possible values:\n    * SQL_OPERATION_TYPE_UNSPECIFIED\n    * IMPORT\n    * EXPORT\n    * CREATE\n    * UPDATE\n    * DELETE\n    * RESTART\n    * BACKUP_VOLUME\n    * DELETE_VOLUME\n    * RESTORE_VOLUME\n    * INJECT_USER\n    * CLONE\n    * STOP_REPLICA\n    * START_REPLICA\n    * START_REPLICA\n    * CREATE_REPLICA\n    * CREATE_USER\n    * DELETE_USER\n    * UPDATE_USER\n    * CREATE_DATABASE\n    * DELETE_DATABASE\n    * CREATE_REPLICA\n    * UPDATE_DATABASE\n    * FAILOVER\n    * DELETE_BACKUP\n    * RECREATE_REPLICA\n    * TRUNCATE_LOG\n    * DEMOTE_MASTER\n    * MAINTENANCE\n    * RESCHEDULE_MAINTENANCE\n    * START_EXTERNAL_SYNC\n\n  * `instance`: The name of the Cloud SQL instance. This does not include the project ID.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_operations.md",
    "content": "+++\ntitle = \"google_sql_operations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_operations\"\nidentifier = \"inspec/resources/gcp/google_sql_operations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_operations` InSpec audit resource to to test a Google Cloud Operation resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_operations(project: 'chef-gcp-inspec', instance: 'my-database') do\n  it { should exist }\n  its('names') { should include 'e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5' }\n  its('statuses') { should include 'DONE' }\n  its('operation_types') { should include 'CREATE' }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_operations` resource:\n\nSee [google_sql_operation](google_sql_operation) for more detailed information.\n\n  * `users`: an array of `google_sql_operation` user\n  * `names`: an array of `google_sql_operation` name\n  * `statuses`: an array of `google_sql_operation` status\n  * `operation_types`: an array of `google_sql_operation` operation_type\n  * `instances`: an array of `google_sql_operation` instance\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_ssl_cert.md",
    "content": "+++\ntitle = \"google_sql_ssl_cert resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_ssl_cert\"\nidentifier = \"inspec/resources/gcp/google_sql_ssl_cert resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_ssl_cert` InSpec audit resource to to test a Google Cloud SslCert resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_ssl_cert(project: 'chef-gcp-inspec', instance: 'test-pg', sha1_fingerprint:  '80c5c611c0a591db967c7dda3467e23127288fed') do\n  it { should exist }\n  its('instance') { should eq 'test-pg' }\n  its('common_name') { should eq 'C=US,O=Google\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=68c79386-b63e-4998-8254-ba59729cdf78' }\n  its('sha1_fingerprint') { should eq '80c5c611c0a591db967c7dda3467e23127288fed' }\nend\n\ndescribe google_sql_ssl_cert(project: 'chef-gcp-inspec', instance: 'nonexistent', sha1_fingerprint:  '80c5c611c0a591db967c7dda3467e23127288fed') do\n  it { should_not exist }\nend\n\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_ssl_cert` resource:\n\n\n  * `cert`: PEM representation of the X.509 certificate.\n\n  * `cert_serial_number`: Serial number, as extracted from the certificate.\n\n  * `common_name`: User supplied name. Constrained to [a-zA-Z.-_ ]+.\n\n  * `create_time`: The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n  * `expiration_time`: The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.\n\n  * `instance`: The name of the Cloud SQL instance. This does not include the project ID.\n\n  * `sha1_fingerprint`: The SHA-1 of the certificate.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_ssl_certs.md",
    "content": "+++\ntitle = \"google_sql_ssl_certs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_ssl_certs\"\nidentifier = \"inspec/resources/gcp/google_sql_ssl_certs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_ssl_certs` InSpec audit resource to to test a Google Cloud SslCerts resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_ssl_certs(project: 'chef-gcp-inspec', instance: 'test-pg') do\n  it { should exist }\n  its('instances') { should include 'test-pg' }\n  its('common_names') { should include 'C=US,O=Google\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=68c79386-b63e-4998-8254-ba59729cdf78' }\n  its('sha1_fingerprints') { should include '80c5c611c0a591db967c7dda3467e23127288fed' }\nend\n\ndescribe google_sql_ssl_certs(project: 'chef-gcp-inspec', instance: 'nonexistent') do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_ssl_certs` resource:\n\nSee [google_sql_ssl_cert](google_sql_ssl_cert) for more detailed information.\n\n  * `certs`: an array of `google_sql_ssl_cert` cert\n  * `cert_serial_numbers`: an array of `google_sql_ssl_cert` cert_serial_number\n  * `common_names`: an array of `google_sql_ssl_cert` common_name\n  * `create_times`: an array of `google_sql_ssl_cert` create_time\n  * `expiration_times`: an array of `google_sql_ssl_cert` expiration_time\n  * `instances`: an array of `google_sql_ssl_cert` instance\n  * `sha1_fingerprints`: an array of `google_sql_ssl_cert` sha1_fingerprint\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_user.md",
    "content": "+++\ntitle = \"google_sql_user resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_user\"\nidentifier = \"inspec/resources/gcp/google_sql_user resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_user` InSpec audit resource to to test a Google Cloud User resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_user(project: 'chef-gcp-inspec', database: 'my-database', name: 'user-name', host: \"example.com\") do\n  it { should exist }\n  its('name') { should cmp 'user-name' }\n  its('instance') { should cmp 'my-database' }\nend\n\ndescribe google_sql_user(project: 'chef-gcp-inspec', database: 'my-database', name: \"nonexistent\", host: \"example.com\") do\n  it { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_sql_user` resource:\n\n\n  * `host`: The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name cannot be updated after insertion.\n\n  * `name`: The name of the user in the Cloud SQL instance.\n\n  * `instance`: The name of the Cloud SQL instance. This does not include the project ID.\n\n  * `password`: The password for the user.\n\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_sql_users.md",
    "content": "+++\ntitle = \"google_sql_users resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_sql_users\"\nidentifier = \"inspec/resources/gcp/google_sql_users resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_sql_users` InSpec audit resource to to test a Google Cloud User resource.\n\n## Examples\n\n```ruby\ndescribe google_sql_users(project: 'chef-gcp-inspec', database: 'my-database') do\n  its('user_names') { should include 'user-name' }\nend\n```\n\n### Test that there are no more than a specified number of users available for the project\n\n    describe google_sql_users(project: 'chef-inspec-gcp', database: 'database-instance') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected user is available for the project\n\n    describe google_sql_users(project: 'chef-inspec-gcp') do\n      its('user_names') { should include \"us-east1-b\" }\n    end\n\n### Test whether any users are in status \"DOWN\"\n\n    describe google_sql_users(project: 'chef-inspec-gcp') do\n      its('user_statuses') { should_not include \"DOWN\" }\n    end\n\n### Test users exist for all database instances in a project\n\n    google_sql_database_instances(project: 'chef-inspec-gcp').instance_names.each do |instance_name|\n      describe google_sql_users(project: 'chef-inspec-gcp', database: instance_name) do\n        it { should exist }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_sql_users` resource:\n\nSee [google_sql_user](google_sql_user) for more detailed information.\n\n  * `user_hosts`: an array of `google_sql_user` host\n  * `user_names`: an array of `google_sql_user` name\n  * `user_instances`: an array of `google_sql_user` instance\n  * `passwords`: an array of `google_sql_user` password\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Cloud SQL Admin API](https://console.cloud.google.com/apis/library/sqladmin.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket.md",
    "content": "+++\ntitle = \"google_storage_bucket resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_bucket` InSpec audit resource to to test a Google Cloud Bucket resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket(name: bucket-name) do\n  it { should exist }\n  its('location') { should cmp 'europe-west2'.upcase }\n\n  its('storage_class') { should eq \"STANDARD\" }\n  its('labels') { should include(\"key\" => \"value\") }\n  its('retention_policy.retention_period') { should cmp 1000 }\nend\n\ndescribe google_storage_bucket(name: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP storage bucket is in the expected location\n\n    describe google_storage_bucket(name: 'chef-inspec-gcp-storage-bucket-abcd') do\n      its('location') { should eq \"EUROPE-WEST2\" }\n    end\n\n### Test that a GCP storage bucket has the expected project number\n\n    describe google_storage_bucket(name: 'chef-inspec-gcp-storage-bucket-abcd') do\n      its('project_number') {should eq 12345678 }\n    end\n\n### Test that a GCP storage bucket has the expected storage class\n\n    describe google_storage_bucket(name: 'chef-inspec-gcp-storage-bucket-abcd') do\n      its('storage_class') { should eq 'STANDARD' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket` resource:\n\n\n  * `acl`: Access controls on the bucket.\n\n    * `bucket`: The name of the bucket.\n\n    * `domain`: The domain associated with the entity.\n\n    * `email`: The email address associated with the entity.\n\n    * `entity`: The entity holding the permission, in one of the following forms:   user-userId   user-email   group-groupId   group-email   domain-domain   project-team-projectId   allUsers   allAuthenticatedUsers Examples:   The user liz@example.com would be user-liz@example.com.   The group example@googlegroups.com would be   group-example@googlegroups.com.   To refer to all members of the Google Apps for Business domain   example.com, the entity would be domain-example.com.\n\n    * `entity_id`: The ID for the entity\n\n    * `id`: The ID of the access-control entry.\n\n    * `project_team`: The project team associated with the entity\n\n      * `project_number`: The project team associated with the entity\n\n      * `team`: The team.\n      Possible values:\n        * editors\n        * owners\n        * viewers\n\n    * `role`: The access permission for the entity.\n    Possible values:\n      * OWNER\n      * READER\n      * WRITER\n\n  * `cors`: The bucket's Cross-Origin Resource Sharing (CORS) configuration.\n\n    * `max_age_seconds`: The value, in seconds, to return in the Access-Control-Max-Age header used in preflight responses.\n\n    * `method`: The list of HTTP methods on which to include CORS response headers, (GET, OPTIONS, POST, etc) Note: \"*\" is permitted in the list of methods, and means \"any method\".\n\n    * `origin`: The list of Origins eligible to receive CORS response headers. Note: \"*\" is permitted in the list of origins, and means \"any Origin\".\n\n    * `response_header`: The list of HTTP headers other than the simple response headers to give permission for the user-agent to share across domains.\n\n  * `default_event_based_hold`: Whether or not to automatically apply an eventBasedHold to new objects added to the bucket.\n\n  * `default_object_acl`: Default access controls to apply to new objects when no ACL is provided.\n\n    * `bucket`: The name of the bucket.\n\n    * `domain`: The domain associated with the entity.\n\n    * `email`: The email address associated with the entity.\n\n    * `entity`: The entity holding the permission, in one of the following forms:   * user-{{userId}}   * user-{{email}} (such as \"user-liz@example.com\")   * group-{{groupId}}   * group-{{email}} (such as \"group-example@googlegroups.com\")   * domain-{{domain}} (such as \"domain-example.com\")   * project-team-{{projectId}}   * allUsers   * allAuthenticatedUsers\n\n    * `entity_id`: The ID for the entity\n\n    * `generation`: The content generation of the object, if applied to an object.\n\n    * `id`: The ID of the access-control entry.\n\n    * `object`: The name of the object, if applied to an object.\n\n    * `project_team`: The project team associated with the entity\n\n      * `project_number`: The project team associated with the entity\n\n      * `team`: The team.\n      Possible values:\n        * editors\n        * owners\n        * viewers\n\n    * `role`: The access permission for the entity.\n    Possible values:\n      * OWNER\n      * READER\n\n  * `id`: The ID of the bucket. For buckets, the id and name properities are the same.\n\n  * `lifecycle`: The bucket's lifecycle configuration.  See https://developers.google.com/storage/docs/lifecycle for more information.\n\n    * `rule`: A lifecycle management rule, which is made of an action to take and the condition(s) under which the action will be taken.\n\n      * `action`: The action to take.\n\n        * `storage_class`: Target storage class. Required iff the type of the action is SetStorageClass.\n\n        * `type`: Type of the action. Currently, only Delete and SetStorageClass are supported.\n        Possible values:\n          * Delete\n          * SetStorageClass\n\n      * `condition`: The condition(s) under which the action will be taken.\n\n        * `age_days`: Age of an object (in days). This condition is satisfied when an object reaches the specified age.\n\n        * `created_before`: A date in RFC 3339 format with only the date part (for instance, \"2013-01-15\"). This condition is satisfied when an object is created before midnight of the specified date in UTC.\n\n        * `is_live`: Relevant only for versioned objects.  If the value is true, this condition matches live objects; if the value is false, it matches archived objects.\n\n        * `matches_storage_class`: Objects having any of the storage classes specified by this condition will be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, STANDARD, and DURABLE_REDUCED_AVAILABILITY.\n\n        * `num_newer_versions`: Relevant only for versioned objects. If the value is N, this condition is satisfied when there are at least N versions (including the live version) newer than this version of the object.\n\n  * `location`: The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Defaults to US. See the developer's guide for the authoritative list.\n\n  * `logging`: The bucket's logging configuration, which defines the destination bucket and optional name prefix for the current bucket's logs.\n\n    * `log_bucket`: The destination bucket where the current bucket's logs should be placed.\n\n    * `log_object_prefix`: A prefix for log object names.\n\n  * `metageneration`: The metadata generation of this bucket.\n\n  * `name`: The name of the bucket\n\n  * `owner`: The owner of the bucket. This is always the project team's owner group.\n\n    * `entity`: The entity, in the form project-owner-projectId.\n\n    * `entity_id`: The ID for the entity.\n\n  * `project_number`: The project number of the project the bucket belongs to.\n\n  * `storage_class`: The bucket's default storage class, used whenever no storageClass is specified for a newly-created object. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE, and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the bucket is created, it will default to  STANDARD. For more information, see storage classes.\n  Possible values:\n    * MULTI_REGIONAL\n    * REGIONAL\n    * STANDARD\n    * NEARLINE\n    * COLDLINE\n    * ARCHIVE\n    * DURABLE_REDUCED_AVAILABILITY\n\n  * `time_created`: The creation time of the bucket in RFC 3339 format.\n\n  * `updated`: The modification time of the bucket in RFC 3339 format.\n\n  * `versioning`: The bucket's versioning configuration.\n\n    * `enabled`: While set to true, versioning is fully enabled for this bucket.\n\n  * `website`: The bucket's website configuration, controlling how the service behaves when accessing bucket contents as a web site. See the Static Website Examples for more information.\n\n    * `main_page_suffix`: If the requested object path is missing, the service will ensure the path has a trailing '/', append this suffix, and attempt to retrieve the resulting object. This allows the creation of index.html objects to represent directory pages.\n\n    * `not_found_page`: If the requested object path is missing, and any mainPageSuffix object is missing, if applicable, the service will return the named object from this bucket as the content for a 404 Not Found result.\n\n  * `labels`: Labels applied to this bucket.  A list of key->value pairs.\n\n  * `encryption`: Encryption configuration for the bucket\n\n    * `default_kms_key_name`: A Cloud KMS key that will be used to encrypt objects inserted into this bucket, if no encryption method is specified.\n\n  * `retention_policy`: Retention policy for the bucket\n\n    * `effective_time`: The time from which the retention policy was effective\n\n    * `is_locked`: If the retention policy is locked. If true, the retention policy cannot be removed and the period cannot be reduced.\n\n    * `retention_period`: The period of time, in seconds, that objects in the bucket must be retained and cannot be deleted, overwritten, or made noncurrent.\n\n  * `project`: A valid API project identifier.\n\n  * `predefined_default_object_acl`: Apply a predefined set of default object access controls to this bucket.  Acceptable values are:   - \"authenticatedRead\": Object owner gets OWNER access, and     allAuthenticatedUsers get READER access.   - \"bucketOwnerFullControl\": Object owner gets OWNER access, and     project team owners get OWNER access.   - \"bucketOwnerRead\": Object owner gets OWNER access, and project     team owners get READER access.   - \"private\": Object owner gets OWNER access.   - \"projectPrivate\": Object owner gets OWNER access, and project team     members get access according to their roles.   - \"publicRead\": Object owner gets OWNER access, and allUsers get     READER access.\n  Possible values:\n    * authenticatedRead\n    * bucketOwnerFullControl\n    * bucketOwnerRead\n    * private\n    * projectPrivate\n    * publicRead\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_acl.md",
    "content": "+++\ntitle = \"google_storage_bucket_acl resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_acl\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_acl resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_bucket_acl` InSpec audit resource to to test a Google Cloud BucketACL resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket_acl(bucket: 'storage-bucket-name', entity: user-email) do\n  it { should exist }\n  its('role') { should cmp \"OWNER\" }\n\n  its('bucket') { should eq 'storage-bucket-name' }\n  its('email') { should include entity-email.com }\nend\n\ndescribe google_storage_bucket_acl(bucket: 'storage-bucket-name', entity: \"allUsers\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP storage bucket ACL exists\n\n     describe google_storage_bucket_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      it { should exist }\n    end\n\n### Test that a GCP storage bucket ACL has the expected role (READER, WRITER or OWNER)\n\n    describe google_storage_bucket_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      its('role') { should eq 'OWNER' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket_acl` resource:\n\n\n  * `domain`: The domain associated with the entity.\n\n  * `email`: The email address associated with the entity.\n\n  * `entity`: The entity holding the permission, in one of the following forms:   user-userId   user-email   group-groupId   group-email   domain-domain   project-team-projectId   allUsers   allAuthenticatedUsers Examples:   The user liz@example.com would be user-liz@example.com.   The group example@googlegroups.com would be   group-example@googlegroups.com.   To refer to all members of the Google Apps for Business domain   example.com, the entity would be domain-example.com.\n\n  * `entity_id`: The ID for the entity\n\n  * `id`: The ID of the access-control entry.\n\n  * `project_team`: The project team associated with the entity\n\n    * `project_number`: The project team associated with the entity\n\n    * `team`: The team.\n    Possible values:\n      * editors\n      * owners\n      * viewers\n\n  * `role`: The access permission for the entity.\n  Possible values:\n    * OWNER\n    * READER\n    * WRITER\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_iam_binding.md",
    "content": "+++\ntitle = \"google_storage_bucket_iam_binding resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_iam_binding\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_iam_binding resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_storage_bucket_iam_binding` is used to test a Google Bucket Iam Bindings\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket_iam_binding(bucket: \"bucket\", role: \"roles/editor\") do\n  it { should exist }\n  its('members') { should include 'user:testuser@example.com' }\nend\n```\n\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket_iam_binding` resource:\n\n  * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n  * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_iam_bindings.md",
    "content": "+++\ntitle = \"google_storage_bucket_iam_bindings resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_iam_bindings\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_iam_bindings resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_storage\\_bucket\\_iam\\_bindings\n\n**This resource is deprecated. Please use `google_storage_bucket_iam_policy` instead**\n\nUse the `google_storage_bucket_iam_bindings` InSpec audit resource to test properties of all, or a filtered group of, GCP storage bucket IAM bindings.\n\n<br>\n\n## Syntax\n\nA `google_storage_bucket_iam_bindings` resource block collects GCP storage bucket IAM bindings then tests that group.\n\n    describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz') do\n      it { should exist }\n    end\n\nUse this InSpec resource to enumerate roles then test in-depth using `google_project_iam_binding`.\n\n    google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz').iam_binding_roles.each do |iam_binding_role|\n      describe google_storage_bucket_iam_binding(bucket: 'bucket-buvsjjcndqz',  role: iam_binding_role) do\n        it { should exist }\n        its('members') {should include 'user:someuser@domain.com' }\n      end\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that there are no more than a specified number of IAM bindings roles available for the bucket\n\n    describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected role is available for the bucket\n\n    describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz') do\n      its('iam_binding_roles') { should include \"roles/storage.admin\" }\n    end\n    \n### Test that a particular role does not exist using filtering of the plural resource\n\n    describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz').where(iam_binding_role: \"roles/iam.securityReviewer\") do\n      it { should_not exist }\n    end\n\n<br>\n\n## Filter criteria\n\nThis resource supports the following filter criteria:  `iam_binding_role`.  This may be used with `where`, as a block or as a method.\n\n## Properties\n\n*  `iam_binding_roles` - an array of google_storage_bucket_iam_binding role strings e.g. `[\"roles/storage.admin\", \"roles/owner\"]`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage API](https://console.cloud.google.com/apis/api/storage-component.googleapis.com/) is enabled."
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_iam_policy.md",
    "content": "+++\ntitle = \"google_storage_bucket_iam_policy resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_iam_policy\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_iam_policy resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n## Syntax\n\nA `google_storage_bucket_iam_policy` is used to test a Google Bucket Iam Policy resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket_iam_policy(bucket: \"bucket\") do\n  it { should exist }\nend\n\ngoogle_storage_bucket_iam_policy(bucket: \"bucket\").bindings.each do |binding|\n  describe binding do\n    its('role') { should eq 'roles/editor'}\n    its('members') { should include 'user:testuser@example.com'}\n  end\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket_iam_policy` resource:\n\n  * `iam_binding_roles`: The list of roles that exist on the policy.\n\n  * `bindings`: Associates a list of members to a role.\n\n    * `role`: Role that is assigned to members. For example, roles/viewer, roles/editor, or roles/owner.\n\n    * `members`: Specifies the identities requesting access for a Cloud Platform resource.\n\n  * `audit_configs`: Specifies cloud audit logging configuration for this policy.\n\n    * `service`: Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices`  is a special value that covers all services.\n\n    * `audit_log_configs`: The configuration for logging of each type of permission.\n\n      * `log_type`: The log type that this config enables. For example, ADMIN_READ, DATA_WRITE or DATA_READ\n\n      * `exempted_members`: Specifies the identities that do not cause logging for this type of permission.\n\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_object.md",
    "content": "+++\ntitle = \"google_storage_bucket_object resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_object\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_object resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_bucket_object` InSpec audit resource to to test a Google Cloud BucketObject resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket_object(bucket: 'bucket-with-object', object: 'image1') do\n  it { should exist }\n  its('size.to_i') { should be > 0 }\n\n  its('time_created') { should be > Time.now - 60*60*24*10 }\n  its('time_updated') { should be > Time.now - 60*60*24*10 }\nend\n\ndescribe google_storage_bucket_object(bucket: 'bucket-with-object', object: \"nonexistent\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP compute zone exists\n\n    describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n      it { should exist }\n    end\n\n### Test that a GCP storage bucket object has non-zero size\n\n    describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n      its('size') { should be > 0 }\n    end\n\n### Test that a GCP storage bucket object has the expected content type\n\n    describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n      its('content_type') { should eq \"text/plain; charset=utf-8\" }\n    end\n\n\n### Test that a GCP storage bucket object was created within a certain time period\n\n    describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n      its('time_created_date') { should be > Time.now - 365*60*60*24*10 }\n    end\n    \n    \n### Test that a GCP storage bucket object was last updated within a certain time period\n\n    describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n      its('time_updated') { should be > Time.now - 365*60*60*24*10 }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket_object` resource:\n\n\n  * `bucket`: The name of the bucket.\n\n  * `object`: The name of the object.\n\n  * `content_type`: The Content-Type of the object data.  See https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types for more information on possible Content-Types\n\n  * `crc32c`: CRC32c checksum.\n\n  * `etag`: The object entity tag.\n\n  * `generation`: The content generation of this object. Used for object versioning.\n\n  * `id`: The ID of the object, including the bucket name, object name, and generation number.\n\n  * `md5_hash`: MD5 hash of the data; encoded using base64.\n\n  * `media_link`: Media download link.\n\n  * `metageneration`: The version of the metadata for this object at this generation. Used for preconditions and for detecting changes in metadata. A metageneration number is only meaningful in the context of a particular generation of a particular object.\n\n  * `name`: The name of the object.\n\n  * `size`: Content-Length of the data in bytes.\n\n  * `storage_class`: Storage class of the object.\n\n  * `time_created`: The time this object was created.\n\n  * `time_deleted`: The time this object was deleted. Returned if and only if this version of the object is no longer a live version, but remains in the bucket as a noncurrent version.\n\n  * `time_storage_class_updated`: The time at which the object's storage class was last changed.\n\n  * `time_updated`: The modification time of the object metadata.\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_bucket_objects.md",
    "content": "+++\ntitle = \"google_storage_bucket_objects resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_bucket_objects\"\nidentifier = \"inspec/resources/gcp/google_storage_bucket_objects resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_bucket_objects` InSpec audit resource to to test a Google Cloud BucketObject resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_bucket_objects(bucket: 'bucket-with-object') do\n\tits('object_names') { should include 'image1' }\n\tits('count') { should be <= 10 }\nend\n```\n\n### Test that there are no more than a specified number of storage buckets for the project\n\n    describe google_storage_bucket_objects(bucket: 'bucket-name') do\n      its('count') { should be <= 100 }\n    end\n\n\n### Test that an expected named bucket is available\n\n    describe google_storage_bucket_objects(bucket: 'bucket-name') do\n      its('object_buckets'){ should include 'my_expected_bucket' }\n    end\n\n### Test that an expected named bucket is available\n\n    describe google_storage_bucket_objects(bucket: 'bucket-name') do\n      its('object_names'){ should include 'my_expected_object' }\n    end\n        \n### Test a filtered group of bucket objects created within the last 24hrs\n\n    describe google_storage_bucket_objects(bucket: 'bucket-name').where(object_created_time > Time.now - 60*60*24) do\n      it { should exist }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_bucket_objects` resource:\n\nSee [google_storage_bucket_object](google_storage_bucket_object) for more detailed information.\n\n  * `object_buckets`: an array of `google_storage_bucket_object` bucket\n  * `objects`: an array of `google_storage_bucket_object` object\n  * `content_types`: an array of `google_storage_bucket_object` content_type\n  * `crc32cs`: an array of `google_storage_bucket_object` crc32c\n  * `etags`: an array of `google_storage_bucket_object` etag\n  * `generations`: an array of `google_storage_bucket_object` generation\n  * `ids`: an array of `google_storage_bucket_object` id\n  * `md5_hashes`: an array of `google_storage_bucket_object` md5_hash\n  * `media_links`: an array of `google_storage_bucket_object` media_link\n  * `metagenerations`: an array of `google_storage_bucket_object` metageneration\n  * `object_names`: an array of `google_storage_bucket_object` name\n  * `sizes`: an array of `google_storage_bucket_object` size\n  * `storage_classes`: an array of `google_storage_bucket_object` storage_class\n  * `object_created_times`: an array of `google_storage_bucket_object` time_created\n  * `time_deleteds`: an array of `google_storage_bucket_object` time_deleted\n  * `time_storage_class_updateds`: an array of `google_storage_bucket_object` time_storage_class_updated\n  * `time_updateds`: an array of `google_storage_bucket_object` time_updated\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_buckets.md",
    "content": "+++\ntitle = \"google_storage_buckets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_buckets\"\nidentifier = \"inspec/resources/gcp/google_storage_buckets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_buckets` InSpec audit resource to to test a Google Cloud Bucket resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_buckets(project: 'chef-gcp-inspec') do\n  its('bucket_names') { should include bucket-name }\nend\n```\n\n### Test that there are no more than a specified number of storage buckets for the project\n\n    describe google_storage_buckets(project: 'chef-inspec-gcp') do\n      its('count') { should be <= 100}\n    end\n\n\n### Test that an expected named bucket is available\n\n    describe google_storage_buckets do\n      its('bucket_names'){ should include \"my_expected_bucket\" }\n    end\n    \n### Test that all buckets belong to the expected project number\n\n    google_storage_buckets(project: 'chef-inspec-gcp').bucket_names.each do |bucket_name|\n      describe google_storage_bucket(name: bucket_name) do\n        it { should exist }\n        its('project_number'){ should eq 1122334455 }\n      end\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_buckets` resource:\n\nSee [google_storage_bucket](google_storage_bucket) for more detailed information.\n\n  * `acls`: an array of `google_storage_bucket` acl\n  * `cors`: an array of `google_storage_bucket` cors\n  * `default_event_based_holds`: an array of `google_storage_bucket` default_event_based_hold\n  * `default_object_acls`: an array of `google_storage_bucket` default_object_acl\n  * `bucket_ids`: an array of `google_storage_bucket` id\n  * `lifecycles`: an array of `google_storage_bucket` lifecycle\n  * `bucket_locations`: an array of `google_storage_bucket` location\n  * `loggings`: an array of `google_storage_bucket` logging\n  * `metagenerations`: an array of `google_storage_bucket` metageneration\n  * `bucket_names`: an array of `google_storage_bucket` name\n  * `owners`: an array of `google_storage_bucket` owner\n  * `bucket_project_numbers`: an array of `google_storage_bucket` project_number\n  * `storage_classes`: an array of `google_storage_bucket` storage_class\n  * `time_createds`: an array of `google_storage_bucket` time_created\n  * `updateds`: an array of `google_storage_bucket` updated\n  * `versionings`: an array of `google_storage_bucket` versioning\n  * `websites`: an array of `google_storage_bucket` website\n  * `labels`: an array of `google_storage_bucket` labels\n  * `encryptions`: an array of `google_storage_bucket` encryption\n  * `retention_policies`: an array of `google_storage_bucket` retention_policy\n  * `projects`: an array of `google_storage_bucket` project\n  * `predefined_default_object_acls`: an array of `google_storage_bucket` predefined_default_object_acl\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_default_object_acl.md",
    "content": "+++\ntitle = \"google_storage_default_object_acl resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_default_object_acl\"\nidentifier = \"inspec/resources/gcp/google_storage_default_object_acl resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_default_object_acl` InSpec audit resource to to test a Google Cloud DefaultObjectACL resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_default_object_acl(bucket: 'gcp-inspec-storage-bucket', entity: user-email) do\n  it { should exist }\n  its('role') { should cmp \"OWNER\" }\n\n  its('bucket') { should eq 'gcp-inspec-storage-bucket' }\n  its('email') { should include entity-email.com }\nend\n\ndescribe google_storage_default_object_acl(bucket: 'gcp-inspec-storage-bucket', entity: \"allUsers\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP storage bucket ACL exists\n\n    describe google_storage_default_object_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      it { should exist }\n    end\n\n### Test that a GCP storage default object ACL has the expected role (READER, WRITER or OWNER)\n\n    describe google_storage_default_object_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      its('role') { should eq 'OWNER' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_default_object_acl` resource:\n\n\n  * `domain`: The domain associated with the entity.\n\n  * `email`: The email address associated with the entity.\n\n  * `entity`: The entity holding the permission, in one of the following forms:   * user-{{userId}}   * user-{{email}} (such as \"user-liz@example.com\")   * group-{{groupId}}   * group-{{email}} (such as \"group-example@googlegroups.com\")   * domain-{{domain}} (such as \"domain-example.com\")   * project-team-{{projectId}}   * allUsers   * allAuthenticatedUsers\n\n  * `entity_id`: The ID for the entity\n\n  * `generation`: The content generation of the object, if applied to an object.\n\n  * `id`: The ID of the access-control entry.\n\n  * `object`: The name of the object, if applied to an object.\n\n  * `project_team`: The project team associated with the entity\n\n    * `project_number`: The project team associated with the entity\n\n    * `team`: The team.\n    Possible values:\n      * editors\n      * owners\n      * viewers\n\n  * `role`: The access permission for the entity.\n  Possible values:\n    * OWNER\n    * READER\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_storage_object_acl.md",
    "content": "+++\ntitle = \"google_storage_object_acl resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_storage_object_acl\"\nidentifier = \"inspec/resources/gcp/google_storage_object_acl resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_storage_object_acl` InSpec audit resource to to test a Google Cloud ObjectACL resource.\n\n## Examples\n\n```ruby\ndescribe google_storage_object_acl(bucket: 'bucket-with-object', object: 'image1', entity: user-email) do\n  it { should exist }\n  its('role') { should cmp \"OWNER\" }\n\n  its('bucket') { should eq 'bucket-with-object' }\n  its('email') { should include entity-email.com }\nend\n\ndescribe google_storage_object_acl(bucket: 'bucket-with-object', object: 'image1', entity: \"allUsers\") do\n  it { should_not exist }\nend\n```\n\n### Test that a GCP storage bucket ACL exists\n\n    describe google_storage_object_acl(bucket: 'bucket-buvsjjcndqz', object: 'bucket-object-pmxbiikq', entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      it { should exist }\n    end\n\n### Test that a GCP storage object ACL has the expected role (READER, WRITER or OWNER)\n\n    describe google_storage_object_acl(bucket: 'bucket-buvsjjcndqz', object: 'bucket-object-pmxbiikq', entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n      its('role') { should eq 'OWNER' }\n    end\n\n## Properties\n\nProperties that can be accessed from the `google_storage_object_acl` resource:\n\n\n  * `domain`: The domain associated with the entity.\n\n  * `email`: The email address associated with the entity.\n\n  * `entity`: The entity holding the permission, in one of the following forms:   * user-{{userId}}   * user-{{email}} (such as \"user-liz@example.com\")   * group-{{groupId}}   * group-{{email}} (such as \"group-example@googlegroups.com\")   * domain-{{domain}} (such as \"domain-example.com\")   * project-team-{{projectId}}   * allUsers   * allAuthenticatedUsers\n\n  * `entity_id`: The ID for the entity\n\n  * `generation`: The content generation of the object, if applied to an object.\n\n  * `id`: The ID of the access-control entry.\n\n  * `object`: The name of the object, if applied to an object.\n\n  * `project_team`: The project team associated with the entity\n\n    * `project_number`: The project team associated with the entity\n\n    * `team`: The team.\n    Possible values:\n      * editors\n      * owners\n      * viewers\n\n  * `role`: The access permission for the entity.\n  Possible values:\n    * OWNER\n    * READER\n\n\n## GCP permissions\n\nEnsure the [Google Cloud Storage](https://console.cloud.google.com/apis/library/storage-component.googleapis.com/) is enabled for the current project.\n"
  },
  {
    "path": "docs-chef-io/content/google_user.md",
    "content": "+++\ntitle = \"google_user resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_user\"\nidentifier = \"inspec/resources/gcp/google_user resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_user\n\nUse the `google_user` InSpec audit resource to test properties of a single GCP user.\n\n<br>\n\n## Syntax\n\nA `google_user` resource block declares the tests for a single GCP user by principal email address or immutable ID.\n\n    describe google_user(user_key: 'principal_email_address@domain.com') do\n      it { should exist }\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that a GCP user with specified ID exists\n\n    describe google_user(user_key: '110491234567894702010') do\n      it { should exist }\n    end\n\n### Test that a GCP user has expected full name \n\n    describe google_user(user_key: '110491234567894702010') do\n      its('name.full_name') { should eq \"Bill S. Preston Esq.\" }\n    end\n    \n### Test that a GCP user has MFA enabled\n\n    describe google_user(user_key: 'theodore_ted_logan@excellentadventure.com') do\n      it { should have_mfa_enabled }\n    end\n    \n### Test that a GCP user is suspended or not\n\n    describe google_user(user_key: 'theodore_ted_logan@excellentadventure.com') do\n      it { should_not be_suspended }\n    end\n        \n<br>\n\n## Properties\n\n*  `agreed_to_terms`, `archived`, `change_password_at_next_login`, `creation_time`, `customer_id`, `emails`, `etag`, `id`, `include_in_global_address_list`, `ip_whitelisted`, `is_admin`, `is_delegated_admin`, `is_enforced_in2_sv`, `is_enrolled_in2_sv`, `is_mailbox_setup`, `kind`, `last_login_time`, `name`, `non_editable_aliases`, `org_unit_path`, `primary_email`, `suspended`\n\n<br>\n\n\n## GCP permissions\n\nEnsure the G Suite Admin SDK [Directory API](https://developers.google.com/admin-sdk/directory/) is enabled and you have sufficient privileges to list users."
  },
  {
    "path": "docs-chef-io/content/google_users.md",
    "content": "+++\ntitle = \"google_users resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_users\"\nidentifier = \"inspec/resources/gcp/google_users resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\n# google\\_users\n\nUse the `google_users` InSpec audit resource to test properties of all, or a filtered group of, GCP users.\n\n<br>\n\n## Syntax\n\nA `google_users` resource block collects GCP users for the specified customer.  As documented [here](https://developers.google.com/admin-sdk/directory/v1/reference/users/list), this defaults to the `my_customer` alias to represent your account's `customerId`.\n\n    describe google_users(customer: 'my_customer') do\n      it { should exist }\n    end\n\nThe `domain` argument can optionally be provided to get fields from only one domain. Either the customer or the domain parameter must be provided. \n\n    describe google_users(domain: 'my_domain.com') do\n      it { should exist }\n    end\n\nUse this InSpec resource to enumerate IDs then test in-depth using `google_user`.\n\n    google_users(customer: 'my_customer').user_ids.each do |user_id|\n      describe google_user(user_key: user_id) do\n        it { should exist }\n        it { should_not be_suspended }\n      end\n    end\n\n<br>\n\n## Examples\n\nThe following examples show how to use this InSpec audit resource.\n\n### Test that there are no more than a specified number of users available for the project\n\n    describe google_users(customer: 'my_customer') do\n      its('count') { should be <= 100}\n    end\n\n### Test that an expected user is available for the project\n\n    describe google_users(customer: 'my_customer') do\n      its('user_names') { should include \"Monsieur Happy\" }\n    end\n\n### Test that a subset of all users with name matching \"Batman\" exists\n\n    google_users(customer: 'my_customer').where(user_full_name: /Batman/).user_ids.each do |user_id|\n      describe google_user(user_key: user_id) do\n        it { should exist }\n      end\n    end\n    \n<br>\n\n## Filter criteria\n\nThis resource supports the following filter criteria:  `user_id`; `user_full_name` and `user_email`. Any of these may be used with `where`, as a block or as a method.\n\n## Properties\n\n*  `user_ids` - an array of google_user identifier integers\n*  `user_full_names` - an array of google_user full name strings\n*  `user_emails`- an array of google_user primary email address strings\n\n<br>\n\n\n## GCP permissions\n\nEnsure the G Suite Admin SDK [Directory API](https://developers.google.com/admin-sdk/directory/) is enabled and you have sufficient privileges to list users."
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_batch_prediction_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_batch_prediction_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_batch_prediction_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_batch_prediction_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_batch_prediction_job` InSpec audit resource to to test a Google Cloud BatchPredictionJob resource.\n\n## Examples\n\n```ruby\n      describe google_vertex_ai_batch_prediction_job(name: ' value_name', region: ' value_region') do\n     it { should exist }\n   end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_batch_prediction_job` resource:\n\n\n  * `create_time`: Output only. Time when the BatchPredictionJob was created.\n\n  * `model_parameters`: The parameters that govern the predictions. The schema of the parameters may be specified via the Model's PredictSchemata's parameters_schema_uri.\n\n  * `instance_config`: Configuration defining how to transform batch prediction input instances to the instances that the Model accepts.\n\n    * `included_fields`: Fields that will be included in the prediction instance that is sent to the Model. If instance_type is `array`, the order of field names in included_fields also determines the order of the values in the array. When included_fields is populated, excluded_fields must be empty. The input must be JSONL with objects at each line, CSV, BigQuery or TfRecord.\n\n    * `instance_type`: The format of the instance that the Model accepts. Vertex AI will convert compatible batch prediction input instance formats to the specified format. Supported values are: * `object`: Each input is converted to JSON object format. * For `bigquery`, each row is converted to an object. * For `jsonl`, each line of the JSONL input must be an object. * Does not apply to `csv`, `file-list`, `tf-record`, or `tf-record-gzip`. * `array`: Each input is converted to JSON array format. * For `bigquery`, each row is converted to an array. The order of columns is determined by the BigQuery column order, unless included_fields is populated. included_fields must be populated for specifying field orders. * For `jsonl`, if each line of the JSONL input is an object, included_fields must be populated for specifying field orders. * Does not apply to `csv`, `file-list`, `tf-record`, or `tf-record-gzip`. If not specified, Vertex AI converts the batch prediction input as follows: * For `bigquery` and `csv`, the behavior is the same as `array`. The order of columns is the same as defined in the file or table, unless included_fields is populated. * For `jsonl`, the prediction instance format is determined by each line of the input. * For `tf-record`/`tf-record-gzip`, each record will be converted to an object in the format of `{\"b64\": }`, where `` is the Base64-encoded string of the content of the record. * For `file-list`, each file in the list will be converted to an object in the format of `{\"b64\": }`, where `` is the Base64-encoded string of the content of the file.\n\n    * `excluded_fields`: Fields that will be excluded in the prediction instance that is sent to the Model. Excluded will be attached to the batch prediction output if key_field is not specified. When excluded_fields is populated, included_fields must be empty. The input must be JSONL with objects at each line, CSV, BigQuery or TfRecord.\n\n    * `key_field`: The name of the field that is considered as a key. The values identified by the key field is not included in the transformed instances that is sent to the Model. This is similar to specifying this name of the field in excluded_fields. In addition, the batch prediction output will not include the instances. Instead the output will only include the value of the key field, in a field named `key` in the output: * For `jsonl` output format, the output will have a `key` field instead of the `instance` field. * For `csv`/`bigquery` output format, the output will have have a `key` column instead of the instance feature columns. The input must be JSONL with objects at each line, CSV, BigQuery or TfRecord.\n\n  * `model_version_id`: Output only. The version ID of the Model that produces the predictions via this job.\n\n  * `dedicated_resources`: A description of resources that are used for performing batch operations, are dedicated to a Model, and need manual configuration.\n\n    * `starting_replica_count`: Immutable. The number of machine replicas used at the start of the batch operation. If not set, Vertex AI decides starting number, not greater than max_replica_count\n\n    * `max_replica_count`: Immutable. The maximum number of machine replicas the batch operation may be scaled to. The default value is 10.\n\n    * `machine_spec`: Specification of a single machine.\n\n      * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n      Possible values:\n        * ACCELERATOR_TYPE_UNSPECIFIED\n        * NVIDIA_TESLA_K80\n        * NVIDIA_TESLA_P100\n        * NVIDIA_TESLA_V100\n        * NVIDIA_TESLA_P4\n        * NVIDIA_TESLA_T4\n        * NVIDIA_TESLA_A100\n        * NVIDIA_A100_80GB\n        * NVIDIA_L4\n        * TPU_V2\n        * TPU_V3\n        * TPU_V4_POD\n\n      * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n      * `accelerator_count`: The number of accelerators to attach to the machine.\n\n  * `output_info`: Further describes this job's output. Supplements output_config.\n\n    * `bigquery_output_dataset`: Output only. The path of the BigQuery dataset created, in `bq://projectId.bqDatasetId` format, into which the prediction output is written.\n\n    * `gcs_output_directory`: Output only. The full path of the Cloud Storage directory created, into which the prediction output is written.\n\n    * `bigquery_output_table`: Output only. The name of the BigQuery table created, in `predictions_` format, into which the prediction output is written. Can be used by UI to generate the BigQuery output path, for example.\n\n  * `disable_container_logging`: For custom-trained Models and AutoML Tabular Models, the container of the DeployedModel instances will send `stderr` and `stdout` streams to Cloud Logging by default. Please note that the logs incur cost, which are subject to [Cloud Logging pricing](https://cloud.google.com/logging/pricing). User can disable container logging by setting this flag to true.\n\n  * `explanation_spec`: Specification of Model explanation.\n\n    * `parameters`: Parameters to configure explaining for Model's predictions.\n\n      * `output_indices`: If populated, only returns attributions that have output_index contained in output_indices. It must be an ndarray of integers, with the same shape of the output it's explaining. If not populated, returns attributions for top_k indices of outputs. If neither top_k nor output_indices is populated, returns the argmax index of the outputs. Only applicable to Models that predict multiple outputs (e,g, multi-class Models that predict multiple classes).\n\n      * `examples`: Example-based explainability that returns the nearest neighbors from the provided dataset.\n\n        * `presets`: Preset configuration for example-based explanations\n\n          * `modality`: The modality of the uploaded model, which automatically configures the distance measurement and feature normalization for the underlying example index and queries. If your model does not precisely fit one of these types, it is okay to choose the closest type.\n          Possible values:\n            * MODALITY_UNSPECIFIED\n            * IMAGE\n            * TEXT\n            * TABULAR\n\n          * `query`: Preset option controlling parameters for speed-precision trade-off when querying for examples. If omitted, defaults to `PRECISE`.\n          Possible values:\n            * PRECISE\n            * FAST\n\n        * `neighbor_count`: The number of neighbors to return when querying for examples.\n\n        * `example_gcs_source`: The Cloud Storage input instances.\n\n          * `gcs_source`: The Google Cloud Storage location for the input content.\n\n            * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n          * `data_format`: The format in which instances are given, if not specified, assume it's JSONL format. Currently only JSONL format is supported.\n          Possible values:\n            * DATA_FORMAT_UNSPECIFIED\n            * JSONL\n\n        * `nearest_neighbor_search_config`: The full configuration for the generated index, the semantics are the same as metadata and should match [NearestNeighborSearchConfig](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-example-based#nearest-neighbor-search-config).\n\n      * `xrai_attribution`: An explanation method that redistributes Integrated Gradients attributions to segmented regions, taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1906.02825 Supported only by image Models.\n\n        * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n          * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n            * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n              * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n              * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n          * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n          * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n        * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is met within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n        * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n          * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n      * `top_k`: If populated, returns attributions for top K indices of outputs (defaults to 1). Only applies to Models that predicts more than one outputs (e,g, multi-class Models). When set to -1, returns explanations for all outputs.\n\n      * `integrated_gradients_attribution`: An attribution method that computes the Aumann-Shapley value taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1703.01365\n\n        * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n        * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n          * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n            * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n              * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n              * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n          * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n          * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n        * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n          * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n      * `sampled_shapley_attribution`: An attribution method that approximates Shapley values for features that contribute to the label being predicted. A sampling strategy is used to approximate the value rather than considering all subsets of features.\n\n        * `path_count`: Required. The number of feature permutations to consider when approximating the Shapley values. Valid range of its value is [1, 50], inclusively.\n\n    * `metadata`: Metadata describing the Model's input and output for explanation.\n\n      * `feature_attributions_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of the feature attributions. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML tabular Models always have this field populated by Vertex AI. Note: The URI given on output may be different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `latent_space_source`: Name of the source to generate embeddings for example based explanations.\n\n      * `outputs`: Required. Map from output names to output metadata. For Vertex AI-provided Tensorflow images, keys can be any user defined string that consists of any UTF-8 characters. For custom images, keys are the name of the output field in the prediction to be explained. Currently only one key is allowed.\n\n        * `additional_properties`: Metadata of the prediction output to be explained.\n\n      * `inputs`: Required. Map from feature names to feature input metadata. Keys are the name of the features. Values are the specification of the feature. An empty InputMetadata is valid. It describes a text feature which has the name specified as the key in ExplanationMetadata.inputs. The baseline of the empty feature is chosen by Vertex AI. For Vertex AI-provided Tensorflow images, the key can be any friendly name of the feature. Once specified, featureAttributions are keyed by this key (if not grouped with another feature). For custom images, the key must match with the key in instance.\n\n        * `additional_properties`: Metadata of the input of a feature. Fields other than InputMetadata.input_baselines are applicable only for Models that are using Vertex AI-provided images for Tensorflow.\n\n  * `end_time`: Output only. Time when the BatchPredictionJob entered any of the following states: `JOB_STATE_SUCCEEDED`, `JOB_STATE_FAILED`, `JOB_STATE_CANCELLED`.\n\n  * `generate_explanation`: Generate explanation with the batch prediction results. When set to `true`, the batch prediction output changes based on the `predictions_format` field of the BatchPredictionJob.output_config object: * `bigquery`: output includes a column named `explanation`. The value is a struct that conforms to the Explanation object. * `jsonl`: The JSON objects on each line include an additional entry keyed `explanation`. The value of the entry is a JSON object that conforms to the Explanation object. * `csv`: Generating explanations for CSV format is not supported. If this field is set to true, either the Model.explanation_spec or explanation_spec must be populated.\n\n  * `resources_consumed`: Statistics information about resource consumption.\n\n    * `replica_hours`: Output only. The number of replica hours used. Note that many replicas may run in parallel, and additionally any given work may be queued for some time. Therefore this value is not strictly related to wall time.\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `input_config`: Configures the input to BatchPredictionJob. See Model.supported_input_storage_formats for Model's supported input formats, and how instances should be expressed via any of them.\n\n    * `instances_format`: Required. The format in which instances are given, must be one of the Model's supported_input_storage_formats.\n\n    * `bigquery_source`: The BigQuery location for the input content.\n\n      * `input_uri`: Required. BigQuery URI to a table, up to 2000 characters long. Accepted forms: * BigQuery path. For example: `bq://projectId.bqDatasetId.bqTableId`.\n\n    * `gcs_source`: The Google Cloud Storage location for the input content.\n\n      * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n  * `unmanaged_container_model`: Contains model information necessary to perform batch prediction without requiring a full model import.\n\n    * `artifact_uri`: The path to the directory containing the Model artifact and any of its supporting files.\n\n    * `predict_schemata`: Contains the schemata used in Model's predictions and explanations via PredictionService.Predict, PredictionService.Explain and BatchPredictionJob.\n\n      * `instance_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single instance, which are used in PredictRequest.instances, ExplainRequest.instances and BatchPredictionJob.input_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `parameters_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the parameters of prediction and explanation via PredictRequest.parameters, ExplainRequest.parameters and BatchPredictionJob.model_parameters. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI, if no parameters are supported, then it is set to an empty string. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `prediction_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single prediction produced by this Model, which are returned via PredictResponse.predictions, ExplainResponse.explanations, and BatchPredictionJob.output_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n    * `container_spec`: Specification of a container for serving predictions. Some fields in this message correspond to fields in the [Kubernetes Container v1 core specification](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `predict_route`: Immutable. HTTP path on the container to send prediction requests to. Vertex AI forwards requests sent using projects.locations.endpoints.predict to this path on the container's IP address and port. Vertex AI then returns the container's response in the API response. For example, if you set this field to `/foo`, then when Vertex AI receives a prediction request, it forwards the request body in a POST request to the `/foo` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n      * `image_uri`: Required. Immutable. URI of the Docker image to be used as the custom container for serving predictions. This URI must identify an image in Artifact Registry or Container Registry. Learn more about the [container publishing requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#publishing), including permissions requirements for the Vertex AI Service Agent. The container image is ingested upon ModelService.UploadModel, stored internally, and this original path is afterwards not used. To learn about the requirements for the Docker image itself, see [Custom container requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#). You can use the URI to one of Vertex AI's [pre-built container images for prediction](https://cloud.google.com/vertex-ai/docs/predictions/pre-built-containers) in this field.\n\n      * `env`: Immutable. List of environment variables to set in the container. After the container starts running, code running in the container can read these environment variables. Additionally, the command and args fields can reference these variables. Later entries in this list can also reference earlier entries. For example, the following example sets the variable `VAR_2` to have the value `foo bar`: ```json [ { \"name\": \"VAR_1\", \"value\": \"foo\" }, { \"name\": \"VAR_2\", \"value\": \"$(VAR_1) bar\" } ] ``` If you switch the order of the variables in the example, then the expansion does not occur. This field corresponds to the `env` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n        * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n        * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n      * `args`: Immutable. Specifies arguments for the command that runs when the container starts. This overrides the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd). Specify this field as an array of executable and arguments, similar to a Docker `CMD`'s \"default parameters\" form. If you don't specify this field but do specify the command field, then the command from the `command` field runs without any additional arguments. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). If you don't specify this field and don't specify the `command` field, then the container's [`ENTRYPOINT`](https://docs.docker.com/engine/reference/builder/#cmd) and `CMD` determine what runs based on their default behavior. See the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `args` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `command`: Immutable. Specifies the command that runs when the container starts. This overrides the container's [ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint). Specify this field as an array of executable and arguments, similar to a Docker `ENTRYPOINT`'s \"exec\" form, not its \"shell\" form. If you do not specify this field, then the container's `ENTRYPOINT` runs, in conjunction with the args field or the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd), if either exists. If this field is not specified and the container does not have an `ENTRYPOINT`, then refer to the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). If you specify this field, then you can also specify the `args` field to provide additional arguments for this command. However, if you specify this field, then the container's `CMD` is ignored. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `command` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `ports`: Immutable. List of ports to expose from the container. Vertex AI sends any prediction requests that it receives to the first port on this list. Vertex AI also sends [liveness and health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#liveness) to this port. If you do not specify this field, it defaults to following value: ```json [ { \"containerPort\": 8080 } ] ``` Vertex AI does not use ports other than the first one listed. This field corresponds to the `ports` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n        * `container_port`: The number of the port to expose on the pod's IP address. Must be a valid port number, between 1 and 65535 inclusive.\n\n      * `health_route`: Immutable. HTTP path on the container to send health checks to. Vertex AI intermittently sends GET requests to this path on the container's IP address and port to check that the container is healthy. Read more about [health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#health). For example, if you set this field to `/bar`, then Vertex AI intermittently sends a GET request to the `/bar` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/ DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n  * `completion_stats`: Success and error statistics of processing multiple entities (for example, DataItems or structured data rows) in batch.\n\n    * `successful_forecast_point_count`: Output only. The number of the successful forecast points that are generated by the forecasting model. This is ONLY used by the forecasting batch prediction.\n\n    * `incomplete_count`: Output only. In cases when enough errors are encountered a job, pipeline, or operation may be failed as a whole. Below is the number of entities for which the processing had not been finished (either in successful or failed state). Set to -1 if the number is unknown (for example, the operation failed before the total entity number could be collected).\n\n    * `failed_count`: Output only. The number of entities for which any error was encountered.\n\n    * `successful_count`: Output only. The number of entities that had been processed successfully.\n\n  * `start_time`: Output only. Time when the BatchPredictionJob for the first time entered the `JOB_STATE_RUNNING` state.\n\n  * `manual_batch_tuning_parameters`: Manual batch tuning parameters.\n\n    * `batch_size`: Immutable. The number of the records (e.g. instances) of the operation given in each batch to a machine replica. Machine type, and size of a single record should be considered when setting this parameter, higher value speeds up the batch operation's execution, but too high value will result in a whole batch not fitting in a machine's memory, and the whole operation will fail. The default value is 64.\n\n  * `update_time`: Output only. Time when the BatchPredictionJob was most recently updated.\n\n  * `name`: Output only. Resource name of the BatchPredictionJob.\n\n  * `labels`: The labels with user-defined metadata to organize BatchPredictionJobs. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `state`: Output only. The detailed state of the job.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * JOB_STATE_QUEUED\n    * JOB_STATE_PENDING\n    * JOB_STATE_RUNNING\n    * JOB_STATE_SUCCEEDED\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_PAUSED\n    * JOB_STATE_EXPIRED\n    * JOB_STATE_UPDATING\n    * JOB_STATE_PARTIALLY_SUCCEEDED\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `partial_failures`: Output only. Partial failures encountered. For example, single files that can't be read. This field never exceeds 20 entries. Status details fields contain standard Google Cloud error details.\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `model`: The name of the Model resource that produces the predictions via this job, must share the same ancestor Location. Starting this job has no impact on any existing deployments of the Model and their resources. Exactly one of model and unmanaged_container_model must be set. The model resource name may contain version id or version alias to specify the version. Example: `projects/{project}/locations/{location}/models/{model}@2` or `projects/{project}/locations/{location}/models/{model}@golden` if no version is specified, the default version will be deployed. The model resource could also be a publisher model. Example: `publishers/{publisher}/models/{model}` or `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`\n\n  * `output_config`: Configures the output of BatchPredictionJob. See Model.supported_output_storage_formats for supported output formats, and how predictions are expressed via any of them.\n\n    * `gcs_destination`: The Google Cloud Storage location where the output is to be written to.\n\n      * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n    * `predictions_format`: Required. The format in which Vertex AI gives the predictions, must be one of the Model's supported_output_storage_formats.\n\n    * `bigquery_destination`: The BigQuery location for the output content.\n\n      * `output_uri`: Required. BigQuery URI to a project or table, up to 2000 characters long. When only the project is specified, the Dataset and Table is created. When the full table reference is specified, the Dataset must exist and table must not exist. Accepted forms: * BigQuery path. For example: `bq://projectId` or `bq://projectId.bqDatasetId` or `bq://projectId.bqDatasetId.bqTableId`.\n\n  * `display_name`: Required. The user-defined name of this BatchPredictionJob.\n\n  * `service_account`: The service account that the DeployedModel's container runs as. If not specified, a system generated one will be used, which has minimal permissions and the custom container, if used, may not have enough permission to access other Google Cloud resources. Users deploying the Model must have the `iam.serviceAccounts.actAs` permission on this service account.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_batch_prediction_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_batch_prediction_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_batch_prediction_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_batch_prediction_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_batch_prediction_jobs` InSpec audit resource to to test a Google Cloud BatchPredictionJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_batch_prediction_jobs(parent: ' value_parent', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_batch_prediction_jobs` resource:\n\nSee [google_vertex_ai_batch_prediction_job](google_vertex_ai_batch_prediction_job) for more detailed information.\n\n  * `create_times`: an array of `google_vertex_ai_batch_prediction_job` create_time\n  * `model_parameters`: an array of `google_vertex_ai_batch_prediction_job` model_parameters\n  * `instance_configs`: an array of `google_vertex_ai_batch_prediction_job` instance_config\n  * `model_version_ids`: an array of `google_vertex_ai_batch_prediction_job` model_version_id\n  * `dedicated_resources`: an array of `google_vertex_ai_batch_prediction_job` dedicated_resources\n  * `output_infos`: an array of `google_vertex_ai_batch_prediction_job` output_info\n  * `disable_container_loggings`: an array of `google_vertex_ai_batch_prediction_job` disable_container_logging\n  * `explanation_specs`: an array of `google_vertex_ai_batch_prediction_job` explanation_spec\n  * `end_times`: an array of `google_vertex_ai_batch_prediction_job` end_time\n  * `generate_explanations`: an array of `google_vertex_ai_batch_prediction_job` generate_explanation\n  * `resources_consumeds`: an array of `google_vertex_ai_batch_prediction_job` resources_consumed\n  * `errors`: an array of `google_vertex_ai_batch_prediction_job` error\n  * `input_configs`: an array of `google_vertex_ai_batch_prediction_job` input_config\n  * `unmanaged_container_models`: an array of `google_vertex_ai_batch_prediction_job` unmanaged_container_model\n  * `completion_stats`: an array of `google_vertex_ai_batch_prediction_job` completion_stats\n  * `start_times`: an array of `google_vertex_ai_batch_prediction_job` start_time\n  * `manual_batch_tuning_parameters`: an array of `google_vertex_ai_batch_prediction_job` manual_batch_tuning_parameters\n  * `update_times`: an array of `google_vertex_ai_batch_prediction_job` update_time\n  * `names`: an array of `google_vertex_ai_batch_prediction_job` name\n  * `labels`: an array of `google_vertex_ai_batch_prediction_job` labels\n  * `states`: an array of `google_vertex_ai_batch_prediction_job` state\n  * `encryption_specs`: an array of `google_vertex_ai_batch_prediction_job` encryption_spec\n  * `partial_failures`: an array of `google_vertex_ai_batch_prediction_job` partial_failures\n  * `models`: an array of `google_vertex_ai_batch_prediction_job` model\n  * `output_configs`: an array of `google_vertex_ai_batch_prediction_job` output_config\n  * `display_names`: an array of `google_vertex_ai_batch_prediction_job` display_name\n  * `service_accounts`: an array of `google_vertex_ai_batch_prediction_job` service_account\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_custom_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_custom_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_custom_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_custom_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_custom_job` InSpec audit resource to to test a Google Cloud CustomJob resource.\n\n## Examples\n\n```ruby\n      describe google_vertex_ai_custom_job(name: ' value_name', region: ' value_region') do\n     it { should exist }\n   end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_custom_job` resource:\n\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `web_access_uris`: Output only. URIs for accessing [interactive shells](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) (one URI for each training node). Only available if job_spec.enable_web_access is `true`. The keys are names of each node in the training job; for example, `workerpool0-0` for the primary node, `workerpool1-0` for the first node in the second worker pool, and `workerpool1-1` for the second node in the second worker pool. The values are the URIs for each node's interactive shell.\n\n    * `additional_properties`: \n\n  * `job_spec`: Represents the spec of a CustomJob.\n\n    * `worker_pool_specs`: Required. The spec of the worker pools including machine type and Docker image. All worker pools except the first one are optional and can be skipped by providing an empty value.\n\n      * `container_spec`: The spec of a Container.\n\n        * `env`: Environment variables to be passed to the container. Maximum limit is 100.\n\n          * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n          * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n        * `args`: The arguments to be passed when starting the container.\n\n        * `command`: The command to be invoked when the container is started. It overrides the entrypoint instruction in Dockerfile when provided.\n\n        * `image_uri`: Required. The URI of a container image in the Container Registry that is to be run on each worker replica.\n\n      * `machine_spec`: Specification of a single machine.\n\n        * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n        Possible values:\n          * ACCELERATOR_TYPE_UNSPECIFIED\n          * NVIDIA_TESLA_K80\n          * NVIDIA_TESLA_P100\n          * NVIDIA_TESLA_V100\n          * NVIDIA_TESLA_P4\n          * NVIDIA_TESLA_T4\n          * NVIDIA_TESLA_A100\n          * NVIDIA_A100_80GB\n          * NVIDIA_L4\n          * TPU_V2\n          * TPU_V3\n          * TPU_V4_POD\n\n        * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n        * `accelerator_count`: The number of accelerators to attach to the machine.\n\n      * `replica_count`: Optional. The number of worker replicas to use for this worker pool.\n\n      * `nfs_mounts`: Optional. List of NFS mount spec.\n\n        * `path`: Required. Source path exported from NFS server. Has to start with '/', and combined with the ip address, it indicates the source mount path in the form of `server:path`\n\n        * `mount_point`: Required. Destination mount path. The NFS will be mounted for the user under /mnt/nfs/\n\n        * `server`: Required. IP address of the NFS server.\n\n      * `python_package_spec`: The spec of a Python packaged code.\n\n        * `package_uris`: Required. The Google Cloud Storage location of the Python package files which are the training program and its dependent packages. The maximum number of package URIs is 100.\n\n        * `env`: Environment variables to be passed to the python module. Maximum limit is 100.\n\n          * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n          * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n        * `executor_image_uri`: Required. The URI of a container image in Artifact Registry that will run the provided Python package. Vertex AI provides a wide range of executor images with pre-installed packages to meet users' various use cases. See the list of [pre-built containers for training](https://cloud.google.com/vertex-ai/docs/training/pre-built-containers). You must use an image from this list.\n\n        * `args`: Command line arguments to be passed to the Python task.\n\n        * `python_module`: Required. The Python module name to run after installing the packages.\n\n      * `disk_spec`: Represents the spec of disk options.\n\n        * `boot_disk_type`: Type of the boot disk (default is \"pd-ssd\"). Valid values: \"pd-ssd\" (Persistent Disk Solid State Drive) or \"pd-standard\" (Persistent Disk Hard Disk Drive).\n\n        * `boot_disk_size_gb`: Size in GB of the boot disk (default is 100GB).\n\n    * `enable_web_access`: Optional. Whether you want Vertex AI to enable [interactive shell access](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) to training containers. If set to `true`, you can access interactive shells at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n    * `tensorboard`: Optional. The name of a Vertex AI Tensorboard resource to which this CustomJob will upload Tensorboard logs. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}`\n\n    * `experiment`: Optional. The Experiment associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}`\n\n    * `experiment_run`: Optional. The Experiment Run associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}-{experiment-run-name}`\n\n    * `scheduling`: All parameters related to queuing and scheduling of custom jobs.\n\n      * `disable_retries`: Optional. Indicates if the job should retry for internal errors after the job starts running. If true, overrides `Scheduling.restart_job_on_worker_restart` to false.\n\n      * `timeout`: The maximum job running time. The default is 7 days.\n\n      * `restart_job_on_worker_restart`: Restarts the entire CustomJob if a worker gets restarted. This feature can be used by distributed training jobs that are not resilient to workers leaving and joining a job.\n\n    * `enable_dashboard_access`: Optional. Whether you want Vertex AI to enable access to the customized dashboard in training chief container. If set to `true`, you can access the dashboard at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n    * `service_account`: Specifies the service account for workload run-as account. Users submitting jobs must have act-as permission on this run-as account. If unspecified, the [Vertex AI Custom Code Service Agent](https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents) for the CustomJob's project is used.\n\n    * `base_output_directory`: The Google Cloud Storage location where the output is to be written to.\n\n      * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n    * `reserved_ip_ranges`: Optional. A list of names for the reserved ip ranges under the VPC network that can be used for this job. If set, we will deploy the job within the provided ip ranges. Otherwise, the job will be deployed to any ip ranges under the provided VPC network. Example: ['vertex-ai-ip-range'].\n\n    * `network`: Optional. The full name of the Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the Job should be peered. For example, `projects/12345/global/networks/myVPC`. [Format](/compute/docs/reference/rest/v1/networks/insert) is of the form `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in `12345`, and {network} is a network name. To specify this field, you must have already [configured VPC Network Peering for Vertex AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering). If this field is left unspecified, the job is not peered with any network.\n\n  * `start_time`: Output only. Time when the CustomJob for the first time entered the `JOB_STATE_RUNNING` state.\n\n  * `labels`: The labels with user-defined metadata to organize CustomJobs. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `create_time`: Output only. Time when the CustomJob was created.\n\n  * `update_time`: Output only. Time when the CustomJob was most recently updated.\n\n  * `end_time`: Output only. Time when the CustomJob entered any of the following states: `JOB_STATE_SUCCEEDED`, `JOB_STATE_FAILED`, `JOB_STATE_CANCELLED`.\n\n  * `state`: Output only. The detailed state of the job.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * JOB_STATE_QUEUED\n    * JOB_STATE_PENDING\n    * JOB_STATE_RUNNING\n    * JOB_STATE_SUCCEEDED\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_PAUSED\n    * JOB_STATE_EXPIRED\n    * JOB_STATE_UPDATING\n    * JOB_STATE_PARTIALLY_SUCCEEDED\n\n  * `display_name`: Required. The display name of the CustomJob. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `name`: Output only. Resource name of a CustomJob.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_custom_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_custom_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_custom_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_custom_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_custom_jobs` InSpec audit resource to to test a Google Cloud CustomJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_custom_job(parent: ' value_parent', region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_custom_jobs` resource:\n\nSee [google_vertex_ai_custom_job](google_vertex_ai_custom_job) for more detailed information.\n\n  * `errors`: an array of `google_vertex_ai_custom_job` error\n  * `web_access_uris`: an array of `google_vertex_ai_custom_job` web_access_uris\n  * `job_specs`: an array of `google_vertex_ai_custom_job` job_spec\n  * `start_times`: an array of `google_vertex_ai_custom_job` start_time\n  * `labels`: an array of `google_vertex_ai_custom_job` labels\n  * `encryption_specs`: an array of `google_vertex_ai_custom_job` encryption_spec\n  * `create_times`: an array of `google_vertex_ai_custom_job` create_time\n  * `update_times`: an array of `google_vertex_ai_custom_job` update_time\n  * `end_times`: an array of `google_vertex_ai_custom_job` end_time\n  * `states`: an array of `google_vertex_ai_custom_job` state\n  * `display_names`: an array of `google_vertex_ai_custom_job` display_name\n  * `names`: an array of `google_vertex_ai_custom_job` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_dataset.md",
    "content": "+++\ntitle = \"google_vertex_ai_dataset resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_dataset\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_dataset resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_dataset` InSpec audit resource to to test a Google Cloud Dataset resource.\n\n## Examples\n\n```ruby\n      describe google_vertex_ai_dataset(name: ' ', region: ' ') do\n     it { should exist }\n   end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_dataset` resource:\n\n\n  * `saved_queries`: All SavedQueries belong to the Dataset will be returned in List/Get Dataset response. The annotation_specs field will not be populated except for UI cases which will only use annotation_spec_count. In CreateDataset request, a SavedQuery is created together if this field is set, up to one SavedQuery can be set in CreateDatasetRequest. The SavedQuery should not contain any AnnotationSpec.\n\n    * `annotation_spec_count`: Output only. Number of AnnotationSpecs in the context of the SavedQuery.\n\n    * `update_time`: Output only. Timestamp when SavedQuery was last updated.\n\n    * `support_automl_training`: Output only. If the Annotations belonging to the SavedQuery can be used for AutoML training.\n\n    * `metadata`: Some additional information about the SavedQuery.\n\n    * `problem_type`: Required. Problem type of the SavedQuery. Allowed values: * IMAGE_CLASSIFICATION_SINGLE_LABEL * IMAGE_CLASSIFICATION_MULTI_LABEL * IMAGE_BOUNDING_POLY * IMAGE_BOUNDING_BOX * TEXT_CLASSIFICATION_SINGLE_LABEL * TEXT_CLASSIFICATION_MULTI_LABEL * TEXT_EXTRACTION * TEXT_SENTIMENT * VIDEO_CLASSIFICATION * VIDEO_OBJECT_TRACKING\n\n    * `name`: Output only. Resource name of the SavedQuery.\n\n    * `create_time`: Output only. Timestamp when this SavedQuery was created.\n\n    * `etag`: Used to perform a consistent read-modify-write update. If not set, a blind \"overwrite\" update happens.\n\n    * `display_name`: Required. The user-defined name of the SavedQuery. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n    * `annotation_filter`: Output only. Filters on the Annotations in the dataset.\n\n  * `create_time`: Output only. Timestamp when this Dataset was created.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `name`: Output only. The resource name of the Dataset.\n\n  * `metadata`: Required. Additional information about the Dataset.\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `description`: The description of the Dataset.\n\n  * `labels`: The labels with user-defined metadata to organize your Datasets. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Dataset (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable. Following system labels exist for each Dataset: * \"aiplatform.googleapis.com/dataset_metadata_schema\": output only, its value is the metadata_schema's title.\n\n    * `additional_properties`: \n\n  * `metadata_schema_uri`: Required. Points to a YAML file stored on Google Cloud Storage describing additional information about the Dataset. The schema is defined as an OpenAPI 3.0.2 Schema Object. The schema files that can be used here are found in gs://google-cloud-aiplatform/schema/dataset/metadata/.\n\n  * `metadata_artifact`: Output only. The resource name of the Artifact that was created in MetadataStore when creating the Dataset. The Artifact resource name pattern is `projects/{project}/locations/{location}/metadataStores/{metadata_store}/artifacts/{artifact}`.\n\n  * `update_time`: Output only. Timestamp when this Dataset was last updated.\n\n  * `data_item_count`: Output only. The number of DataItems in this Dataset. Only apply for non-structured Dataset.\n\n  * `display_name`: Required. The user-defined name of the Dataset. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_dataset_data_item_annotations.md",
    "content": "+++\ntitle = \"google_vertex_ai_dataset_data_item_annotations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_dataset_data_item_annotations\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_dataset_data_item_annotations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_dataset_data_item_annotations` InSpec audit resource to to test a Google Cloud DatasetDataItemAnnotation resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_dataset_data_item_annotations(parent: \"projects/#{gcp_project_id}/locations/#{dataset_data_item_annotation['region']}/datasets/#{dataset_data_item_annotation['dataset']}/dataItems/#{dataset_data_item_annotation['dataItem']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_dataset_data_item_annotations` resource:\n\nSee [google_vertex_ai_dataset_data_item_annotation](google_vertex_ai_dataset_data_item_annotation) for more detailed information.\n\n  * `payload_schema_uris`: an array of `google_vertex_ai_dataset_data_item_annotation` payload_schema_uri\n  * `create_times`: an array of `google_vertex_ai_dataset_data_item_annotation` create_time\n  * `etags`: an array of `google_vertex_ai_dataset_data_item_annotation` etag\n  * `labels`: an array of `google_vertex_ai_dataset_data_item_annotation` labels\n  * `update_times`: an array of `google_vertex_ai_dataset_data_item_annotation` update_time\n  * `payloads`: an array of `google_vertex_ai_dataset_data_item_annotation` payload\n  * `annotation_sources`: an array of `google_vertex_ai_dataset_data_item_annotation` annotation_source\n  * `names`: an array of `google_vertex_ai_dataset_data_item_annotation` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_datasets.md",
    "content": "+++\ntitle = \"google_vertex_ai_datasets resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_datasets\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_datasets resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_datasets` InSpec audit resource to to test a Google Cloud Dataset resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_dataset(parent: ' ', region: ' ') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_datasets` resource:\n\nSee [google_vertex_ai_dataset](google_vertex_ai_dataset) for more detailed information.\n\n  * `saved_queries`: an array of `google_vertex_ai_dataset` saved_queries\n  * `create_times`: an array of `google_vertex_ai_dataset` create_time\n  * `encryption_specs`: an array of `google_vertex_ai_dataset` encryption_spec\n  * `names`: an array of `google_vertex_ai_dataset` name\n  * `metadata`: an array of `google_vertex_ai_dataset` metadata\n  * `etags`: an array of `google_vertex_ai_dataset` etag\n  * `descriptions`: an array of `google_vertex_ai_dataset` description\n  * `labels`: an array of `google_vertex_ai_dataset` labels\n  * `metadata_schema_uris`: an array of `google_vertex_ai_dataset` metadata_schema_uri\n  * `metadata_artifacts`: an array of `google_vertex_ai_dataset` metadata_artifact\n  * `update_times`: an array of `google_vertex_ai_dataset` update_time\n  * `data_item_counts`: an array of `google_vertex_ai_dataset` data_item_count\n  * `display_names`: an array of `google_vertex_ai_dataset` display_name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_datasets_annotation_spec.md",
    "content": "+++\ntitle = \"google_vertex_ai_datasets_annotation_spec resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_datasets_annotation_spec\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_datasets_annotation_spec resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_datasets_annotation_spec` InSpec audit resource to to test a Google Cloud DatasetsAnnotationSpec resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_datasets_annotation_spec(name: \"projects/#{gcp_project_id}/locations/#{datasets_annotation_spec['region']}/datasets/#{datasets_annotation_spec['dataset']}/annotationSpecs/#{datasets_annotation_spec['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('name') { should cmp 'value_name' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\nend\n\ndescribe google_vertex_ai_datasets_annotation_spec(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_datasets_annotation_spec` resource:\n\n\n  * `display_name`: Required. The user-defined name of the AnnotationSpec. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `name`: Output only. Resource name of the AnnotationSpec.\n\n  * `etag`: Optional. Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `create_time`: Output only. Timestamp when this AnnotationSpec was created.\n\n  * `update_time`: Output only. Timestamp when AnnotationSpec was last updated.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_datasets_data_items.md",
    "content": "+++\ntitle = \"google_vertex_ai_datasets_data_items resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_datasets_data_items\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_datasets_data_items resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_datasets_data_items` InSpec audit resource to to test a Google Cloud DatasetsDataItem resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_datasets_data_items(parent: \"projects/#{gcp_project_id}/locations/#{datasets_data_item['region']}/datasets/#{datasets_data_item['dataset']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_datasets_data_items` resource:\n\nSee [google_vertex_ai_datasets_data_item](google_vertex_ai_datasets_data_item) for more detailed information.\n\n  * `update_times`: an array of `google_vertex_ai_datasets_data_item` update_time\n  * `etags`: an array of `google_vertex_ai_datasets_data_item` etag\n  * `names`: an array of `google_vertex_ai_datasets_data_item` name\n  * `create_times`: an array of `google_vertex_ai_datasets_data_item` create_time\n  * `payloads`: an array of `google_vertex_ai_datasets_data_item` payload\n  * `labels`: an array of `google_vertex_ai_datasets_data_item` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_datasets_saved_queries.md",
    "content": "+++\ntitle = \"google_vertex_ai_datasets_saved_queries resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_datasets_saved_queries\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_datasets_saved_queries resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_datasets_saved_queries` InSpec audit resource to to test a Google Cloud DatasetsSavedQuery resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_datasets_saved_queries(parent: \"projects/#{gcp_project_id}/locations/#{datasets_saved_query['region']}/datasets/#{datasets_saved_query['dataset']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_datasets_saved_queries` resource:\n\nSee [google_vertex_ai_datasets_saved_query](google_vertex_ai_datasets_saved_query) for more detailed information.\n\n  * `annotation_spec_counts`: an array of `google_vertex_ai_datasets_saved_query` annotation_spec_count\n  * `update_times`: an array of `google_vertex_ai_datasets_saved_query` update_time\n  * `support_automl_trainings`: an array of `google_vertex_ai_datasets_saved_query` support_automl_training\n  * `metadata`: an array of `google_vertex_ai_datasets_saved_query` metadata\n  * `problem_types`: an array of `google_vertex_ai_datasets_saved_query` problem_type\n  * `names`: an array of `google_vertex_ai_datasets_saved_query` name\n  * `create_times`: an array of `google_vertex_ai_datasets_saved_query` create_time\n  * `etags`: an array of `google_vertex_ai_datasets_saved_query` etag\n  * `display_names`: an array of `google_vertex_ai_datasets_saved_query` display_name\n  * `annotation_filters`: an array of `google_vertex_ai_datasets_saved_query` annotation_filter\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_endpoint.md",
    "content": "+++\ntitle = \"google_vertex_ai_endpoint resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_endpoint\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_endpoint resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_endpoint` InSpec audit resource to to test a Google Cloud Endpoint resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_endpoint(name: \"projects/#{gcp_project_id}/locations/#{endpoint['region']}/endpoints/#{endpoint['name']}\", region: ' value_region') do\nit { should exist }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('model_deployment_monitoring_job') { should cmp 'value_modeldeploymentmonitoringjob' }\n\tits('description') { should cmp 'value_description' }\n\tits('network') { should cmp 'value_network' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_endpoint(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_endpoint` resource:\n\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `enable_private_service_connect`: Deprecated: If true, expose the Endpoint via private service connect. Only one of the fields, network or enable_private_service_connect, can be set.\n\n  * `update_time`: Output only. Timestamp when this Endpoint was last updated.\n\n  * `model_deployment_monitoring_job`: Output only. Resource name of the Model Monitoring job associated with this Endpoint if monitoring is enabled by JobService.CreateModelDeploymentMonitoringJob. Format: `projects/{project}/locations/{location}/modelDeploymentMonitoringJobs/{model_deployment_monitoring_job}`\n\n  * `description`: The description of the Endpoint.\n\n  * `deployed_models`: Output only. The models deployed in this Endpoint. To add or remove DeployedModels use EndpointService.DeployModel and EndpointService.UndeployModel respectively.\n\n    * `create_time`: Output only. Timestamp when the DeployedModel was created.\n\n    * `private_endpoints`: PrivateEndpoints proto is used to provide paths for users to send requests privately. To send request via private service access, use predict_http_uri, explain_http_uri or health_http_uri. To send request via private service connect, use service_attachment.\n\n      * `health_http_uri`: Output only. Http(s) path to send health check requests.\n\n      * `explain_http_uri`: Output only. Http(s) path to send explain requests.\n\n      * `predict_http_uri`: Output only. Http(s) path to send prediction requests.\n\n      * `service_attachment`: Output only. The name of the service attachment resource. Populated if private service connect is enabled.\n\n    * `disable_container_logging`: For custom-trained Models and AutoML Tabular Models, the container of the DeployedModel instances will send `stderr` and `stdout` streams to Cloud Logging by default. Please note that the logs incur cost, which are subject to [Cloud Logging pricing](https://cloud.google.com/logging/pricing). User can disable container logging by setting this flag to true.\n\n    * `model_version_id`: Output only. The version ID of the model that is deployed.\n\n    * `explanation_spec`: Specification of Model explanation.\n\n      * `parameters`: Parameters to configure explaining for Model's predictions.\n\n        * `output_indices`: If populated, only returns attributions that have output_index contained in output_indices. It must be an ndarray of integers, with the same shape of the output it's explaining. If not populated, returns attributions for top_k indices of outputs. If neither top_k nor output_indices is populated, returns the argmax index of the outputs. Only applicable to Models that predict multiple outputs (e,g, multi-class Models that predict multiple classes).\n\n        * `examples`: Example-based explainability that returns the nearest neighbors from the provided dataset.\n\n          * `presets`: Preset configuration for example-based explanations\n\n            * `modality`: The modality of the uploaded model, which automatically configures the distance measurement and feature normalization for the underlying example index and queries. If your model does not precisely fit one of these types, it is okay to choose the closest type.\n            Possible values:\n              * MODALITY_UNSPECIFIED\n              * IMAGE\n              * TEXT\n              * TABULAR\n\n            * `query`: Preset option controlling parameters for speed-precision trade-off when querying for examples. If omitted, defaults to `PRECISE`.\n            Possible values:\n              * PRECISE\n              * FAST\n\n          * `neighbor_count`: The number of neighbors to return when querying for examples.\n\n          * `example_gcs_source`: The Cloud Storage input instances.\n\n            * `gcs_source`: The Google Cloud Storage location for the input content.\n\n              * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n            * `data_format`: The format in which instances are given, if not specified, assume it's JSONL format. Currently only JSONL format is supported.\n            Possible values:\n              * DATA_FORMAT_UNSPECIFIED\n              * JSONL\n\n          * `nearest_neighbor_search_config`: The full configuration for the generated index, the semantics are the same as metadata and should match [NearestNeighborSearchConfig](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-example-based#nearest-neighbor-search-config).\n\n        * `xrai_attribution`: An explanation method that redistributes Integrated Gradients attributions to segmented regions, taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1906.02825 Supported only by image Models.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is met within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `top_k`: If populated, returns attributions for top K indices of outputs (defaults to 1). Only applies to Models that predicts more than one outputs (e,g, multi-class Models). When set to -1, returns explanations for all outputs.\n\n        * `integrated_gradients_attribution`: An attribution method that computes the Aumann-Shapley value taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1703.01365\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `sampled_shapley_attribution`: An attribution method that approximates Shapley values for features that contribute to the label being predicted. A sampling strategy is used to approximate the value rather than considering all subsets of features.\n\n          * `path_count`: Required. The number of feature permutations to consider when approximating the Shapley values. Valid range of its value is [1, 50], inclusively.\n\n      * `metadata`: Metadata describing the Model's input and output for explanation.\n\n        * `feature_attributions_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of the feature attributions. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML tabular Models always have this field populated by Vertex AI. Note: The URI given on output may be different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n        * `latent_space_source`: Name of the source to generate embeddings for example based explanations.\n\n        * `outputs`: Required. Map from output names to output metadata. For Vertex AI-provided Tensorflow images, keys can be any user defined string that consists of any UTF-8 characters. For custom images, keys are the name of the output field in the prediction to be explained. Currently only one key is allowed.\n\n          * `additional_properties`: Metadata of the prediction output to be explained.\n\n        * `inputs`: Required. Map from feature names to feature input metadata. Keys are the name of the features. Values are the specification of the feature. An empty InputMetadata is valid. It describes a text feature which has the name specified as the key in ExplanationMetadata.inputs. The baseline of the empty feature is chosen by Vertex AI. For Vertex AI-provided Tensorflow images, the key can be any friendly name of the feature. Once specified, featureAttributions are keyed by this key (if not grouped with another feature). For custom images, the key must match with the key in instance.\n\n          * `additional_properties`: Metadata of the input of a feature. Fields other than InputMetadata.input_baselines are applicable only for Models that are using Vertex AI-provided images for Tensorflow.\n\n    * `enable_access_logging`: If true, online prediction access logs are sent to Cloud Logging. These logs are like standard server access logs, containing information like timestamp and latency for each prediction request. Note that logs may incur a cost, especially if your project receives prediction requests at a high queries per second rate (QPS). Estimate your costs before enabling this option.\n\n    * `service_account`: The service account that the DeployedModel's container runs as. Specify the email address of the service account. If this service account is not specified, the container runs as a service account that doesn't have access to the resource project. Users deploying the Model must have the `iam.serviceAccounts.actAs` permission on this service account.\n\n    * `dedicated_resources`: A description of resources that are dedicated to a DeployedModel, and that need a higher degree of manual configuration.\n\n      * `machine_spec`: Specification of a single machine.\n\n        * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n        Possible values:\n          * ACCELERATOR_TYPE_UNSPECIFIED\n          * NVIDIA_TESLA_K80\n          * NVIDIA_TESLA_P100\n          * NVIDIA_TESLA_V100\n          * NVIDIA_TESLA_P4\n          * NVIDIA_TESLA_T4\n          * NVIDIA_TESLA_A100\n          * NVIDIA_A100_80GB\n          * NVIDIA_L4\n          * TPU_V2\n          * TPU_V3\n          * TPU_V4_POD\n\n        * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n        * `accelerator_count`: The number of accelerators to attach to the machine.\n\n      * `max_replica_count`: Immutable. The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, will use min_replica_count as the default value. The value of this field impacts the charge against Vertex CPU and GPU quotas. Specifically, you will be charged for (max_replica_count * number of cores in the selected machine type) and (max_replica_count * number of GPUs per replica in the selected machine type).\n\n      * `autoscaling_metric_specs`: Immutable. The metric specifications that overrides a resource utilization metric (CPU utilization, accelerator's duty cycle, and so on) target value (default to 60 if not set). At most one entry is allowed per metric. If machine_spec.accelerator_count is above 0, the autoscaling will be based on both CPU utilization and accelerator's duty cycle metrics and scale up when either metrics exceeds its target value while scale down if both metrics are under their target value. The default target value is 60 for both metrics. If machine_spec.accelerator_count is 0, the autoscaling will be based on CPU utilization metric only with default target value 60 if not explicitly set. For example, in the case of Online Prediction, if you want to override target CPU utilization to 80, you should set autoscaling_metric_specs.metric_name to `aiplatform.googleapis.com/prediction/online/cpu/utilization` and autoscaling_metric_specs.target to `80`.\n\n        * `target`: The target resource utilization in percentage (1% - 100%) for the given metric; once the real usage deviates from the target by a certain percentage, the machine replicas change. The default value is 60 (representing 60%) if not provided.\n\n        * `metric_name`: Required. The resource metric name. Supported metrics: * For Online Prediction: * `aiplatform.googleapis.com/prediction/online/accelerator/duty_cycle` * `aiplatform.googleapis.com/prediction/online/cpu/utilization`\n\n      * `min_replica_count`: Required. Immutable. The minimum number of machine replicas this DeployedModel will be always deployed on. This value must be greater than or equal to 1. If traffic against the DeployedModel increases, it may dynamically be deployed onto more replicas, and as traffic decreases, some of these extra replicas may be freed.\n\n    * `automatic_resources`: A description of resources that to large degree are decided by Vertex AI, and require only a modest additional configuration. Each Model supporting these resources documents its specific guidelines.\n\n      * `max_replica_count`: Immutable. The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, a no upper bound for scaling under heavy traffic will be assume, though Vertex AI may be unable to scale beyond certain replica number.\n\n      * `min_replica_count`: Immutable. The minimum number of replicas this DeployedModel will be always deployed on. If traffic against it increases, it may dynamically be deployed onto more replicas up to max_replica_count, and as traffic decreases, some of these extra replicas may be freed. If the requested value is too large, the deployment will error.\n\n    * `display_name`: The display name of the DeployedModel. If not provided upon creation, the Model's display_name is used.\n\n    * `model`: Required. The resource name of the Model that this is the deployment of. Note that the Model may be in a different location than the DeployedModel's Endpoint. The resource name may contain version id or version alias to specify the version. Example: `projects/{project}/locations/{location}/models/{model}@2` or `projects/{project}/locations/{location}/models/{model}@golden` if no version is specified, the default version will be deployed.\n\n    * `id`: Immutable. The ID of the DeployedModel. If not provided upon deployment, Vertex AI will generate a value for this ID. This value should be 1-10 characters, and valid characters are /[0-9]/.\n\n  * `network`: Optional. The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name.\n\n  * `traffic_split`: A map from a DeployedModel's ID to the percentage of this Endpoint's traffic that should be forwarded to that DeployedModel. If a DeployedModel's ID is not listed in this map, then it receives no traffic. The traffic percentage values must add up to 100, or map must be empty if the Endpoint is to not accept any traffic at a moment.\n\n    * `additional_properties`: \n\n  * `labels`: The labels with user-defined metadata to organize your Endpoints. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `display_name`: Required. The display name of the Endpoint. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `predict_request_response_logging_config`: Configuration for logging request-response to a BigQuery table.\n\n    * `sampling_rate`: Percentage of requests to be logged, expressed as a fraction in range(0,1].\n\n    * `enabled`: If logging is enabled or not.\n\n    * `bigquery_destination`: The BigQuery location for the output content.\n\n      * `output_uri`: Required. BigQuery URI to a project or table, up to 2000 characters long. When only the project is specified, the Dataset and Table is created. When the full table reference is specified, the Dataset must exist and table must not exist. Accepted forms: * BigQuery path. For example: `bq://projectId` or `bq://projectId.bqDatasetId` or `bq://projectId.bqDatasetId.bqTableId`.\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `create_time`: Output only. Timestamp when this Endpoint was created.\n\n  * `name`: Output only. The resource name of the Endpoint.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_endpoints.md",
    "content": "+++\ntitle = \"google_vertex_ai_endpoints resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_endpoints\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_endpoints resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_endpoints` InSpec audit resource to to test a Google Cloud Endpoint resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_endpoints(parent: \"projects/#{gcp_project_id}/locations/#{endpoint['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_endpoints` resource:\n\nSee [google_vertex_ai_endpoint](google_vertex_ai_endpoint) for more detailed information.\n\n  * `encryption_specs`: an array of `google_vertex_ai_endpoint` encryption_spec\n  * `enable_private_service_connects`: an array of `google_vertex_ai_endpoint` enable_private_service_connect\n  * `update_times`: an array of `google_vertex_ai_endpoint` update_time\n  * `model_deployment_monitoring_jobs`: an array of `google_vertex_ai_endpoint` model_deployment_monitoring_job\n  * `descriptions`: an array of `google_vertex_ai_endpoint` description\n  * `deployed_models`: an array of `google_vertex_ai_endpoint` deployed_models\n  * `networks`: an array of `google_vertex_ai_endpoint` network\n  * `traffic_splits`: an array of `google_vertex_ai_endpoint` traffic_split\n  * `labels`: an array of `google_vertex_ai_endpoint` labels\n  * `display_names`: an array of `google_vertex_ai_endpoint` display_name\n  * `predict_request_response_logging_configs`: an array of `google_vertex_ai_endpoint` predict_request_response_logging_config\n  * `etags`: an array of `google_vertex_ai_endpoint` etag\n  * `create_times`: an array of `google_vertex_ai_endpoint` create_time\n  * `names`: an array of `google_vertex_ai_endpoint` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestore.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestore resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestore\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestore resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestore` InSpec audit resource to to test a Google Cloud Featurestore resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_featurestore(name: \"projects/#{gcp_project_id}/locations/#{featurestore['region']}/featurestores/#{featurestore['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('state') { should cmp 'value_state' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_featurestore(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestore` resource:\n\n\n  * `state`: Output only. State of the featurestore.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * STABLE\n    * UPDATING\n\n  * `create_time`: Output only. Timestamp when this Featurestore was created.\n\n  * `etag`: Optional. Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `online_storage_ttl_days`: Optional. TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage periodically removes obsolete feature values older than `online_storage_ttl_days` since the feature generation time. Note that `online_storage_ttl_days` should be less than or equal to `offline_storage_ttl_days` for each EntityType under a featurestore. If not set, default to 4000 days\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `labels`: Optional. The labels with user-defined metadata to organize your Featurestore. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information on and examples of labels. No more than 64 user labels can be associated with one Featurestore(System labels are excluded).\" System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable.\n\n    * `additional_properties`: \n\n  * `update_time`: Output only. Timestamp when this Featurestore was last updated.\n\n  * `name`: Output only. Name of the Featurestore. Format: `projects/{project}/locations/{location}/featurestores/{featurestore}`\n\n  * `online_serving_config`: OnlineServingConfig specifies the details for provisioning online serving resources.\n\n    * `fixed_node_count`: The number of nodes for the online store. The number of nodes doesn't scale automatically, but you can manually update the number of nodes. If set to 0, the featurestore will not have an online store and cannot be used for online serving.\n\n    * `scaling`: Online serving scaling configuration. If min_node_count and max_node_count are set to the same value, the cluster will be configured with the fixed number of node (no auto-scaling).\n\n      * `max_node_count`: The maximum number of nodes to scale up to. Must be greater than min_node_count, and less than or equal to 10 times of 'min_node_count'.\n\n      * `min_node_count`: Required. The minimum number of nodes to scale down to. Must be greater than or equal to 1.\n\n      * `cpu_utilization_target`: Optional. The cpu utilization that the Autoscaler should be trying to achieve. This number is on a scale from 0 (no utilization) to 100 (total utilization), and is limited between 10 and 80. When a cluster's CPU utilization exceeds the target that you have set, Bigtable immediately adds nodes to the cluster. When CPU utilization is substantially lower than the target, Bigtable removes nodes. If not set or set to 0, default to 50.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestore_entity_type_feature.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestore_entity_type_feature resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestore_entity_type_feature\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestore_entity_type_feature resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestore_entity_type_feature` InSpec audit resource to to test a Google Cloud FeaturestoreEntityTypeFeature resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_featurestore_entity_type_feature(name: \"projects/#{gcp_project_id}/locations/#{featurestore_entity_type_feature['region']}/featurestores/#{featurestore_entity_type_feature['featurestore']}/entityTypes/#{featurestore_entity_type_feature['entityType']}/features/#{featurestore_entity_type_feature['feature']}\", region: ' value_region') do\n\tit { should exist }\n\tits('description') { should cmp 'value_description' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('name') { should cmp 'value_name' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('value_type') { should cmp 'value_valuetype' }\n\nend\n\ndescribe google_vertex_ai_featurestore_entity_type_feature(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestore_entity_type_feature` resource:\n\n\n  * `description`: Description of the Feature.\n\n  * `create_time`: Output only. Timestamp when this EntityType was created.\n\n  * `monitoring_stats_anomalies`: Output only. The list of historical stats and anomalies with specified objectives.\n\n  * `etag`: Used to perform a consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `labels`: Optional. The labels with user-defined metadata to organize your Features. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information on and examples of labels. No more than 64 user labels can be associated with one Feature (System labels are excluded).\" System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable.\n\n    * `additional_properties`: \n\n  * `name`: Immutable. Name of the Feature. Format: `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` The last part feature is assigned by the client. The feature can be up to 64 characters long and can consist only of ASCII Latin letters A-Z and a-z, underscore(_), and ASCII digits 0-9 starting with a letter. The value will be unique given an entity type.\n\n  * `update_time`: Output only. Timestamp when this EntityType was most recently updated.\n\n  * `disable_monitoring`: Optional. If not set, use the monitoring_config defined for the EntityType this Feature belongs to. Only Features with type (Feature.ValueType) BOOL, STRING, DOUBLE or INT64 can enable monitoring. If set to true, all types of data monitoring are disabled despite the config on EntityType.\n\n  * `value_type`: Required. Immutable. Type of Feature value.\n  Possible values:\n    * VALUE_TYPE_UNSPECIFIED\n    * BOOL\n    * BOOL_ARRAY\n    * DOUBLE\n    * DOUBLE_ARRAY\n    * INT64\n    * INT64_ARRAY\n    * STRING\n    * STRING_ARRAY\n    * BYTES\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestore_entity_type_features.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestore_entity_type_features resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestore_entity_type_features\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestore_entity_type_features resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestore_entity_type_features` InSpec audit resource to to test a Google Cloud FeaturestoreEntityTypeFeature resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_featurestore_entity_type_features(parent: \"projects/#{gcp_project_id}/locations/#{featurestore_entity_type_feature['region']}/featurestores/#{featurestore_entity_type_feature['featurestore']}/entityTypes/#{featurestore_entity_type_feature['entityType']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestore_entity_type_features` resource:\n\nSee [google_vertex_ai_featurestore_entity_type_feature](google_vertex_ai_featurestore_entity_type_feature) for more detailed information.\n\n  * `descriptions`: an array of `google_vertex_ai_featurestore_entity_type_feature` description\n  * `create_times`: an array of `google_vertex_ai_featurestore_entity_type_feature` create_time\n  * `monitoring_stats_anomalies`: an array of `google_vertex_ai_featurestore_entity_type_feature` monitoring_stats_anomalies\n  * `etags`: an array of `google_vertex_ai_featurestore_entity_type_feature` etag\n  * `labels`: an array of `google_vertex_ai_featurestore_entity_type_feature` labels\n  * `names`: an array of `google_vertex_ai_featurestore_entity_type_feature` name\n  * `update_times`: an array of `google_vertex_ai_featurestore_entity_type_feature` update_time\n  * `disable_monitorings`: an array of `google_vertex_ai_featurestore_entity_type_feature` disable_monitoring\n  * `value_types`: an array of `google_vertex_ai_featurestore_entity_type_feature` value_type\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestores.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestores resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestores\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestores resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestores` InSpec audit resource to to test a Google Cloud Featurestore resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_featurestores(parent: \"projects/#{gcp_project_id}/locations/#{featurestore['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestores` resource:\n\nSee [google_vertex_ai_featurestore](google_vertex_ai_featurestore) for more detailed information.\n\n  * `states`: an array of `google_vertex_ai_featurestore` state\n  * `create_times`: an array of `google_vertex_ai_featurestore` create_time\n  * `etags`: an array of `google_vertex_ai_featurestore` etag\n  * `online_storage_ttl_days`: an array of `google_vertex_ai_featurestore` online_storage_ttl_days\n  * `encryption_specs`: an array of `google_vertex_ai_featurestore` encryption_spec\n  * `labels`: an array of `google_vertex_ai_featurestore` labels\n  * `update_times`: an array of `google_vertex_ai_featurestore` update_time\n  * `names`: an array of `google_vertex_ai_featurestore` name\n  * `online_serving_configs`: an array of `google_vertex_ai_featurestore` online_serving_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestores_entity_type.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestores_entity_type resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestores_entity_type\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestores_entity_type resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestores_entity_type` InSpec audit resource to to test a Google Cloud FeaturestoresEntityType resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_featurestores_entity_type(name: \"projects/#{gcp_project_id}/locations/#{featurestores_entity_type['region']}/featurestores/#{featurestores_entity_type['featurestore']}/entityTypes/#{featurestores_entity_type['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('description') { should cmp 'value_description' }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\nend\n\ndescribe google_vertex_ai_featurestores_entity_type(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestores_entity_type` resource:\n\n\n  * `labels`: Optional. The labels with user-defined metadata to organize your EntityTypes. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information on and examples of labels. No more than 64 user labels can be associated with one EntityType (System labels are excluded).\" System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable.\n\n    * `additional_properties`: \n\n  * `description`: Optional. Description of the EntityType.\n\n  * `name`: Immutable. Name of the EntityType. Format: `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` The last part entity_type is assigned by the client. The entity_type can be up to 64 characters long and can consist only of ASCII Latin letters A-Z and a-z and underscore(_), and ASCII digits 0-9 starting with a letter. The value will be unique given a featurestore.\n\n  * `create_time`: Output only. Timestamp when this EntityType was created.\n\n  * `monitoring_config`: Configuration of how features in Featurestore are monitored.\n\n    * `import_features_analysis`: Configuration of the Featurestore's ImportFeature Analysis Based Monitoring. This type of analysis generates statistics for values of each Feature imported by every ImportFeatureValues operation.\n\n      * `anomaly_detection_baseline`: The baseline used to do anomaly detection for the statistics generated by import features analysis.\n      Possible values:\n        * BASELINE_UNSPECIFIED\n        * LATEST_STATS\n        * MOST_RECENT_SNAPSHOT_STATS\n        * PREVIOUS_IMPORT_FEATURES_STATS\n\n      * `state`: Whether to enable / disable / inherite default hebavior for import features analysis.\n      Possible values:\n        * STATE_UNSPECIFIED\n        * DEFAULT\n        * ENABLED\n        * DISABLED\n\n    * `numerical_threshold_config`: The config for Featurestore Monitoring threshold.\n\n      * `value`: Specify a threshold value that can trigger the alert. 1. For categorical feature, the distribution distance is calculated by L-inifinity norm. 2. For numerical feature, the distribution distance is calculated by Jensen–Shannon divergence. Each feature must have a non-zero threshold if they need to be monitored. Otherwise no alert will be triggered for that feature.\n\n    * `categorical_threshold_config`: The config for Featurestore Monitoring threshold.\n\n      * `value`: Specify a threshold value that can trigger the alert. 1. For categorical feature, the distribution distance is calculated by L-inifinity norm. 2. For numerical feature, the distribution distance is calculated by Jensen–Shannon divergence. Each feature must have a non-zero threshold if they need to be monitored. Otherwise no alert will be triggered for that feature.\n\n    * `snapshot_analysis`: Configuration of the Featurestore's Snapshot Analysis Based Monitoring. This type of analysis generates statistics for each Feature based on a snapshot of the latest feature value of each entities every monitoring_interval.\n\n      * `monitoring_interval_days`: Configuration of the snapshot analysis based monitoring pipeline running interval. The value indicates number of days.\n\n      * `staleness_days`: Customized export features time window for snapshot analysis. Unit is one day. Default value is 3 weeks. Minimum value is 1 day. Maximum value is 4000 days.\n\n      * `disabled`: The monitoring schedule for snapshot analysis. For EntityType-level config: unset / disabled = true indicates disabled by default for Features under it; otherwise by default enable snapshot analysis monitoring with monitoring_interval for Features under it. Feature-level config: disabled = true indicates disabled regardless of the EntityType-level config; unset monitoring_interval indicates going with EntityType-level config; otherwise run snapshot analysis monitoring with monitoring_interval regardless of the EntityType-level config. Explicitly Disable the snapshot analysis based monitoring.\n\n  * `etag`: Optional. Used to perform a consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `update_time`: Output only. Timestamp when this EntityType was most recently updated.\n\n  * `offline_storage_ttl_days`: Optional. Config for data retention policy in offline storage. TTL in days for feature values that will be stored in offline storage. The Feature Store offline storage periodically removes obsolete feature values older than `offline_storage_ttl_days` since the feature generation time. If unset (or explicitly set to 0), default to 4000 days TTL.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_featurestores_entity_types.md",
    "content": "+++\ntitle = \"google_vertex_ai_featurestores_entity_types resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_featurestores_entity_types\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_featurestores_entity_types resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_featurestores_entity_types` InSpec audit resource to to test a Google Cloud FeaturestoresEntityType resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_featurestores_entity_types(parent: \"projects/#{gcp_project_id}/locations/#{featurestores_entity_type['region']}/featurestores/#{featurestores_entity_type['featurestore']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_featurestores_entity_types` resource:\n\nSee [google_vertex_ai_featurestores_entity_type](google_vertex_ai_featurestores_entity_type) for more detailed information.\n\n  * `labels`: an array of `google_vertex_ai_featurestores_entity_type` labels\n  * `descriptions`: an array of `google_vertex_ai_featurestores_entity_type` description\n  * `names`: an array of `google_vertex_ai_featurestores_entity_type` name\n  * `create_times`: an array of `google_vertex_ai_featurestores_entity_type` create_time\n  * `monitoring_configs`: an array of `google_vertex_ai_featurestores_entity_type` monitoring_config\n  * `etags`: an array of `google_vertex_ai_featurestores_entity_type` etag\n  * `update_times`: an array of `google_vertex_ai_featurestores_entity_type` update_time\n  * `offline_storage_ttl_days`: an array of `google_vertex_ai_featurestores_entity_type` offline_storage_ttl_days\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_hyperparameter_tuning_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_hyperparameter_tuning_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_hyperparameter_tuning_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_hyperparameter_tuning_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_hyperparameter_tuning_job` InSpec audit resource to to test a Google Cloud HyperparameterTuningJob resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_hyperparameter_tuning_job(name: \"projects/#{gcp_project_id}/locations/#{hyperparameter_tuning_job['region']}/hyperparameterTuningJobs/#{hyperparameter_tuning_job['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('state') { should cmp 'value_state' }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_hyperparameter_tuning_job(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_hyperparameter_tuning_job` resource:\n\n\n  * `study_spec`: Required. Study configuration of the HyperparameterTuningJob.\n\n  * `trials`: Output only. Trials of the HyperparameterTuningJob.\n\n  * `state`: Output only. The detailed state of the job.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * JOB_STATE_QUEUED\n    * JOB_STATE_PENDING\n    * JOB_STATE_RUNNING\n    * JOB_STATE_SUCCEEDED\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_PAUSED\n    * JOB_STATE_EXPIRED\n    * JOB_STATE_UPDATING\n    * JOB_STATE_PARTIALLY_SUCCEEDED\n\n  * `max_failed_trial_count`: The number of failed Trials that need to be seen before failing the HyperparameterTuningJob. If set to 0, Vertex AI decides how many Trials must fail before the whole job fails.\n\n  * `encryption_spec`: Customer-managed encryption key options for a HyperparameterTuningJob. If this is set, then all resources created by the HyperparameterTuningJob will be encrypted with the provided encryption key.\n\n  * `error`: Output only. Only populated when job's state is JOB_STATE_FAILED or JOB_STATE_CANCELLED.\n\n  * `end_time`: Output only. Time when the HyperparameterTuningJob entered any of the following states: `JOB_STATE_SUCCEEDED`, `JOB_STATE_FAILED`, `JOB_STATE_CANCELLED`.\n\n  * `update_time`: Output only. Time when the HyperparameterTuningJob was most recently updated.\n\n  * `start_time`: Output only. Time when the HyperparameterTuningJob for the first time entered the `JOB_STATE_RUNNING` state.\n\n  * `labels`: The labels with user-defined metadata to organize HyperparameterTuningJobs. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `create_time`: Output only. Time when the HyperparameterTuningJob was created.\n\n  * `parallel_trial_count`: Required. The desired number of Trials to run in parallel.\n\n  * `trial_job_spec`: Required. The spec of a trial job. The same spec applies to the CustomJobs created in all the trials.\n\n  * `max_trial_count`: Required. The desired total number of Trials.\n\n  * `display_name`: Required. The display name of the HyperparameterTuningJob. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `name`: Output only. Resource name of the HyperparameterTuningJob.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_hyperparameter_tuning_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_hyperparameter_tuning_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_hyperparameter_tuning_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_hyperparameter_tuning_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_hyperparameter_tuning_jobs` InSpec audit resource to to test a Google Cloud HyperparameterTuningJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_hyperparameter_tuning_jobs(parent: \"projects/#{gcp_project_id}/locations/#{hyperparameter_tuning_job['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_hyperparameter_tuning_jobs` resource:\n\nSee [google_vertex_ai_hyperparameter_tuning_job](google_vertex_ai_hyperparameter_tuning_job) for more detailed information.\n\n  * `study_specs`: an array of `google_vertex_ai_hyperparameter_tuning_job` study_spec\n  * `trials`: an array of `google_vertex_ai_hyperparameter_tuning_job` trials\n  * `states`: an array of `google_vertex_ai_hyperparameter_tuning_job` state\n  * `max_failed_trial_counts`: an array of `google_vertex_ai_hyperparameter_tuning_job` max_failed_trial_count\n  * `encryption_specs`: an array of `google_vertex_ai_hyperparameter_tuning_job` encryption_spec\n  * `errors`: an array of `google_vertex_ai_hyperparameter_tuning_job` error\n  * `end_times`: an array of `google_vertex_ai_hyperparameter_tuning_job` end_time\n  * `update_times`: an array of `google_vertex_ai_hyperparameter_tuning_job` update_time\n  * `start_times`: an array of `google_vertex_ai_hyperparameter_tuning_job` start_time\n  * `labels`: an array of `google_vertex_ai_hyperparameter_tuning_job` labels\n  * `create_times`: an array of `google_vertex_ai_hyperparameter_tuning_job` create_time\n  * `parallel_trial_counts`: an array of `google_vertex_ai_hyperparameter_tuning_job` parallel_trial_count\n  * `trial_job_specs`: an array of `google_vertex_ai_hyperparameter_tuning_job` trial_job_spec\n  * `max_trial_counts`: an array of `google_vertex_ai_hyperparameter_tuning_job` max_trial_count\n  * `display_names`: an array of `google_vertex_ai_hyperparameter_tuning_job` display_name\n  * `names`: an array of `google_vertex_ai_hyperparameter_tuning_job` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_index.md",
    "content": "+++\ntitle = \"google_vertex_ai_index resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_index\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_index resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_index` InSpec audit resource to to test a Google Cloud Index resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_index(name: \"projects/#{gcp_project_id}/locations/#{index['region']}/indexes/#{index['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('description') { should cmp 'value_description' }\n\tits('name') { should cmp 'value_name' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('metadata_schema_uri') { should cmp 'value_metadataschemauri' }\n\tits('index_update_method') { should cmp 'value_indexupdatemethod' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('etag') { should cmp 'value_etag' }\n\nend\n\ndescribe google_vertex_ai_index(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_index` resource:\n\n\n  * `description`: The description of the Index.\n\n  * `metadata`: An additional information about the Index; the schema of the metadata can be found in metadata_schema.\n\n  * `index_stats`: Output only. Stats of the index resource.\n\n  * `name`: Output only. The resource name of the Index.\n\n  * `deployed_indexes`: Output only. The pointers to DeployedIndexes created from this Index. An Index can be only deleted if all its DeployedIndexes had been undeployed first.\n\n  * `display_name`: Required. The display name of the Index. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `metadata_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing additional information about the Index, that is specific to it. Unset if the Index does not have any additional information. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n  * `index_update_method`: Immutable. The update method to use with this Index. If not set, BATCH_UPDATE will be used by default.\n  Possible values:\n    * INDEX_UPDATE_METHOD_UNSPECIFIED\n    * BATCH_UPDATE\n    * STREAM_UPDATE\n\n  * `update_time`: Output only. Timestamp when this Index was most recently updated. This also includes any update to the contents of the Index. Note that Operations working on this Index may have their Operations.metadata.generic_metadata.update_time a little after the value of this timestamp, yet that does not mean their results are not already reflected in the Index. Result of any successfully completed Operation on the Index is reflected in it.\n\n  * `create_time`: Output only. Timestamp when this Index was created.\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `labels`: The labels with user-defined metadata to organize your Indexes. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_index_endpoint.md",
    "content": "+++\ntitle = \"google_vertex_ai_index_endpoint resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_index_endpoint\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_index_endpoint resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_index_endpoint` InSpec audit resource to to test a Google Cloud IndexEndpoint resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_index_endpoint(name: \"projects/#{gcp_project_id}/locations/#{index_endpoint['region']}/indexEndpoints/#{index_endpoint['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('name') { should cmp 'value_name' }\n\tits('network') { should cmp 'value_network' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('public_endpoint_domain_name') { should cmp 'value_publicendpointdomainname' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('description') { should cmp 'value_description' }\n\nend\n\ndescribe google_vertex_ai_index_endpoint(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_index_endpoint` resource:\n\n\n  * `deployed_indexes`: Output only. The indexes deployed in this endpoint.\n\n    * `private_endpoints`: IndexPrivateEndpoints proto is used to provide paths for users to send requests via private endpoints (e.g. private service access, private service connect). To send request via private service access, use match_grpc_address. To send request via private service connect, use service_attachment.\n\n      * `service_attachment`: Output only. The name of the service attachment resource. Populated if private service connect is enabled.\n\n      * `match_grpc_address`: Output only. The ip address used to send match gRPC requests.\n\n    * `deployment_group`: Optional. The deployment group can be no longer than 64 characters (eg: 'test', 'prod'). If not set, we will use the 'default' deployment group. Creating `deployment_groups` with `reserved_ip_ranges` is a recommended practice when the peered network has multiple peering ranges. This creates your deployments from predictable IP spaces for easier traffic administration. Also, one deployment_group (except 'default') can only be used with the same reserved_ip_ranges which means if the deployment_group has been used with reserved_ip_ranges: [a, b, c], using it with [a, b] or [d, e] is disallowed. Note: we only support up to 5 deployment groups(not including 'default').\n\n    * `dedicated_resources`: A description of resources that are dedicated to a DeployedModel, and that need a higher degree of manual configuration.\n\n      * `machine_spec`: Specification of a single machine.\n\n        * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n        Possible values:\n          * ACCELERATOR_TYPE_UNSPECIFIED\n          * NVIDIA_TESLA_K80\n          * NVIDIA_TESLA_P100\n          * NVIDIA_TESLA_V100\n          * NVIDIA_TESLA_P4\n          * NVIDIA_TESLA_T4\n          * NVIDIA_TESLA_A100\n          * NVIDIA_A100_80GB\n          * NVIDIA_L4\n          * TPU_V2\n          * TPU_V3\n          * TPU_V4_POD\n\n        * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n        * `accelerator_count`: The number of accelerators to attach to the machine.\n\n      * `max_replica_count`: Immutable. The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, will use min_replica_count as the default value. The value of this field impacts the charge against Vertex CPU and GPU quotas. Specifically, you will be charged for (max_replica_count * number of cores in the selected machine type) and (max_replica_count * number of GPUs per replica in the selected machine type).\n\n      * `autoscaling_metric_specs`: Immutable. The metric specifications that overrides a resource utilization metric (CPU utilization, accelerator's duty cycle, and so on) target value (default to 60 if not set). At most one entry is allowed per metric. If machine_spec.accelerator_count is above 0, the autoscaling will be based on both CPU utilization and accelerator's duty cycle metrics and scale up when either metrics exceeds its target value while scale down if both metrics are under their target value. The default target value is 60 for both metrics. If machine_spec.accelerator_count is 0, the autoscaling will be based on CPU utilization metric only with default target value 60 if not explicitly set. For example, in the case of Online Prediction, if you want to override target CPU utilization to 80, you should set autoscaling_metric_specs.metric_name to `aiplatform.googleapis.com/prediction/online/cpu/utilization` and autoscaling_metric_specs.target to `80`.\n\n        * `target`: The target resource utilization in percentage (1% - 100%) for the given metric; once the real usage deviates from the target by a certain percentage, the machine replicas change. The default value is 60 (representing 60%) if not provided.\n\n        * `metric_name`: Required. The resource metric name. Supported metrics: * For Online Prediction: * `aiplatform.googleapis.com/prediction/online/accelerator/duty_cycle` * `aiplatform.googleapis.com/prediction/online/cpu/utilization`\n\n      * `min_replica_count`: Required. Immutable. The minimum number of machine replicas this DeployedModel will be always deployed on. This value must be greater than or equal to 1. If traffic against the DeployedModel increases, it may dynamically be deployed onto more replicas, and as traffic decreases, some of these extra replicas may be freed.\n\n    * `deployed_index_auth_config`: Used to set up the auth on the DeployedIndex's private endpoint.\n\n      * `auth_provider`: Configuration for an authentication provider, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).\n\n        * `audiences`: The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted.\n\n        * `allowed_issuers`: A list of allowed JWT issuers. Each entry must be a valid Google service account, in the following format: `service-account-name@project-id.iam.gserviceaccount.com`\n\n    * `id`: Required. The user specified ID of the DeployedIndex. The ID can be up to 128 characters long and must start with a letter and only contain letters, numbers, and underscores. The ID must be unique within the project it is created in.\n\n    * `index_sync_time`: Output only. The DeployedIndex may depend on various data on its original Index. Additionally when certain changes to the original Index are being done (e.g. when what the Index contains is being changed) the DeployedIndex may be asynchronously updated in the background to reflect these changes. If this timestamp's value is at least the Index.update_time of the original Index, it means that this DeployedIndex and the original Index are in sync. If this timestamp is older, then to see which updates this DeployedIndex already contains (and which it does not), one must list the operations that are running on the original Index. Only the successfully completed Operations with update_time equal or before this sync time are contained in this DeployedIndex.\n\n    * `automatic_resources`: A description of resources that to large degree are decided by Vertex AI, and require only a modest additional configuration. Each Model supporting these resources documents its specific guidelines.\n\n      * `max_replica_count`: Immutable. The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, a no upper bound for scaling under heavy traffic will be assume, though Vertex AI may be unable to scale beyond certain replica number.\n\n      * `min_replica_count`: Immutable. The minimum number of replicas this DeployedModel will be always deployed on. If traffic against it increases, it may dynamically be deployed onto more replicas up to max_replica_count, and as traffic decreases, some of these extra replicas may be freed. If the requested value is too large, the deployment will error.\n\n    * `enable_access_logging`: Optional. If true, private endpoint's access logs are sent to Cloud Logging. These logs are like standard server access logs, containing information like timestamp and latency for each MatchRequest. Note that logs may incur a cost, especially if the deployed index receives a high queries per second rate (QPS). Estimate your costs before enabling this option.\n\n    * `create_time`: Output only. Timestamp when the DeployedIndex was created.\n\n    * `reserved_ip_ranges`: Optional. A list of reserved ip ranges under the VPC network that can be used for this DeployedIndex. If set, we will deploy the index within the provided ip ranges. Otherwise, the index might be deployed to any ip ranges under the provided VPC network. The value should be the name of the address (https://cloud.google.com/compute/docs/reference/rest/v1/addresses) Example: 'vertex-ai-ip-range'.\n\n    * `index`: Required. The name of the Index this is the deployment of. We may refer to this Index as the DeployedIndex's \"original\" Index.\n\n    * `display_name`: The display name of the DeployedIndex. If not provided upon creation, the Index's display_name is used.\n\n  * `private_service_connect_config`: Represents configuration for private service connect.\n\n    * `project_allowlist`: A list of Projects from which the forwarding rule will target the service attachment.\n\n    * `enable_private_service_connect`: Required. If true, expose the IndexEndpoint via private service connect.\n\n  * `display_name`: Required. The display name of the IndexEndpoint. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `public_endpoint_enabled`: Optional. If true, the deployed index will be accessible through public endpoint.\n\n  * `labels`: The labels with user-defined metadata to organize your IndexEndpoints. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `create_time`: Output only. Timestamp when this IndexEndpoint was created.\n\n  * `name`: Output only. The resource name of the IndexEndpoint.\n\n  * `network`: Optional. The full name of the Google Compute Engine [network](https://cloud.google.com/compute/docs/networks-and-firewalls#networks) to which the IndexEndpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. network and private_service_connect_config are mutually exclusive. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in '12345', and {network} is network name.\n\n  * `update_time`: Output only. Timestamp when this IndexEndpoint was last updated. This timestamp is not updated when the endpoint's DeployedIndexes are updated, e.g. due to updates of the original Indexes they are the deployments of.\n\n  * `public_endpoint_domain_name`: Output only. If public_endpoint_enabled is true, this field will be populated with the domain name to use for this index endpoint.\n\n  * `enable_private_service_connect`: Optional. Deprecated: If true, expose the IndexEndpoint via private service connect. Only one of the fields, network or enable_private_service_connect, can be set.\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `description`: The description of the IndexEndpoint.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_index_endpoints.md",
    "content": "+++\ntitle = \"google_vertex_ai_index_endpoints resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_index_endpoints\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_index_endpoints resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_index_endpoints` InSpec audit resource to to test a Google Cloud IndexEndpoint resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_index_endpoints(parent: \"projects/#{gcp_project_id}/locations/#{index_endpoint['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_index_endpoints` resource:\n\nSee [google_vertex_ai_index_endpoint](google_vertex_ai_index_endpoint) for more detailed information.\n\n  * `deployed_indexes`: an array of `google_vertex_ai_index_endpoint` deployed_indexes\n  * `private_service_connect_configs`: an array of `google_vertex_ai_index_endpoint` private_service_connect_config\n  * `display_names`: an array of `google_vertex_ai_index_endpoint` display_name\n  * `public_endpoint_enableds`: an array of `google_vertex_ai_index_endpoint` public_endpoint_enabled\n  * `labels`: an array of `google_vertex_ai_index_endpoint` labels\n  * `create_times`: an array of `google_vertex_ai_index_endpoint` create_time\n  * `names`: an array of `google_vertex_ai_index_endpoint` name\n  * `networks`: an array of `google_vertex_ai_index_endpoint` network\n  * `update_times`: an array of `google_vertex_ai_index_endpoint` update_time\n  * `public_endpoint_domain_names`: an array of `google_vertex_ai_index_endpoint` public_endpoint_domain_name\n  * `enable_private_service_connects`: an array of `google_vertex_ai_index_endpoint` enable_private_service_connect\n  * `etags`: an array of `google_vertex_ai_index_endpoint` etag\n  * `descriptions`: an array of `google_vertex_ai_index_endpoint` description\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_indices.md",
    "content": "+++\ntitle = \"google_vertex_ai_indices resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_indices\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_indices resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_indices` InSpec audit resource to to test a Google Cloud Index resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_indices(parent: \"projects/#{gcp_project_id}/locations/#{index['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_indices` resource:\n\nSee [google_vertex_ai_index](google_vertex_ai_index) for more detailed information.\n\n  * `descriptions`: an array of `google_vertex_ai_index` description\n  * `metadata`: an array of `google_vertex_ai_index` metadata\n  * `index_stats`: an array of `google_vertex_ai_index` index_stats\n  * `names`: an array of `google_vertex_ai_index` name\n  * `deployed_indexes`: an array of `google_vertex_ai_index` deployed_indexes\n  * `display_names`: an array of `google_vertex_ai_index` display_name\n  * `metadata_schema_uris`: an array of `google_vertex_ai_index` metadata_schema_uri\n  * `index_update_methods`: an array of `google_vertex_ai_index` index_update_method\n  * `update_times`: an array of `google_vertex_ai_index` update_time\n  * `create_times`: an array of `google_vertex_ai_index` create_time\n  * `etags`: an array of `google_vertex_ai_index` etag\n  * `labels`: an array of `google_vertex_ai_index` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_store.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_store resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_store\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_store resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_store` InSpec audit resource to to test a Google Cloud MetadataStore resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_metadata_store(name: \"projects/#{gcp_project_id}/locations/#{metadata_store['region']}/metadataStores/#{metadata_store['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('description') { should cmp 'value_description' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_metadata_store(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_store` resource:\n\n\n  * `description`: Description of the MetadataStore.\n\n  * `create_time`: Output only. Timestamp when this MetadataStore was created.\n\n  * `update_time`: Output only. Timestamp when this MetadataStore was last updated.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `state`: Represents state information for a MetadataStore.\n\n    * `disk_utilization_bytes`: The disk utilization of the MetadataStore in bytes.\n\n  * `name`: Output only. The resource name of the MetadataStore instance.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores` InSpec audit resource to to test a Google Cloud MetadataStore resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_metadata_stores(parent: \"projects/#{gcp_project_id}/locations/#{metadata_store['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores` resource:\n\nSee [google_vertex_ai_metadata_store](google_vertex_ai_metadata_store) for more detailed information.\n\n  * `descriptions`: an array of `google_vertex_ai_metadata_store` description\n  * `create_times`: an array of `google_vertex_ai_metadata_store` create_time\n  * `update_times`: an array of `google_vertex_ai_metadata_store` update_time\n  * `encryption_specs`: an array of `google_vertex_ai_metadata_store` encryption_spec\n  * `states`: an array of `google_vertex_ai_metadata_store` state\n  * `names`: an array of `google_vertex_ai_metadata_store` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_artifact.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_artifact resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_artifact\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_artifact resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_artifact` InSpec audit resource to to test a Google Cloud MetadataStoresArtifact resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_metadata_stores_artifact(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_artifact['region']}/metadataStores/#{metadata_stores_artifact['metadataStore']}/artifacts/#{metadata_stores_artifact['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('schema_version') { should cmp 'value_schemaversion' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('name') { should cmp 'value_name' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('state') { should cmp 'value_state' }\n\tits('uri') { should cmp 'value_uri' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('schema_title') { should cmp 'value_schematitle' }\n\tits('description') { should cmp 'value_description' }\n\nend\n\ndescribe google_vertex_ai_metadata_stores_artifact(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_artifact` resource:\n\n\n  * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `display_name`: User provided display name of the Artifact. May be up to 128 Unicode characters.\n\n  * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `name`: Output only. The resource name of the Artifact.\n\n  * `update_time`: Output only. Timestamp when this Artifact was last updated.\n\n  * `state`: The state of this Artifact. This is a property of the Artifact, and does not imply or capture any ongoing process. This property is managed by clients (such as Vertex AI Pipelines), and the system does not prescribe or check the validity of state transitions.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * PENDING\n    * LIVE\n\n  * `metadata`: Properties of the Artifact. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n    * `additional_properties`: Properties of the object.\n\n  * `uri`: The uniform resource identifier of the artifact file. May be empty if there is no actual artifact file.\n\n  * `create_time`: Output only. Timestamp when this Artifact was created.\n\n  * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `description`: Description of the Artifact\n\n  * `labels`: The labels with user-defined metadata to organize your Artifacts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Artifact (System labels are excluded).\n\n    * `additional_properties`: \n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_artifacts.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_artifacts resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_artifacts\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_artifacts resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_artifacts` InSpec audit resource to to test a Google Cloud MetadataStoresArtifact resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_metadata_stores_artifacts(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_artifact['region']}/metadataStores/#{metadata_stores_artifact['metadataStore']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_artifacts` resource:\n\nSee [google_vertex_ai_metadata_stores_artifact](google_vertex_ai_metadata_stores_artifact) for more detailed information.\n\n  * `schema_versions`: an array of `google_vertex_ai_metadata_stores_artifact` schema_version\n  * `display_names`: an array of `google_vertex_ai_metadata_stores_artifact` display_name\n  * `etags`: an array of `google_vertex_ai_metadata_stores_artifact` etag\n  * `names`: an array of `google_vertex_ai_metadata_stores_artifact` name\n  * `update_times`: an array of `google_vertex_ai_metadata_stores_artifact` update_time\n  * `states`: an array of `google_vertex_ai_metadata_stores_artifact` state\n  * `metadata`: an array of `google_vertex_ai_metadata_stores_artifact` metadata\n  * `uris`: an array of `google_vertex_ai_metadata_stores_artifact` uri\n  * `create_times`: an array of `google_vertex_ai_metadata_stores_artifact` create_time\n  * `schema_titles`: an array of `google_vertex_ai_metadata_stores_artifact` schema_title\n  * `descriptions`: an array of `google_vertex_ai_metadata_stores_artifact` description\n  * `labels`: an array of `google_vertex_ai_metadata_stores_artifact` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_context.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_context resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_context\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_context resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_context` InSpec audit resource to to test a Google Cloud MetadataStoresContext resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_metadata_stores_context(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_context['region']}/metadataStores/#{metadata_stores_context['metadataStore']}/contexts/#{metadata_stores_context['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('schema_title') { should cmp 'value_schematitle' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('description') { should cmp 'value_description' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('schema_version') { should cmp 'value_schemaversion' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\nend\n\ndescribe google_vertex_ai_metadata_stores_context(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_context` resource:\n\n\n  * `name`: Immutable. The resource name of the Context.\n\n  * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `description`: Description of the Context\n\n  * `display_name`: User provided display name of the Context. May be up to 128 Unicode characters.\n\n  * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `create_time`: Output only. Timestamp when this Context was created.\n\n  * `labels`: The labels with user-defined metadata to organize your Contexts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Context (System labels are excluded).\n\n    * `additional_properties`: \n\n  * `metadata`: Properties of the Context. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n    * `additional_properties`: Properties of the object.\n\n  * `update_time`: Output only. Timestamp when this Context was last updated.\n\n  * `parent_contexts`: Output only. A list of resource names of Contexts that are parents of this Context. A Context may have at most 10 parent_contexts.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_contexts.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_contexts resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_contexts\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_contexts resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_contexts` InSpec audit resource to to test a Google Cloud MetadataStoresContext resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_metadata_stores_contexts(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_context['region']}/metadataStores/#{metadata_stores_context['metadataStore']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_contexts` resource:\n\nSee [google_vertex_ai_metadata_stores_context](google_vertex_ai_metadata_stores_context) for more detailed information.\n\n  * `names`: an array of `google_vertex_ai_metadata_stores_context` name\n  * `schema_titles`: an array of `google_vertex_ai_metadata_stores_context` schema_title\n  * `etags`: an array of `google_vertex_ai_metadata_stores_context` etag\n  * `descriptions`: an array of `google_vertex_ai_metadata_stores_context` description\n  * `display_names`: an array of `google_vertex_ai_metadata_stores_context` display_name\n  * `schema_versions`: an array of `google_vertex_ai_metadata_stores_context` schema_version\n  * `create_times`: an array of `google_vertex_ai_metadata_stores_context` create_time\n  * `labels`: an array of `google_vertex_ai_metadata_stores_context` labels\n  * `metadata`: an array of `google_vertex_ai_metadata_stores_context` metadata\n  * `update_times`: an array of `google_vertex_ai_metadata_stores_context` update_time\n  * `parent_contexts`: an array of `google_vertex_ai_metadata_stores_context` parent_contexts\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_execution.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_execution resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_execution\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_execution resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_execution` InSpec audit resource to to test a Google Cloud MetadataStoresExecution resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_metadata_stores_execution(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_execution['region']}/metadataStores/#{metadata_stores_execution['metadataStore']}/executions/#{metadata_stores_execution['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('schema_version') { should cmp 'value_schemaversion' }\n\tits('state') { should cmp 'value_state' }\n\tits('name') { should cmp 'value_name' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('schema_title') { should cmp 'value_schematitle' }\n\tits('description') { should cmp 'value_description' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\nend\n\ndescribe google_vertex_ai_metadata_stores_execution(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_execution` resource:\n\n\n  * `labels`: The labels with user-defined metadata to organize your Executions. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Execution (System labels are excluded).\n\n    * `additional_properties`: \n\n  * `create_time`: Output only. Timestamp when this Execution was created.\n\n  * `schema_version`: The version of the schema in `schema_title` to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `state`: The state of this Execution. This is a property of the Execution, and does not imply or capture any ongoing process. This property is managed by clients (such as Vertex AI Pipelines) and the system does not prescribe or check the validity of state transitions.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * NEW\n    * RUNNING\n    * COMPLETE\n    * FAILED\n    * CACHED\n    * CANCELLED\n\n  * `name`: Output only. The resource name of the Execution.\n\n  * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `display_name`: User provided display name of the Execution. May be up to 128 Unicode characters.\n\n  * `metadata`: Properties of the Execution. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n    * `additional_properties`: Properties of the object.\n\n  * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n  * `description`: Description of the Execution\n\n  * `update_time`: Output only. Timestamp when this Execution was last updated.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_executions.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_executions resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_executions\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_executions resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_executions` InSpec audit resource to to test a Google Cloud MetadataStoresExecution resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_metadata_stores_executions(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_execution['region']}/metadataStores/#{metadata_stores_execution['metadataStore']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_executions` resource:\n\nSee [google_vertex_ai_metadata_stores_execution](google_vertex_ai_metadata_stores_execution) for more detailed information.\n\n  * `labels`: an array of `google_vertex_ai_metadata_stores_execution` labels\n  * `create_times`: an array of `google_vertex_ai_metadata_stores_execution` create_time\n  * `schema_versions`: an array of `google_vertex_ai_metadata_stores_execution` schema_version\n  * `states`: an array of `google_vertex_ai_metadata_stores_execution` state\n  * `names`: an array of `google_vertex_ai_metadata_stores_execution` name\n  * `etags`: an array of `google_vertex_ai_metadata_stores_execution` etag\n  * `display_names`: an array of `google_vertex_ai_metadata_stores_execution` display_name\n  * `metadata`: an array of `google_vertex_ai_metadata_stores_execution` metadata\n  * `schema_titles`: an array of `google_vertex_ai_metadata_stores_execution` schema_title\n  * `descriptions`: an array of `google_vertex_ai_metadata_stores_execution` description\n  * `update_times`: an array of `google_vertex_ai_metadata_stores_execution` update_time\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_metadata_schema.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_metadata_schema resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_metadata_schema\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_metadata_schema resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_metadata_schema` InSpec audit resource to to test a Google Cloud MetadataStoresMetadataSchema resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_metadata_stores_metadata_schema(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_metadata_schema['region']}/metadataStores/#{metadata_stores_metadata_schema['metadataStore']}/metadataSchemas/#{metadata_stores_metadata_schema['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('schema_type') { should cmp 'value_schematype' }\n\tits('description') { should cmp 'value_description' }\n\tits('schema_version') { should cmp 'value_schemaversion' }\n\tits('name') { should cmp 'value_name' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('schema') { should cmp 'value_schema' }\n\nend\n\ndescribe google_vertex_ai_metadata_stores_metadata_schema(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_metadata_schema` resource:\n\n\n  * `schema_type`: The type of the MetadataSchema. This is a property that identifies which metadata types will use the MetadataSchema.\n  Possible values:\n    * METADATA_SCHEMA_TYPE_UNSPECIFIED\n    * ARTIFACT_TYPE\n    * EXECUTION_TYPE\n    * CONTEXT_TYPE\n\n  * `description`: Description of the Metadata Schema\n\n  * `schema_version`: The version of the MetadataSchema. The version's format must match the following regular expression: `^[0-9]+.+.+$`, which would allow to order/compare different versions. Example: 1.0.0, 1.0.1, etc.\n\n  * `name`: Output only. The resource name of the MetadataSchema.\n\n  * `create_time`: Output only. Timestamp when this MetadataSchema was created.\n\n  * `schema`: Required. The raw YAML string representation of the MetadataSchema. The combination of [MetadataSchema.version] and the schema name given by `title` in [MetadataSchema.schema] must be unique within a MetadataStore. The schema is defined as an OpenAPI 3.0.2 [MetadataSchema Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#schemaObject)\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_metadata_stores_metadata_schemas.md",
    "content": "+++\ntitle = \"google_vertex_ai_metadata_stores_metadata_schemas resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_metadata_stores_metadata_schemas\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_metadata_stores_metadata_schemas resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_metadata_stores_metadata_schemas` InSpec audit resource to to test a Google Cloud MetadataStoresMetadataSchema resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_metadata_stores_metadata_schemas(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_metadata_schema['region']}/metadataStores/#{metadata_stores_metadata_schema['metadataStore']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_metadata_stores_metadata_schemas` resource:\n\nSee [google_vertex_ai_metadata_stores_metadata_schema](google_vertex_ai_metadata_stores_metadata_schema) for more detailed information.\n\n  * `schema_types`: an array of `google_vertex_ai_metadata_stores_metadata_schema` schema_type\n  * `descriptions`: an array of `google_vertex_ai_metadata_stores_metadata_schema` description\n  * `schema_versions`: an array of `google_vertex_ai_metadata_stores_metadata_schema` schema_version\n  * `names`: an array of `google_vertex_ai_metadata_stores_metadata_schema` name\n  * `create_times`: an array of `google_vertex_ai_metadata_stores_metadata_schema` create_time\n  * `schemas`: an array of `google_vertex_ai_metadata_stores_metadata_schema` schema\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_model.md",
    "content": "+++\ntitle = \"google_vertex_ai_model resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_model\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_model resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_model` InSpec audit resource to to test a Google Cloud Model resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_model(name: \"projects/#{gcp_project_id}/locations/#{model['region']}/models/#{model['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('description') { should cmp 'value_description' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('pipeline_job') { should cmp 'value_pipelinejob' }\n\tits('version_update_time') { should cmp 'value_versionupdatetime' }\n\tits('metadata_artifact') { should cmp 'value_metadataartifact' }\n\tits('metadata_schema_uri') { should cmp 'value_metadataschemauri' }\n\tits('version_id') { should cmp 'value_versionid' }\n\tits('artifact_uri') { should cmp 'value_artifacturi' }\n\tits('training_pipeline') { should cmp 'value_trainingpipeline' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('version_create_time') { should cmp 'value_versioncreatetime' }\n\tits('version_description') { should cmp 'value_versiondescription' }\n\nend\n\ndescribe google_vertex_ai_model(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_model` resource:\n\n\n  * `model_source_info`: Detail description of the source information of the model.\n\n    * `copy`: If this Model is copy of another Model. If true then source_type pertains to the original.\n\n    * `source_type`: Type of the model source.\n    Possible values:\n      * MODEL_SOURCE_TYPE_UNSPECIFIED\n      * AUTOML\n      * CUSTOM\n      * BQML\n      * MODEL_GARDEN\n      * GENIE\n\n  * `name`: The resource name of the Model.\n\n  * `metadata`: Immutable. An additional information about the Model; the schema of the metadata can be found in metadata_schema. Unset if the Model does not have any additional information.\n\n  * `update_time`: Output only. Timestamp when this Model was most recently updated.\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `description`: The description of the Model.\n\n  * `deployed_models`: Output only. The pointers to DeployedModels created from this Model. Note that Model could have been deployed to Endpoints in different Locations.\n\n    * `deployed_model_id`: Immutable. An ID of a DeployedModel in the above Endpoint.\n\n    * `endpoint`: Immutable. A resource name of an Endpoint.\n\n  * `create_time`: Output only. Timestamp when this Model was uploaded into Vertex AI.\n\n  * `explanation_spec`: Specification of Model explanation.\n\n    * `parameters`: Parameters to configure explaining for Model's predictions.\n\n      * `output_indices`: If populated, only returns attributions that have output_index contained in output_indices. It must be an ndarray of integers, with the same shape of the output it's explaining. If not populated, returns attributions for top_k indices of outputs. If neither top_k nor output_indices is populated, returns the argmax index of the outputs. Only applicable to Models that predict multiple outputs (e,g, multi-class Models that predict multiple classes).\n\n      * `examples`: Example-based explainability that returns the nearest neighbors from the provided dataset.\n\n        * `presets`: Preset configuration for example-based explanations\n\n          * `modality`: The modality of the uploaded model, which automatically configures the distance measurement and feature normalization for the underlying example index and queries. If your model does not precisely fit one of these types, it is okay to choose the closest type.\n          Possible values:\n            * MODALITY_UNSPECIFIED\n            * IMAGE\n            * TEXT\n            * TABULAR\n\n          * `query`: Preset option controlling parameters for speed-precision trade-off when querying for examples. If omitted, defaults to `PRECISE`.\n          Possible values:\n            * PRECISE\n            * FAST\n\n        * `neighbor_count`: The number of neighbors to return when querying for examples.\n\n        * `example_gcs_source`: The Cloud Storage input instances.\n\n          * `gcs_source`: The Google Cloud Storage location for the input content.\n\n            * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n          * `data_format`: The format in which instances are given, if not specified, assume it's JSONL format. Currently only JSONL format is supported.\n          Possible values:\n            * DATA_FORMAT_UNSPECIFIED\n            * JSONL\n\n        * `nearest_neighbor_search_config`: The full configuration for the generated index, the semantics are the same as metadata and should match [NearestNeighborSearchConfig](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-example-based#nearest-neighbor-search-config).\n\n      * `xrai_attribution`: An explanation method that redistributes Integrated Gradients attributions to segmented regions, taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1906.02825 Supported only by image Models.\n\n        * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n          * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n            * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n              * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n              * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n          * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n          * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n        * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is met within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n        * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n          * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n      * `top_k`: If populated, returns attributions for top K indices of outputs (defaults to 1). Only applies to Models that predicts more than one outputs (e,g, multi-class Models). When set to -1, returns explanations for all outputs.\n\n      * `integrated_gradients_attribution`: An attribution method that computes the Aumann-Shapley value taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1703.01365\n\n        * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n        * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n          * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n            * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n              * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n              * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n          * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n          * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n        * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n          * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n      * `sampled_shapley_attribution`: An attribution method that approximates Shapley values for features that contribute to the label being predicted. A sampling strategy is used to approximate the value rather than considering all subsets of features.\n\n        * `path_count`: Required. The number of feature permutations to consider when approximating the Shapley values. Valid range of its value is [1, 50], inclusively.\n\n    * `metadata`: Metadata describing the Model's input and output for explanation.\n\n      * `feature_attributions_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of the feature attributions. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML tabular Models always have this field populated by Vertex AI. Note: The URI given on output may be different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `latent_space_source`: Name of the source to generate embeddings for example based explanations.\n\n      * `outputs`: Required. Map from output names to output metadata. For Vertex AI-provided Tensorflow images, keys can be any user defined string that consists of any UTF-8 characters. For custom images, keys are the name of the output field in the prediction to be explained. Currently only one key is allowed.\n\n        * `additional_properties`: Metadata of the prediction output to be explained.\n\n      * `inputs`: Required. Map from feature names to feature input metadata. Keys are the name of the features. Values are the specification of the feature. An empty InputMetadata is valid. It describes a text feature which has the name specified as the key in ExplanationMetadata.inputs. The baseline of the empty feature is chosen by Vertex AI. For Vertex AI-provided Tensorflow images, the key can be any friendly name of the feature. Once specified, featureAttributions are keyed by this key (if not grouped with another feature). For custom images, the key must match with the key in instance.\n\n        * `additional_properties`: Metadata of the input of a feature. Fields other than InputMetadata.input_baselines are applicable only for Models that are using Vertex AI-provided images for Tensorflow.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `pipeline_job`: Optional. This field is populated if the model is produced by a pipeline job.\n\n  * `predict_schemata`: Contains the schemata used in Model's predictions and explanations via PredictionService.Predict, PredictionService.Explain and BatchPredictionJob.\n\n    * `instance_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single instance, which are used in PredictRequest.instances, ExplainRequest.instances and BatchPredictionJob.input_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n    * `parameters_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the parameters of prediction and explanation via PredictRequest.parameters, ExplainRequest.parameters and BatchPredictionJob.model_parameters. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI, if no parameters are supported, then it is set to an empty string. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n    * `prediction_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single prediction produced by this Model, which are returned via PredictResponse.predictions, ExplainResponse.explanations, and BatchPredictionJob.output_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n  * `version_update_time`: Output only. Timestamp when this version was most recently updated.\n\n  * `supported_export_formats`: Output only. The formats in which this Model may be exported. If empty, this Model is not available for export.\n\n    * `exportable_contents`: Output only. The content of this Model that may be exported.\n\n    * `id`: Output only. The ID of the export format. The possible format IDs are: * `tflite` Used for Android mobile devices. * `edgetpu-tflite` Used for [Edge TPU](https://cloud.google.com/edge-tpu/) devices. * `tf-saved-model` A tensorflow model in SavedModel format. * `tf-js` A [TensorFlow.js](https://www.tensorflow.org/js) model that can be used in the browser and in Node.js using JavaScript. * `core-ml` Used for iOS mobile devices. * `custom-trained` A Model that was uploaded or trained by custom code.\n\n  * `original_model_info`: Contains information about the original Model if this Model is a copy.\n\n    * `model`: Output only. The resource name of the Model this Model is a copy of, including the revision. Format: `projects/{project}/locations/{location}/models/{model_id}@{version_id}`\n\n  * `metadata_artifact`: Output only. The resource name of the Artifact that was created in MetadataStore when creating the Model. The Artifact resource name pattern is `projects/{project}/locations/{location}/metadataStores/{metadata_store}/artifacts/{artifact}`.\n\n  * `supported_input_storage_formats`: Output only. The formats this Model supports in BatchPredictionJob.input_config. If PredictSchemata.instance_schema_uri exists, the instances should be given as per that schema. The possible formats are: * `jsonl` The JSON Lines format, where each instance is a single line. Uses GcsSource. * `csv` The CSV format, where each instance is a single comma-separated line. The first line in the file is the header, containing comma-separated field names. Uses GcsSource. * `tf-record` The TFRecord format, where each instance is a single record in tfrecord syntax. Uses GcsSource. * `tf-record-gzip` Similar to `tf-record`, but the file is gzipped. Uses GcsSource. * `bigquery` Each instance is a single row in BigQuery. Uses BigQuerySource. * `file-list` Each line of the file is the location of an instance to process, uses `gcs_source` field of the InputConfig object. If this Model doesn't support any of these formats it means it cannot be used with a BatchPredictionJob. However, if it has supported_deployment_resources_types, it could serve online predictions by using PredictionService.Predict or PredictionService.Explain.\n\n  * `metadata_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing additional information about the Model, that is specific to it. Unset if the Model does not have any additional information. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI, if no additional metadata is needed, this field is set to an empty string. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n  * `container_spec`: Specification of a container for serving predictions. Some fields in this message correspond to fields in the [Kubernetes Container v1 core specification](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n    * `predict_route`: Immutable. HTTP path on the container to send prediction requests to. Vertex AI forwards requests sent using projects.locations.endpoints.predict to this path on the container's IP address and port. Vertex AI then returns the container's response in the API response. For example, if you set this field to `/foo`, then when Vertex AI receives a prediction request, it forwards the request body in a POST request to the `/foo` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n    * `image_uri`: Required. Immutable. URI of the Docker image to be used as the custom container for serving predictions. This URI must identify an image in Artifact Registry or Container Registry. Learn more about the [container publishing requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#publishing), including permissions requirements for the Vertex AI Service Agent. The container image is ingested upon ModelService.UploadModel, stored internally, and this original path is afterwards not used. To learn about the requirements for the Docker image itself, see [Custom container requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#). You can use the URI to one of Vertex AI's [pre-built container images for prediction](https://cloud.google.com/vertex-ai/docs/predictions/pre-built-containers) in this field.\n\n    * `env`: Immutable. List of environment variables to set in the container. After the container starts running, code running in the container can read these environment variables. Additionally, the command and args fields can reference these variables. Later entries in this list can also reference earlier entries. For example, the following example sets the variable `VAR_2` to have the value `foo bar`: ```json [ { \"name\": \"VAR_1\", \"value\": \"foo\" }, { \"name\": \"VAR_2\", \"value\": \"$(VAR_1) bar\" } ] ``` If you switch the order of the variables in the example, then the expansion does not occur. This field corresponds to the `env` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n      * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n    * `args`: Immutable. Specifies arguments for the command that runs when the container starts. This overrides the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd). Specify this field as an array of executable and arguments, similar to a Docker `CMD`'s \"default parameters\" form. If you don't specify this field but do specify the command field, then the command from the `command` field runs without any additional arguments. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). If you don't specify this field and don't specify the `command` field, then the container's [`ENTRYPOINT`](https://docs.docker.com/engine/reference/builder/#cmd) and `CMD` determine what runs based on their default behavior. See the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `args` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n    * `command`: Immutable. Specifies the command that runs when the container starts. This overrides the container's [ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint). Specify this field as an array of executable and arguments, similar to a Docker `ENTRYPOINT`'s \"exec\" form, not its \"shell\" form. If you do not specify this field, then the container's `ENTRYPOINT` runs, in conjunction with the args field or the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd), if either exists. If this field is not specified and the container does not have an `ENTRYPOINT`, then refer to the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). If you specify this field, then you can also specify the `args` field to provide additional arguments for this command. However, if you specify this field, then the container's `CMD` is ignored. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `command` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n    * `ports`: Immutable. List of ports to expose from the container. Vertex AI sends any prediction requests that it receives to the first port on this list. Vertex AI also sends [liveness and health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#liveness) to this port. If you do not specify this field, it defaults to following value: ```json [ { \"containerPort\": 8080 } ] ``` Vertex AI does not use ports other than the first one listed. This field corresponds to the `ports` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `container_port`: The number of the port to expose on the pod's IP address. Must be a valid port number, between 1 and 65535 inclusive.\n\n    * `health_route`: Immutable. HTTP path on the container to send health checks to. Vertex AI intermittently sends GET requests to this path on the container's IP address and port to check that the container is healthy. Read more about [health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#health). For example, if you set this field to `/bar`, then Vertex AI intermittently sends a GET request to the `/bar` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/ DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n  * `version_id`: Output only. Immutable. The version ID of the model. A new version is committed when a new model version is uploaded or trained under an existing model id. It is an auto-incrementing decimal number in string representation.\n\n  * `artifact_uri`: Immutable. The path to the directory containing the Model artifact and any of its supporting files. Not present for AutoML Models or Large Models.\n\n  * `training_pipeline`: Output only. The resource name of the TrainingPipeline that uploaded this Model, if any.\n\n  * `display_name`: Required. The display name of the Model. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `supported_deployment_resources_types`: Output only. When this Model is deployed, its prediction resources are described by the `prediction_resources` field of the Endpoint.deployed_models object. Because not all Models support all resource configuration types, the configuration types this Model supports are listed here. If no configuration types are listed, the Model cannot be deployed to an Endpoint and does not support online predictions (PredictionService.Predict or PredictionService.Explain). Such a Model can serve predictions by using a BatchPredictionJob, if it has at least one entry each in supported_input_storage_formats and supported_output_storage_formats.\n\n  * `supported_output_storage_formats`: Output only. The formats this Model supports in BatchPredictionJob.output_config. If both PredictSchemata.instance_schema_uri and PredictSchemata.prediction_schema_uri exist, the predictions are returned together with their instances. In other words, the prediction has the original instance data first, followed by the actual prediction content (as per the schema). The possible formats are: * `jsonl` The JSON Lines format, where each prediction is a single line. Uses GcsDestination. * `csv` The CSV format, where each prediction is a single comma-separated line. The first line in the file is the header, containing comma-separated field names. Uses GcsDestination. * `bigquery` Each prediction is a single row in a BigQuery table, uses BigQueryDestination . If this Model doesn't support any of these formats it means it cannot be used with a BatchPredictionJob. However, if it has supported_deployment_resources_types, it could serve online predictions by using PredictionService.Predict or PredictionService.Explain.\n\n  * `version_aliases`: User provided version aliases so that a model version can be referenced via alias (i.e. `projects/{project}/locations/{location}/models/{model_id}@{version_alias}` instead of auto-generated version id (i.e. `projects/{project}/locations/{location}/models/{model_id}@{version_id})`. The format is a-z{0,126}[a-z0-9] to distinguish from version_id. A default version alias will be created for the first version of the model, and there must be exactly one default version alias for a model.\n\n  * `version_create_time`: Output only. Timestamp when this version was created.\n\n  * `version_description`: The description of this version.\n\n  * `labels`: The labels with user-defined metadata to organize your Models. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_model_deployment_monitoring_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_model_deployment_monitoring_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_model_deployment_monitoring_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_model_deployment_monitoring_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_model_deployment_monitoring_job` InSpec audit resource to to test a Google Cloud ModelDeploymentMonitoringJob resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_model_deployment_monitoring_job(name: \"projects/#{gcp_project_id}/locations/#{model_deployment_monitoring_job['region']}/modelDeploymentMonitoringJobs/#{model_deployment_monitoring_job['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('state') { should cmp 'value_state' }\n\tits('analysis_instance_schema_uri') { should cmp 'value_analysisinstanceschemauri' }\n\tits('endpoint') { should cmp 'value_endpoint' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('schedule_state') { should cmp 'value_schedulestate' }\n\tits('predict_instance_schema_uri') { should cmp 'value_predictinstanceschemauri' }\n\tits('next_schedule_time') { should cmp 'value_nextscheduletime' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('log_ttl') { should cmp 'value_logttl' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_model_deployment_monitoring_job(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_model_deployment_monitoring_job` resource:\n\n\n  * `model_deployment_monitoring_objective_configs`: Required. The config for monitoring objectives. This is a per DeployedModel config. Each DeployedModel needs to be configured separately.\n\n    * `objective_config`: The objective configuration for model monitoring, including the information needed to detect anomalies for one particular model.\n\n      * `explanation_config`: The config for integrating with Vertex Explainable AI. Only applicable if the Model has explanation_spec populated.\n\n        * `explanation_baseline`: Output from BatchPredictionJob for Model Monitoring baseline dataset, which can be used to generate baseline attribution scores.\n\n          * `prediction_format`: The storage format of the predictions generated BatchPrediction job.\n          Possible values:\n            * PREDICTION_FORMAT_UNSPECIFIED\n            * JSONL\n            * BIGQUERY\n\n          * `gcs`: The Google Cloud Storage location where the output is to be written to.\n\n            * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n          * `bigquery`: The BigQuery location for the output content.\n\n            * `output_uri`: Required. BigQuery URI to a project or table, up to 2000 characters long. When only the project is specified, the Dataset and Table is created. When the full table reference is specified, the Dataset must exist and table must not exist. Accepted forms: * BigQuery path. For example: `bq://projectId` or `bq://projectId.bqDatasetId` or `bq://projectId.bqDatasetId.bqTableId`.\n\n        * `enable_feature_attributes`: If want to analyze the Vertex Explainable AI feature attribute scores or not. If set to true, Vertex AI will log the feature attributions from explain response and do the skew/drift detection for them.\n\n      * `training_dataset`: Training Dataset information.\n\n        * `logging_sampling_strategy`: Sampling Strategy for logging, can be for both training and prediction dataset.\n\n          * `random_sample_config`: Requests are randomly selected.\n\n            * `sample_rate`: Sample rate (0, 1]\n\n        * `dataset`: The resource name of the Dataset used to train this Model.\n\n        * `gcs_source`: The Google Cloud Storage location for the input content.\n\n          * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n        * `target_field`: The target field name the model is to predict. This field will be excluded when doing Predict and (or) Explain for the training data.\n\n        * `bigquery_source`: The BigQuery location for the input content.\n\n          * `input_uri`: Required. BigQuery URI to a table, up to 2000 characters long. Accepted forms: * BigQuery path. For example: `bq://projectId.bqDatasetId.bqTableId`.\n\n        * `data_format`: Data format of the dataset, only applicable if the input is from Google Cloud Storage. The possible formats are: \"tf-record\" The source file is a TFRecord file. \"csv\" The source file is a CSV file. \"jsonl\" The source file is a JSONL file.\n\n      * `training_prediction_skew_detection_config`: The config for Training & Prediction data skew detection. It specifies the training dataset sources and the skew detection parameters.\n\n        * `skew_thresholds`: Key is the feature name and value is the threshold. If a feature needs to be monitored for skew, a value threshold must be configured for that feature. The threshold here is against feature distribution distance between the training and prediction feature.\n\n          * `additional_properties`: The config for feature monitoring threshold.\n\n        * `default_skew_threshold`: The config for feature monitoring threshold.\n\n          * `value`: Specify a threshold value that can trigger the alert. If this threshold config is for feature distribution distance: 1. For categorical feature, the distribution distance is calculated by L-inifinity norm. 2. For numerical feature, the distribution distance is calculated by Jensen–Shannon divergence. Each feature must have a non-zero threshold if they need to be monitored. Otherwise no alert will be triggered for that feature.\n\n        * `attribution_score_skew_thresholds`: Key is the feature name and value is the threshold. The threshold here is against attribution score distance between the training and prediction feature.\n\n          * `additional_properties`: The config for feature monitoring threshold.\n\n      * `prediction_drift_detection_config`: The config for Prediction data drift detection.\n\n        * `attribution_score_drift_thresholds`: Key is the feature name and value is the threshold. The threshold here is against attribution score distance between different time windows.\n\n          * `additional_properties`: The config for feature monitoring threshold.\n\n        * `drift_thresholds`: Key is the feature name and value is the threshold. If a feature needs to be monitored for drift, a value threshold must be configured for that feature. The threshold here is against feature distribution distance between different time windws.\n\n          * `additional_properties`: The config for feature monitoring threshold.\n\n        * `default_drift_threshold`: The config for feature monitoring threshold.\n\n          * `value`: Specify a threshold value that can trigger the alert. If this threshold config is for feature distribution distance: 1. For categorical feature, the distribution distance is calculated by L-inifinity norm. 2. For numerical feature, the distribution distance is calculated by Jensen–Shannon divergence. Each feature must have a non-zero threshold if they need to be monitored. Otherwise no alert will be triggered for that feature.\n\n    * `deployed_model_id`: The DeployedModel ID of the objective config.\n\n  * `labels`: The labels with user-defined metadata to organize your ModelDeploymentMonitoringJob. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `state`: Output only. The detailed state of the monitoring job. When the job is still creating, the state will be 'PENDING'. Once the job is successfully created, the state will be 'RUNNING'. Pause the job, the state will be 'PAUSED'. Resume the job, the state will return to 'RUNNING'.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * JOB_STATE_QUEUED\n    * JOB_STATE_PENDING\n    * JOB_STATE_RUNNING\n    * JOB_STATE_SUCCEEDED\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_PAUSED\n    * JOB_STATE_EXPIRED\n    * JOB_STATE_UPDATING\n    * JOB_STATE_PARTIALLY_SUCCEEDED\n\n  * `analysis_instance_schema_uri`: YAML schema file uri describing the format of a single instance that you want Tensorflow Data Validation (TFDV) to analyze. If this field is empty, all the feature data types are inferred from predict_instance_schema_uri, meaning that TFDV will use the data in the exact format(data type) as prediction request/response. If there are any data type differences between predict instance and TFDV instance, this field can be used to override the schema. For models trained with Vertex AI, this field must be set as all the fields in predict instance formatted as string.\n\n  * `enable_monitoring_pipeline_logs`: If true, the scheduled monitoring pipeline logs are sent to Google Cloud Logging, including pipeline status and anomalies detected. Please note the logs incur cost, which are subject to [Cloud Logging pricing](https://cloud.google.com/logging#pricing).\n\n  * `endpoint`: Required. Endpoint resource name. Format: `projects/{project}/locations/{location}/endpoints/{endpoint}`\n\n  * `logging_sampling_strategy`: Sampling Strategy for logging, can be for both training and prediction dataset.\n\n    * `random_sample_config`: Requests are randomly selected.\n\n      * `sample_rate`: Sample rate (0, 1]\n\n  * `bigquery_tables`: Output only. The created bigquery tables for the job under customer project. Customer could do their own query & analysis. There could be 4 log tables in maximum: 1. Training data logging predict request/response 2. Serving data logging predict request/response\n\n    * `log_source`: The source of log.\n    Possible values:\n      * LOG_SOURCE_UNSPECIFIED\n      * TRAINING\n      * SERVING\n\n    * `bigquery_table_path`: The created BigQuery table to store logs. Customer could do their own query & analysis. Format: `bq://.model_deployment_monitoring_._`\n\n    * `log_type`: The type of log.\n    Possible values:\n      * LOG_TYPE_UNSPECIFIED\n      * PREDICT\n      * EXPLAIN\n\n  * `display_name`: Required. The user-defined name of the ModelDeploymentMonitoringJob. The name can be up to 128 characters long and can consist of any UTF-8 characters. Display name of a ModelDeploymentMonitoringJob.\n\n  * `schedule_state`: Output only. Schedule state when the monitoring job is in Running state.\n  Possible values:\n    * MONITORING_SCHEDULE_STATE_UNSPECIFIED\n    * PENDING\n    * OFFLINE\n    * RUNNING\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `model_monitoring_alert_config`: \n\n    * `email_alert_config`: The config for email alert.\n\n      * `user_emails`: The email addresses to send the alert.\n\n    * `enable_logging`: Dump the anomalies to Cloud Logging. The anomalies will be put to json payload encoded from proto google.cloud.aiplatform.logging.ModelMonitoringAnomaliesLogEntry. This can be further sinked to Pub/Sub or any other services supported by Cloud Logging.\n\n  * `latest_monitoring_pipeline_metadata`: All metadata of most recent monitoring pipelines.\n\n    * `status`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n      * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n      * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n      * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n    * `run_time`: The time that most recent monitoring pipelines that is related to this run.\n\n  * `sample_predict_instance`: Sample Predict instance, same format as PredictRequest.instances, this can be set as a replacement of ModelDeploymentMonitoringJob.predict_instance_schema_uri. If not set, we will generate predict schema from collected predict requests.\n\n  * `predict_instance_schema_uri`: YAML schema file uri describing the format of a single instance, which are given to format this Endpoint's prediction (and explanation). If not set, we will generate predict schema from collected predict requests.\n\n  * `next_schedule_time`: Output only. Timestamp when this monitoring pipeline will be scheduled to run for the next round.\n\n  * `create_time`: Output only. Timestamp when this ModelDeploymentMonitoringJob was created.\n\n  * `log_ttl`: The TTL of BigQuery tables in user projects which stores logs. A day is the basic unit of the TTL and we take the ceil of TTL/86400(a day). e.g. { second: 3600} indicates ttl = 1 day.\n\n  * `stats_anomalies_base_directory`: The Google Cloud Storage location where the output is to be written to.\n\n    * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n  * `update_time`: Output only. Timestamp when this ModelDeploymentMonitoringJob was updated most recently.\n\n  * `model_deployment_monitoring_schedule_config`: The config for scheduling monitoring job.\n\n    * `monitor_window`: The time window of the prediction data being included in each prediction dataset. This window specifies how long the data should be collected from historical model results for each run. If not set, ModelDeploymentMonitoringScheduleConfig.monitor_interval will be used. e.g. If currently the cutoff time is 2022-01-08 14:30:00 and the monitor_window is set to be 3600, then data from 2022-01-08 13:30:00 to 2022-01-08 14:30:00 will be retrieved and aggregated to calculate the monitoring statistics.\n\n    * `monitor_interval`: Required. The model monitoring job scheduling interval. It will be rounded up to next full hour. This defines how often the monitoring jobs are triggered.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `name`: Output only. Resource name of a ModelDeploymentMonitoringJob.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_model_deployment_monitoring_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_model_deployment_monitoring_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_model_deployment_monitoring_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_model_deployment_monitoring_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_model_deployment_monitoring_jobs` InSpec audit resource to to test a Google Cloud ModelDeploymentMonitoringJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_model_deployment_monitoring_jobs(parent: \"projects/#{gcp_project_id}/locations/#{model_deployment_monitoring_job['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_model_deployment_monitoring_jobs` resource:\n\nSee [google_vertex_ai_model_deployment_monitoring_job](google_vertex_ai_model_deployment_monitoring_job) for more detailed information.\n\n  * `model_deployment_monitoring_objective_configs`: an array of `google_vertex_ai_model_deployment_monitoring_job` model_deployment_monitoring_objective_configs\n  * `labels`: an array of `google_vertex_ai_model_deployment_monitoring_job` labels\n  * `states`: an array of `google_vertex_ai_model_deployment_monitoring_job` state\n  * `analysis_instance_schema_uris`: an array of `google_vertex_ai_model_deployment_monitoring_job` analysis_instance_schema_uri\n  * `enable_monitoring_pipeline_logs`: an array of `google_vertex_ai_model_deployment_monitoring_job` enable_monitoring_pipeline_logs\n  * `endpoints`: an array of `google_vertex_ai_model_deployment_monitoring_job` endpoint\n  * `logging_sampling_strategies`: an array of `google_vertex_ai_model_deployment_monitoring_job` logging_sampling_strategy\n  * `bigquery_tables`: an array of `google_vertex_ai_model_deployment_monitoring_job` bigquery_tables\n  * `display_names`: an array of `google_vertex_ai_model_deployment_monitoring_job` display_name\n  * `schedule_states`: an array of `google_vertex_ai_model_deployment_monitoring_job` schedule_state\n  * `errors`: an array of `google_vertex_ai_model_deployment_monitoring_job` error\n  * `model_monitoring_alert_configs`: an array of `google_vertex_ai_model_deployment_monitoring_job` model_monitoring_alert_config\n  * `latest_monitoring_pipeline_metadata`: an array of `google_vertex_ai_model_deployment_monitoring_job` latest_monitoring_pipeline_metadata\n  * `sample_predict_instances`: an array of `google_vertex_ai_model_deployment_monitoring_job` sample_predict_instance\n  * `predict_instance_schema_uris`: an array of `google_vertex_ai_model_deployment_monitoring_job` predict_instance_schema_uri\n  * `next_schedule_times`: an array of `google_vertex_ai_model_deployment_monitoring_job` next_schedule_time\n  * `create_times`: an array of `google_vertex_ai_model_deployment_monitoring_job` create_time\n  * `log_ttls`: an array of `google_vertex_ai_model_deployment_monitoring_job` log_ttl\n  * `stats_anomalies_base_directories`: an array of `google_vertex_ai_model_deployment_monitoring_job` stats_anomalies_base_directory\n  * `update_times`: an array of `google_vertex_ai_model_deployment_monitoring_job` update_time\n  * `model_deployment_monitoring_schedule_configs`: an array of `google_vertex_ai_model_deployment_monitoring_job` model_deployment_monitoring_schedule_config\n  * `encryption_specs`: an array of `google_vertex_ai_model_deployment_monitoring_job` encryption_spec\n  * `names`: an array of `google_vertex_ai_model_deployment_monitoring_job` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_model_evaluation_slice.md",
    "content": "+++\ntitle = \"google_vertex_ai_model_evaluation_slice resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_model_evaluation_slice\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_model_evaluation_slice resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_model_evaluation_slice` InSpec audit resource to to test a Google Cloud ModelEvaluationSlice resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_model_evaluation_slice(name: \"projects/#{gcp_project_id}/locations/#{models_evaluations_slice['region']}/models/#{models_evaluations_slice['model']}/evaluations/#{models_evaluations_slice['evaluation']}/slices/#{models_evaluations_slice['slice']}\", region: ' value_region') do\n\tit { should exist }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('name') { should cmp 'value_name' }\n\tits('metrics_schema_uri') { should cmp 'value_metricsschemauri' }\n\nend\n\ndescribe google_vertex_ai_model_evaluation_slice(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_model_evaluation_slice` resource:\n\n\n  * `create_time`: Output only. Timestamp when this ModelEvaluationSlice was created.\n\n  * `model_explanation`: Aggregated explanation metrics for a Model over a set of instances.\n\n    * `mean_attributions`: Output only. Aggregated attributions explaining the Model's prediction outputs over the set of instances. The attributions are grouped by outputs. For Models that predict only one output, such as regression Models that predict only one score, there is only one attibution that explains the predicted output. For Models that predict multiple outputs, such as multiclass Models that predict multiple classes, each element explains one specific item. Attribution.output_index can be used to identify which output this attribution is explaining. The baselineOutputValue, instanceOutputValue and featureAttributions fields are averaged over the test data. NOTE: Currently AutoML tabular classification Models produce only one attribution, which averages attributions over all the classes it predicts. Attribution.approximation_error is not populated.\n\n      * `output_display_name`: Output only. The display name of the output identified by output_index. For example, the predicted class name by a multi-classification Model. This field is only populated iff the Model predicts display names as a separate field along with the explained output. The predicted display name must has the same shape of the explained output, and can be located using output_index.\n\n      * `baseline_output_value`: Output only. Model predicted output if the input instance is constructed from the baselines of all the features defined in ExplanationMetadata.inputs. The field name of the output is determined by the key in ExplanationMetadata.outputs. If the Model's predicted output has multiple dimensions (rank > 1), this is the value in the output located by output_index. If there are multiple baselines, their output values are averaged.\n\n      * `output_name`: Output only. Name of the explain output. Specified as the key in ExplanationMetadata.outputs.\n\n      * `feature_attributions`: Output only. Attributions of each explained feature. Features are extracted from the prediction instances according to explanation metadata for inputs. The value is a struct, whose keys are the name of the feature. The values are how much the feature in the instance contributed to the predicted result. The format of the value is determined by the feature's input format: * If the feature is a scalar value, the attribution value is a floating number. * If the feature is an array of scalar values, the attribution value is an array. * If the feature is a struct, the attribution value is a struct. The keys in the attribution value struct are the same as the keys in the feature struct. The formats of the values in the attribution struct are determined by the formats of the values in the feature struct. The ExplanationMetadata.feature_attributions_schema_uri field, pointed to by the ExplanationSpec field of the Endpoint.deployed_models object, points to the schema file that describes the features and their attribution values (if it is populated).\n\n      * `output_index`: Output only. The index that locates the explained prediction output. If the prediction output is a scalar value, output_index is not populated. If the prediction output has multiple dimensions, the length of the output_index list is the same as the number of dimensions of the output. The i-th element in output_index is the element index of the i-th dimension of the output vector. Indices start from 0.\n\n      * `instance_output_value`: Output only. Model predicted output on the corresponding explanation instance. The field name of the output is determined by the key in ExplanationMetadata.outputs. If the Model predicted output has multiple dimensions, this is the value in the output located by output_index.\n\n      * `approximation_error`: Output only. Error of feature_attributions caused by approximation used in the explanation method. Lower value means more precise attributions. * For Sampled Shapley attribution, increasing path_count might reduce the error. * For Integrated Gradients attribution, increasing step_count might reduce the error. * For XRAI attribution, increasing step_count might reduce the error. See [this introduction](/vertex-ai/docs/explainable-ai/overview) for more information.\n\n  * `name`: Output only. The resource name of the ModelEvaluationSlice.\n\n  * `metrics`: Output only. Sliced evaluation metrics of the Model. The schema of the metrics is stored in metrics_schema_uri\n\n  * `slice`: Definition of a slice.\n\n    * `value`: Output only. The value of the dimension in this slice.\n\n    * `dimension`: Output only. The dimension of the slice. Well-known dimensions are: * `annotationSpec`: This slice is on the test data that has either ground truth or prediction with AnnotationSpec.display_name equals to value. * `slice`: This slice is a user customized slice defined by its SliceSpec.\n\n    * `slice_spec`: Specification for how the data should be sliced.\n\n      * `configs`: Mapping configuration for this SliceSpec. The key is the name of the feature. By default, the key will be prefixed by \"instance\" as a dictionary prefix for Vertex Batch Predictions output format.\n\n        * `additional_properties`: Specification message containing the config for this SliceSpec. When `kind` is selected as `value` and/or `range`, only a single slice will be computed. When `all_values` is present, a separate slice will be computed for each possible label/value for the corresponding key in `config`. Examples, with feature zip_code with values 12345, 23334, 88888 and feature country with values \"US\", \"Canada\", \"Mexico\" in the dataset: Example 1: { \"zip_code\": { \"value\": { \"float_value\": 12345.0 } } } A single slice for any data with zip_code 12345 in the dataset. Example 2: { \"zip_code\": { \"range\": { \"low\": 12345, \"high\": 20000 } } } A single slice containing data where the zip_codes between 12345 and 20000 For this example, data with the zip_code of 12345 will be in this slice. Example 3: { \"zip_code\": { \"range\": { \"low\": 10000, \"high\": 20000 } }, \"country\": { \"value\": { \"string_value\": \"US\" } } } A single slice containing data where the zip_codes between 10000 and 20000 has the country \"US\". For this example, data with the zip_code of 12345 and country \"US\" will be in this slice. Example 4: { \"country\": {\"all_values\": { \"value\": true } } } Three slices are computed, one for each unique country in the dataset. Example 5: { \"country\": { \"all_values\": { \"value\": true } }, \"zip_code\": { \"value\": { \"float_value\": 12345.0 } } } Three slices are computed, one for each unique country in the dataset where the zip_code is also 12345. For this example, data with zip_code 12345 and country \"US\" will be in one slice, zip_code 12345 and country \"Canada\" in another slice, and zip_code 12345 and country \"Mexico\" in another slice, totaling 3 slices.\n\n  * `metrics_schema_uri`: Output only. Points to a YAML file stored on Google Cloud Storage describing the metrics of this ModelEvaluationSlice. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject).\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_model_evaluation_slices.md",
    "content": "+++\ntitle = \"google_vertex_ai_model_evaluation_slices resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_model_evaluation_slices\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_model_evaluation_slices resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_model_evaluation_slices` InSpec audit resource to to test a Google Cloud ModelEvaluationSlice resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_model_evaluation_slices(parent: \"projects/#{gcp_project_id}/locations/#{models_evaluations_slice['region']}/models/#{models_evaluations_slice['model']}/evaluations/#{models_evaluations_slice['evaluation']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_model_evaluation_slices` resource:\n\nSee [google_vertex_ai_model_evaluation_slice](google_vertex_ai_model_evaluation_slice) for more detailed information.\n\n  * `create_times`: an array of `google_vertex_ai_model_evaluation_slice` create_time\n  * `model_explanations`: an array of `google_vertex_ai_model_evaluation_slice` model_explanation\n  * `names`: an array of `google_vertex_ai_model_evaluation_slice` name\n  * `metrics`: an array of `google_vertex_ai_model_evaluation_slice` metrics\n  * `slices`: an array of `google_vertex_ai_model_evaluation_slice` slice\n  * `metrics_schema_uris`: an array of `google_vertex_ai_model_evaluation_slice` metrics_schema_uri\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_models.md",
    "content": "+++\ntitle = \"google_vertex_ai_models resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_models\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_models resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_models` InSpec audit resource to to test a Google Cloud Model resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_models(parent: \"projects/#{gcp_project_id}/locations/#{model['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_models` resource:\n\nSee [google_vertex_ai_model](google_vertex_ai_model) for more detailed information.\n\n  * `model_source_infos`: an array of `google_vertex_ai_model` model_source_info\n  * `names`: an array of `google_vertex_ai_model` name\n  * `metadata`: an array of `google_vertex_ai_model` metadata\n  * `update_times`: an array of `google_vertex_ai_model` update_time\n  * `etags`: an array of `google_vertex_ai_model` etag\n  * `descriptions`: an array of `google_vertex_ai_model` description\n  * `deployed_models`: an array of `google_vertex_ai_model` deployed_models\n  * `create_times`: an array of `google_vertex_ai_model` create_time\n  * `explanation_specs`: an array of `google_vertex_ai_model` explanation_spec\n  * `encryption_specs`: an array of `google_vertex_ai_model` encryption_spec\n  * `pipeline_jobs`: an array of `google_vertex_ai_model` pipeline_job\n  * `predict_schemata`: an array of `google_vertex_ai_model` predict_schemata\n  * `version_update_times`: an array of `google_vertex_ai_model` version_update_time\n  * `supported_export_formats`: an array of `google_vertex_ai_model` supported_export_formats\n  * `original_model_infos`: an array of `google_vertex_ai_model` original_model_info\n  * `metadata_artifacts`: an array of `google_vertex_ai_model` metadata_artifact\n  * `supported_input_storage_formats`: an array of `google_vertex_ai_model` supported_input_storage_formats\n  * `metadata_schema_uris`: an array of `google_vertex_ai_model` metadata_schema_uri\n  * `container_specs`: an array of `google_vertex_ai_model` container_spec\n  * `version_ids`: an array of `google_vertex_ai_model` version_id\n  * `artifact_uris`: an array of `google_vertex_ai_model` artifact_uri\n  * `training_pipelines`: an array of `google_vertex_ai_model` training_pipeline\n  * `display_names`: an array of `google_vertex_ai_model` display_name\n  * `supported_deployment_resources_types`: an array of `google_vertex_ai_model` supported_deployment_resources_types\n  * `supported_output_storage_formats`: an array of `google_vertex_ai_model` supported_output_storage_formats\n  * `version_aliases`: an array of `google_vertex_ai_model` version_aliases\n  * `version_create_times`: an array of `google_vertex_ai_model` version_create_time\n  * `version_descriptions`: an array of `google_vertex_ai_model` version_description\n  * `labels`: an array of `google_vertex_ai_model` labels\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_models_evaluation.md",
    "content": "+++\ntitle = \"google_vertex_ai_models_evaluation resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_models_evaluation\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_models_evaluation resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_models_evaluation` InSpec audit resource to to test a Google Cloud ModelsEvaluation resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_models_evaluation(name: \"projects/#{gcp_project_id}/locations/#{models_evaluation['region']}/models/#{models_evaluation['model']}/evaluations/#{models_evaluation['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('data_item_schema_uri') { should cmp 'value_dataitemschemauri' }\n\tits('metrics_schema_uri') { should cmp 'value_metricsschemauri' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('annotation_schema_uri') { should cmp 'value_annotationschemauri' }\n\tits('name') { should cmp 'value_name' }\n\tits('display_name') { should cmp 'value_displayname' }\n\nend\n\ndescribe google_vertex_ai_models_evaluation(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_models_evaluation` resource:\n\n\n  * `data_item_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing EvaluatedDataItemView.data_item_payload and EvaluatedAnnotation.data_item_payload. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). This field is not populated if there are neither EvaluatedDataItemViews nor EvaluatedAnnotations under this ModelEvaluation.\n\n  * `metadata`: The metadata of the ModelEvaluation. For the ModelEvaluation uploaded from Managed Pipeline, metadata contains a structured value with keys of \"pipeline_job_id\", \"evaluation_dataset_type\", \"evaluation_dataset_path\".\n\n  * `metrics_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the metrics of this ModelEvaluation. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject).\n\n  * `create_time`: Output only. Timestamp when this ModelEvaluation was created.\n\n  * `annotation_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing EvaluatedDataItemView.predictions, EvaluatedDataItemView.ground_truths, EvaluatedAnnotation.predictions, and EvaluatedAnnotation.ground_truths. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). This field is not populated if there are neither EvaluatedDataItemViews nor EvaluatedAnnotations under this ModelEvaluation.\n\n  * `metrics`: Evaluation metrics of the Model. The schema of the metrics is stored in metrics_schema_uri\n\n  * `explanation_specs`: Describes the values of ExplanationSpec that are used for explaining the predicted values on the evaluated data.\n\n    * `explanation_spec`: Specification of Model explanation.\n\n      * `parameters`: Parameters to configure explaining for Model's predictions.\n\n        * `output_indices`: If populated, only returns attributions that have output_index contained in output_indices. It must be an ndarray of integers, with the same shape of the output it's explaining. If not populated, returns attributions for top_k indices of outputs. If neither top_k nor output_indices is populated, returns the argmax index of the outputs. Only applicable to Models that predict multiple outputs (e,g, multi-class Models that predict multiple classes).\n\n        * `examples`: Example-based explainability that returns the nearest neighbors from the provided dataset.\n\n          * `presets`: Preset configuration for example-based explanations\n\n            * `modality`: The modality of the uploaded model, which automatically configures the distance measurement and feature normalization for the underlying example index and queries. If your model does not precisely fit one of these types, it is okay to choose the closest type.\n            Possible values:\n              * MODALITY_UNSPECIFIED\n              * IMAGE\n              * TEXT\n              * TABULAR\n\n            * `query`: Preset option controlling parameters for speed-precision trade-off when querying for examples. If omitted, defaults to `PRECISE`.\n            Possible values:\n              * PRECISE\n              * FAST\n\n          * `neighbor_count`: The number of neighbors to return when querying for examples.\n\n          * `example_gcs_source`: The Cloud Storage input instances.\n\n            * `gcs_source`: The Google Cloud Storage location for the input content.\n\n              * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n            * `data_format`: The format in which instances are given, if not specified, assume it's JSONL format. Currently only JSONL format is supported.\n            Possible values:\n              * DATA_FORMAT_UNSPECIFIED\n              * JSONL\n\n          * `nearest_neighbor_search_config`: The full configuration for the generated index, the semantics are the same as metadata and should match [NearestNeighborSearchConfig](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-example-based#nearest-neighbor-search-config).\n\n        * `xrai_attribution`: An explanation method that redistributes Integrated Gradients attributions to segmented regions, taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1906.02825 Supported only by image Models.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is met within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `top_k`: If populated, returns attributions for top K indices of outputs (defaults to 1). Only applies to Models that predicts more than one outputs (e,g, multi-class Models). When set to -1, returns explanations for all outputs.\n\n        * `integrated_gradients_attribution`: An attribution method that computes the Aumann-Shapley value taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1703.01365\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `sampled_shapley_attribution`: An attribution method that approximates Shapley values for features that contribute to the label being predicted. A sampling strategy is used to approximate the value rather than considering all subsets of features.\n\n          * `path_count`: Required. The number of feature permutations to consider when approximating the Shapley values. Valid range of its value is [1, 50], inclusively.\n\n      * `metadata`: Metadata describing the Model's input and output for explanation.\n\n        * `feature_attributions_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of the feature attributions. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML tabular Models always have this field populated by Vertex AI. Note: The URI given on output may be different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n        * `latent_space_source`: Name of the source to generate embeddings for example based explanations.\n\n        * `outputs`: Required. Map from output names to output metadata. For Vertex AI-provided Tensorflow images, keys can be any user defined string that consists of any UTF-8 characters. For custom images, keys are the name of the output field in the prediction to be explained. Currently only one key is allowed.\n\n          * `additional_properties`: Metadata of the prediction output to be explained.\n\n        * `inputs`: Required. Map from feature names to feature input metadata. Keys are the name of the features. Values are the specification of the feature. An empty InputMetadata is valid. It describes a text feature which has the name specified as the key in ExplanationMetadata.inputs. The baseline of the empty feature is chosen by Vertex AI. For Vertex AI-provided Tensorflow images, the key can be any friendly name of the feature. Once specified, featureAttributions are keyed by this key (if not grouped with another feature). For custom images, the key must match with the key in instance.\n\n          * `additional_properties`: Metadata of the input of a feature. Fields other than InputMetadata.input_baselines are applicable only for Models that are using Vertex AI-provided images for Tensorflow.\n\n    * `explanation_type`: Explanation type. For AutoML Image Classification models, possible values are: * `image-integrated-gradients` * `image-xrai`\n\n  * `slice_dimensions`: All possible dimensions of ModelEvaluationSlices. The dimensions can be used as the filter of the ModelService.ListModelEvaluationSlices request, in the form of `slice.dimension = `.\n\n  * `model_explanation`: Aggregated explanation metrics for a Model over a set of instances.\n\n    * `mean_attributions`: Output only. Aggregated attributions explaining the Model's prediction outputs over the set of instances. The attributions are grouped by outputs. For Models that predict only one output, such as regression Models that predict only one score, there is only one attibution that explains the predicted output. For Models that predict multiple outputs, such as multiclass Models that predict multiple classes, each element explains one specific item. Attribution.output_index can be used to identify which output this attribution is explaining. The baselineOutputValue, instanceOutputValue and featureAttributions fields are averaged over the test data. NOTE: Currently AutoML tabular classification Models produce only one attribution, which averages attributions over all the classes it predicts. Attribution.approximation_error is not populated.\n\n      * `output_display_name`: Output only. The display name of the output identified by output_index. For example, the predicted class name by a multi-classification Model. This field is only populated iff the Model predicts display names as a separate field along with the explained output. The predicted display name must has the same shape of the explained output, and can be located using output_index.\n\n      * `baseline_output_value`: Output only. Model predicted output if the input instance is constructed from the baselines of all the features defined in ExplanationMetadata.inputs. The field name of the output is determined by the key in ExplanationMetadata.outputs. If the Model's predicted output has multiple dimensions (rank > 1), this is the value in the output located by output_index. If there are multiple baselines, their output values are averaged.\n\n      * `output_name`: Output only. Name of the explain output. Specified as the key in ExplanationMetadata.outputs.\n\n      * `feature_attributions`: Output only. Attributions of each explained feature. Features are extracted from the prediction instances according to explanation metadata for inputs. The value is a struct, whose keys are the name of the feature. The values are how much the feature in the instance contributed to the predicted result. The format of the value is determined by the feature's input format: * If the feature is a scalar value, the attribution value is a floating number. * If the feature is an array of scalar values, the attribution value is an array. * If the feature is a struct, the attribution value is a struct. The keys in the attribution value struct are the same as the keys in the feature struct. The formats of the values in the attribution struct are determined by the formats of the values in the feature struct. The ExplanationMetadata.feature_attributions_schema_uri field, pointed to by the ExplanationSpec field of the Endpoint.deployed_models object, points to the schema file that describes the features and their attribution values (if it is populated).\n\n      * `output_index`: Output only. The index that locates the explained prediction output. If the prediction output is a scalar value, output_index is not populated. If the prediction output has multiple dimensions, the length of the output_index list is the same as the number of dimensions of the output. The i-th element in output_index is the element index of the i-th dimension of the output vector. Indices start from 0.\n\n      * `instance_output_value`: Output only. Model predicted output on the corresponding explanation instance. The field name of the output is determined by the key in ExplanationMetadata.outputs. If the Model predicted output has multiple dimensions, this is the value in the output located by output_index.\n\n      * `approximation_error`: Output only. Error of feature_attributions caused by approximation used in the explanation method. Lower value means more precise attributions. * For Sampled Shapley attribution, increasing path_count might reduce the error. * For Integrated Gradients attribution, increasing step_count might reduce the error. * For XRAI attribution, increasing step_count might reduce the error. See [this introduction](/vertex-ai/docs/explainable-ai/overview) for more information.\n\n  * `name`: Output only. The resource name of the ModelEvaluation.\n\n  * `display_name`: The display name of the ModelEvaluation.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_models_evaluations.md",
    "content": "+++\ntitle = \"google_vertex_ai_models_evaluations resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_models_evaluations\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_models_evaluations resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_models_evaluations` InSpec audit resource to to test a Google Cloud ModelsEvaluation resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_models_evaluations(parent: \"projects/#{gcp_project_id}/locations/#{models_evaluation['region']}/models/#{models_evaluation['model']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_models_evaluations` resource:\n\nSee [google_vertex_ai_models_evaluation](google_vertex_ai_models_evaluation) for more detailed information.\n\n  * `data_item_schema_uris`: an array of `google_vertex_ai_models_evaluation` data_item_schema_uri\n  * `metadata`: an array of `google_vertex_ai_models_evaluation` metadata\n  * `metrics_schema_uris`: an array of `google_vertex_ai_models_evaluation` metrics_schema_uri\n  * `create_times`: an array of `google_vertex_ai_models_evaluation` create_time\n  * `annotation_schema_uris`: an array of `google_vertex_ai_models_evaluation` annotation_schema_uri\n  * `metrics`: an array of `google_vertex_ai_models_evaluation` metrics\n  * `explanation_specs`: an array of `google_vertex_ai_models_evaluation` explanation_specs\n  * `slice_dimensions`: an array of `google_vertex_ai_models_evaluation` slice_dimensions\n  * `model_explanations`: an array of `google_vertex_ai_models_evaluation` model_explanation\n  * `names`: an array of `google_vertex_ai_models_evaluation` name\n  * `display_names`: an array of `google_vertex_ai_models_evaluation` display_name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_nas_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_nas_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_nas_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_nas_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_nas_job` InSpec audit resource to to test a Google Cloud NasJob resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_nas_job(name: \"projects/#{gcp_project_id}/locations/#{nas_job['region']}/nasJobs/#{nas_job['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('state') { should cmp 'value_state' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\nend\n\ndescribe google_vertex_ai_nas_job(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_nas_job` resource:\n\n\n  * `nas_job_output`: Represents a uCAIP NasJob output.\n\n    * `multi_trial_job_output`: The output of a multi-trial Neural Architecture Search (NAS) jobs.\n\n      * `search_trials`: Output only. List of NasTrials that were started as part of search stage.\n\n        * `id`: Output only. The identifier of the NasTrial assigned by the service.\n\n        * `state`: Output only. The detailed state of the NasTrial.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * REQUESTED\n          * ACTIVE\n          * STOPPING\n          * SUCCEEDED\n          * INFEASIBLE\n\n        * `final_measurement`: A message representing a Measurement of a Trial. A Measurement contains the Metrics got by executing a Trial using suggested hyperparameter values.\n\n          * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n            * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n            * `value`: Output only. The value for this metric.\n\n          * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n          * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n        * `start_time`: Output only. Time when the NasTrial was started.\n\n        * `end_time`: Output only. Time when the NasTrial's status changed to `SUCCEEDED` or `INFEASIBLE`.\n\n      * `train_trials`: Output only. List of NasTrials that were started as part of train stage.\n\n        * `id`: Output only. The identifier of the NasTrial assigned by the service.\n\n        * `state`: Output only. The detailed state of the NasTrial.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * REQUESTED\n          * ACTIVE\n          * STOPPING\n          * SUCCEEDED\n          * INFEASIBLE\n\n        * `final_measurement`: A message representing a Measurement of a Trial. A Measurement contains the Metrics got by executing a Trial using suggested hyperparameter values.\n\n          * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n            * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n            * `value`: Output only. The value for this metric.\n\n          * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n          * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n        * `start_time`: Output only. Time when the NasTrial was started.\n\n        * `end_time`: Output only. Time when the NasTrial's status changed to `SUCCEEDED` or `INFEASIBLE`.\n\n  * `name`: Output only. Resource name of the NasJob.\n\n  * `end_time`: Output only. Time when the NasJob entered any of the following states: `JOB_STATE_SUCCEEDED`, `JOB_STATE_FAILED`, `JOB_STATE_CANCELLED`.\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `state`: Output only. The detailed state of the job.\n  Possible values:\n    * JOB_STATE_UNSPECIFIED\n    * JOB_STATE_QUEUED\n    * JOB_STATE_PENDING\n    * JOB_STATE_RUNNING\n    * JOB_STATE_SUCCEEDED\n    * JOB_STATE_FAILED\n    * JOB_STATE_CANCELLING\n    * JOB_STATE_CANCELLED\n    * JOB_STATE_PAUSED\n    * JOB_STATE_EXPIRED\n    * JOB_STATE_UPDATING\n    * JOB_STATE_PARTIALLY_SUCCEEDED\n\n  * `create_time`: Output only. Time when the NasJob was created.\n\n  * `display_name`: Required. The display name of the NasJob. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `nas_job_spec`: Represents the spec of a NasJob.\n\n    * `search_space_spec`: It defines the search space for Neural Architecture Search (NAS).\n\n    * `resume_nas_job_id`: The ID of the existing NasJob in the same Project and Location which will be used to resume search. search_space_spec and nas_algorithm_spec are obtained from previous NasJob hence should not provide them again for this NasJob.\n\n    * `multi_trial_algorithm_spec`: The spec of multi-trial Neural Architecture Search (NAS).\n\n      * `search_trial_spec`: Represent spec for search trials.\n\n        * `max_failed_trial_count`: The number of failed trials that need to be seen before failing the NasJob. If set to 0, Vertex AI decides how many trials must fail before the whole job fails.\n\n        * `max_parallel_trial_count`: Required. The maximum number of trials to run in parallel.\n\n        * `search_trial_job_spec`: Represents the spec of a CustomJob.\n\n          * `worker_pool_specs`: Required. The spec of the worker pools including machine type and Docker image. All worker pools except the first one are optional and can be skipped by providing an empty value.\n\n            * `container_spec`: The spec of a Container.\n\n              * `env`: Environment variables to be passed to the container. Maximum limit is 100.\n\n                * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n                * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n              * `args`: The arguments to be passed when starting the container.\n\n              * `command`: The command to be invoked when the container is started. It overrides the entrypoint instruction in Dockerfile when provided.\n\n              * `image_uri`: Required. The URI of a container image in the Container Registry that is to be run on each worker replica.\n\n            * `machine_spec`: Specification of a single machine.\n\n              * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n              Possible values:\n                * ACCELERATOR_TYPE_UNSPECIFIED\n                * NVIDIA_TESLA_K80\n                * NVIDIA_TESLA_P100\n                * NVIDIA_TESLA_V100\n                * NVIDIA_TESLA_P4\n                * NVIDIA_TESLA_T4\n                * NVIDIA_TESLA_A100\n                * NVIDIA_A100_80GB\n                * NVIDIA_L4\n                * TPU_V2\n                * TPU_V3\n                * TPU_V4_POD\n\n              * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n              * `accelerator_count`: The number of accelerators to attach to the machine.\n\n            * `replica_count`: Optional. The number of worker replicas to use for this worker pool.\n\n            * `nfs_mounts`: Optional. List of NFS mount spec.\n\n              * `path`: Required. Source path exported from NFS server. Has to start with '/', and combined with the ip address, it indicates the source mount path in the form of `server:path`\n\n              * `mount_point`: Required. Destination mount path. The NFS will be mounted for the user under /mnt/nfs/\n\n              * `server`: Required. IP address of the NFS server.\n\n            * `python_package_spec`: The spec of a Python packaged code.\n\n              * `package_uris`: Required. The Google Cloud Storage location of the Python package files which are the training program and its dependent packages. The maximum number of package URIs is 100.\n\n              * `env`: Environment variables to be passed to the python module. Maximum limit is 100.\n\n                * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n                * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n              * `executor_image_uri`: Required. The URI of a container image in Artifact Registry that will run the provided Python package. Vertex AI provides a wide range of executor images with pre-installed packages to meet users' various use cases. See the list of [pre-built containers for training](https://cloud.google.com/vertex-ai/docs/training/pre-built-containers). You must use an image from this list.\n\n              * `args`: Command line arguments to be passed to the Python task.\n\n              * `python_module`: Required. The Python module name to run after installing the packages.\n\n            * `disk_spec`: Represents the spec of disk options.\n\n              * `boot_disk_type`: Type of the boot disk (default is \"pd-ssd\"). Valid values: \"pd-ssd\" (Persistent Disk Solid State Drive) or \"pd-standard\" (Persistent Disk Hard Disk Drive).\n\n              * `boot_disk_size_gb`: Size in GB of the boot disk (default is 100GB).\n\n          * `enable_web_access`: Optional. Whether you want Vertex AI to enable [interactive shell access](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) to training containers. If set to `true`, you can access interactive shells at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n          * `tensorboard`: Optional. The name of a Vertex AI Tensorboard resource to which this CustomJob will upload Tensorboard logs. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}`\n\n          * `experiment`: Optional. The Experiment associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}`\n\n          * `experiment_run`: Optional. The Experiment Run associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}-{experiment-run-name}`\n\n          * `scheduling`: All parameters related to queuing and scheduling of custom jobs.\n\n            * `disable_retries`: Optional. Indicates if the job should retry for internal errors after the job starts running. If true, overrides `Scheduling.restart_job_on_worker_restart` to false.\n\n            * `timeout`: The maximum job running time. The default is 7 days.\n\n            * `restart_job_on_worker_restart`: Restarts the entire CustomJob if a worker gets restarted. This feature can be used by distributed training jobs that are not resilient to workers leaving and joining a job.\n\n          * `enable_dashboard_access`: Optional. Whether you want Vertex AI to enable access to the customized dashboard in training chief container. If set to `true`, you can access the dashboard at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n          * `service_account`: Specifies the service account for workload run-as account. Users submitting jobs must have act-as permission on this run-as account. If unspecified, the [Vertex AI Custom Code Service Agent](https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents) for the CustomJob's project is used.\n\n          * `base_output_directory`: The Google Cloud Storage location where the output is to be written to.\n\n            * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n          * `reserved_ip_ranges`: Optional. A list of names for the reserved ip ranges under the VPC network that can be used for this job. If set, we will deploy the job within the provided ip ranges. Otherwise, the job will be deployed to any ip ranges under the provided VPC network. Example: ['vertex-ai-ip-range'].\n\n          * `network`: Optional. The full name of the Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the Job should be peered. For example, `projects/12345/global/networks/myVPC`. [Format](/compute/docs/reference/rest/v1/networks/insert) is of the form `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in `12345`, and {network} is a network name. To specify this field, you must have already [configured VPC Network Peering for Vertex AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering). If this field is left unspecified, the job is not peered with any network.\n\n        * `max_trial_count`: Required. The maximum number of Neural Architecture Search (NAS) trials to run.\n\n      * `multi_trial_algorithm`: The multi-trial Neural Architecture Search (NAS) algorithm type. Defaults to `REINFORCEMENT_LEARNING`.\n      Possible values:\n        * MULTI_TRIAL_ALGORITHM_UNSPECIFIED\n        * REINFORCEMENT_LEARNING\n        * GRID_SEARCH\n\n      * `train_trial_spec`: Represent spec for train trials.\n\n        * `frequency`: Required. Frequency of search trials to start train stage. Top N [TrainTrialSpec.max_parallel_trial_count] search trials will be trained for every M [TrainTrialSpec.frequency] trials searched.\n\n        * `max_parallel_trial_count`: Required. The maximum number of trials to run in parallel.\n\n        * `train_trial_job_spec`: Represents the spec of a CustomJob.\n\n          * `worker_pool_specs`: Required. The spec of the worker pools including machine type and Docker image. All worker pools except the first one are optional and can be skipped by providing an empty value.\n\n            * `container_spec`: The spec of a Container.\n\n              * `env`: Environment variables to be passed to the container. Maximum limit is 100.\n\n                * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n                * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n              * `args`: The arguments to be passed when starting the container.\n\n              * `command`: The command to be invoked when the container is started. It overrides the entrypoint instruction in Dockerfile when provided.\n\n              * `image_uri`: Required. The URI of a container image in the Container Registry that is to be run on each worker replica.\n\n            * `machine_spec`: Specification of a single machine.\n\n              * `accelerator_type`: Immutable. The type of accelerator(s) that may be attached to the machine as per accelerator_count.\n              Possible values:\n                * ACCELERATOR_TYPE_UNSPECIFIED\n                * NVIDIA_TESLA_K80\n                * NVIDIA_TESLA_P100\n                * NVIDIA_TESLA_V100\n                * NVIDIA_TESLA_P4\n                * NVIDIA_TESLA_T4\n                * NVIDIA_TESLA_A100\n                * NVIDIA_A100_80GB\n                * NVIDIA_L4\n                * TPU_V2\n                * TPU_V3\n                * TPU_V4_POD\n\n              * `machine_type`: Immutable. The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required.\n\n              * `accelerator_count`: The number of accelerators to attach to the machine.\n\n            * `replica_count`: Optional. The number of worker replicas to use for this worker pool.\n\n            * `nfs_mounts`: Optional. List of NFS mount spec.\n\n              * `path`: Required. Source path exported from NFS server. Has to start with '/', and combined with the ip address, it indicates the source mount path in the form of `server:path`\n\n              * `mount_point`: Required. Destination mount path. The NFS will be mounted for the user under /mnt/nfs/\n\n              * `server`: Required. IP address of the NFS server.\n\n            * `python_package_spec`: The spec of a Python packaged code.\n\n              * `package_uris`: Required. The Google Cloud Storage location of the Python package files which are the training program and its dependent packages. The maximum number of package URIs is 100.\n\n              * `env`: Environment variables to be passed to the python module. Maximum limit is 100.\n\n                * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n                * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n              * `executor_image_uri`: Required. The URI of a container image in Artifact Registry that will run the provided Python package. Vertex AI provides a wide range of executor images with pre-installed packages to meet users' various use cases. See the list of [pre-built containers for training](https://cloud.google.com/vertex-ai/docs/training/pre-built-containers). You must use an image from this list.\n\n              * `args`: Command line arguments to be passed to the Python task.\n\n              * `python_module`: Required. The Python module name to run after installing the packages.\n\n            * `disk_spec`: Represents the spec of disk options.\n\n              * `boot_disk_type`: Type of the boot disk (default is \"pd-ssd\"). Valid values: \"pd-ssd\" (Persistent Disk Solid State Drive) or \"pd-standard\" (Persistent Disk Hard Disk Drive).\n\n              * `boot_disk_size_gb`: Size in GB of the boot disk (default is 100GB).\n\n          * `enable_web_access`: Optional. Whether you want Vertex AI to enable [interactive shell access](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) to training containers. If set to `true`, you can access interactive shells at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n          * `tensorboard`: Optional. The name of a Vertex AI Tensorboard resource to which this CustomJob will upload Tensorboard logs. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}`\n\n          * `experiment`: Optional. The Experiment associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}`\n\n          * `experiment_run`: Optional. The Experiment Run associated with this job. Format: `projects/{project}/locations/{location}/metadataStores/{metadataStores}/contexts/{experiment-name}-{experiment-run-name}`\n\n          * `scheduling`: All parameters related to queuing and scheduling of custom jobs.\n\n            * `disable_retries`: Optional. Indicates if the job should retry for internal errors after the job starts running. If true, overrides `Scheduling.restart_job_on_worker_restart` to false.\n\n            * `timeout`: The maximum job running time. The default is 7 days.\n\n            * `restart_job_on_worker_restart`: Restarts the entire CustomJob if a worker gets restarted. This feature can be used by distributed training jobs that are not resilient to workers leaving and joining a job.\n\n          * `enable_dashboard_access`: Optional. Whether you want Vertex AI to enable access to the customized dashboard in training chief container. If set to `true`, you can access the dashboard at the URIs given by CustomJob.web_access_uris or Trial.web_access_uris (within HyperparameterTuningJob.trials).\n\n          * `service_account`: Specifies the service account for workload run-as account. Users submitting jobs must have act-as permission on this run-as account. If unspecified, the [Vertex AI Custom Code Service Agent](https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents) for the CustomJob's project is used.\n\n          * `base_output_directory`: The Google Cloud Storage location where the output is to be written to.\n\n            * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n          * `reserved_ip_ranges`: Optional. A list of names for the reserved ip ranges under the VPC network that can be used for this job. If set, we will deploy the job within the provided ip ranges. Otherwise, the job will be deployed to any ip ranges under the provided VPC network. Example: ['vertex-ai-ip-range'].\n\n          * `network`: Optional. The full name of the Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the Job should be peered. For example, `projects/12345/global/networks/myVPC`. [Format](/compute/docs/reference/rest/v1/networks/insert) is of the form `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in `12345`, and {network} is a network name. To specify this field, you must have already [configured VPC Network Peering for Vertex AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering). If this field is left unspecified, the job is not peered with any network.\n\n      * `metric`: Represents a metric to optimize.\n\n        * `goal`: Required. The optimization goal of the metric.\n        Possible values:\n          * GOAL_TYPE_UNSPECIFIED\n          * MAXIMIZE\n          * MINIMIZE\n\n        * `metric_id`: Required. The ID of the metric. Must not contain whitespaces.\n\n  * `enable_restricted_image_training`: Optional. Enable a separation of Custom model training and restricted image training for tenant project.\n\n  * `start_time`: Output only. Time when the NasJob for the first time entered the `JOB_STATE_RUNNING` state.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `labels`: The labels with user-defined metadata to organize NasJobs. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `update_time`: Output only. Time when the NasJob was most recently updated.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_nas_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_nas_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_nas_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_nas_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_nas_jobs` InSpec audit resource to to test a Google Cloud NasJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_nas_jobs(parent: \"projects/#{gcp_project_id}/locations/#{nas_job['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_nas_jobs` resource:\n\nSee [google_vertex_ai_nas_job](google_vertex_ai_nas_job) for more detailed information.\n\n  * `nas_job_outputs`: an array of `google_vertex_ai_nas_job` nas_job_output\n  * `names`: an array of `google_vertex_ai_nas_job` name\n  * `end_times`: an array of `google_vertex_ai_nas_job` end_time\n  * `errors`: an array of `google_vertex_ai_nas_job` error\n  * `states`: an array of `google_vertex_ai_nas_job` state\n  * `create_times`: an array of `google_vertex_ai_nas_job` create_time\n  * `display_names`: an array of `google_vertex_ai_nas_job` display_name\n  * `nas_job_specs`: an array of `google_vertex_ai_nas_job` nas_job_spec\n  * `enable_restricted_image_trainings`: an array of `google_vertex_ai_nas_job` enable_restricted_image_training\n  * `start_times`: an array of `google_vertex_ai_nas_job` start_time\n  * `encryption_specs`: an array of `google_vertex_ai_nas_job` encryption_spec\n  * `labels`: an array of `google_vertex_ai_nas_job` labels\n  * `update_times`: an array of `google_vertex_ai_nas_job` update_time\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_nas_jobs_nas_trial_detail.md",
    "content": "+++\ntitle = \"google_vertex_ai_nas_jobs_nas_trial_detail resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_nas_jobs_nas_trial_detail\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_nas_jobs_nas_trial_detail resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_nas_jobs_nas_trial_detail` InSpec audit resource to to test a Google Cloud NasJobsNasTrialDetail resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_nas_jobs_nas_trial_detail(name: \"projects/#{gcp_project_id}/locations/#{nas_jobs_nas_trial_detail['region']}/nasJobs/#{nas_jobs_nas_trial_detail['nasJob']}/nasTrialDetails/#{nas_jobs_nas_trial_detail['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('parameters') { should cmp 'value_parameters' }\n\tits('name') { should cmp 'value_name' }\n\nend\n\ndescribe google_vertex_ai_nas_jobs_nas_trial_detail(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_nas_jobs_nas_trial_detail` resource:\n\n\n  * `parameters`: The parameters for the NasJob NasTrial.\n\n  * `name`: Output only. Resource name of the NasTrialDetail.\n\n  * `search_trial`: Represents a uCAIP NasJob trial.\n\n    * `id`: Output only. The identifier of the NasTrial assigned by the service.\n\n    * `state`: Output only. The detailed state of the NasTrial.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * REQUESTED\n      * ACTIVE\n      * STOPPING\n      * SUCCEEDED\n      * INFEASIBLE\n\n    * `final_measurement`: A message representing a Measurement of a Trial. A Measurement contains the Metrics got by executing a Trial using suggested hyperparameter values.\n\n      * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n        * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n        * `value`: Output only. The value for this metric.\n\n      * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n      * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n    * `start_time`: Output only. Time when the NasTrial was started.\n\n    * `end_time`: Output only. Time when the NasTrial's status changed to `SUCCEEDED` or `INFEASIBLE`.\n\n  * `train_trial`: Represents a uCAIP NasJob trial.\n\n    * `id`: Output only. The identifier of the NasTrial assigned by the service.\n\n    * `state`: Output only. The detailed state of the NasTrial.\n    Possible values:\n      * STATE_UNSPECIFIED\n      * REQUESTED\n      * ACTIVE\n      * STOPPING\n      * SUCCEEDED\n      * INFEASIBLE\n\n    * `final_measurement`: A message representing a Measurement of a Trial. A Measurement contains the Metrics got by executing a Trial using suggested hyperparameter values.\n\n      * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n        * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n        * `value`: Output only. The value for this metric.\n\n      * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n      * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n    * `start_time`: Output only. Time when the NasTrial was started.\n\n    * `end_time`: Output only. Time when the NasTrial's status changed to `SUCCEEDED` or `INFEASIBLE`.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_nas_jobs_nas_trial_details.md",
    "content": "+++\ntitle = \"google_vertex_ai_nas_jobs_nas_trial_details resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_nas_jobs_nas_trial_details\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_nas_jobs_nas_trial_details resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_nas_jobs_nas_trial_details` InSpec audit resource to to test a Google Cloud NasJobsNasTrialDetail resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_nas_jobs_nas_trial_details(parent: \"projects/#{gcp_project_id}/locations/#{nas_jobs_nas_trial_detail['region']}/nasJobs/#{nas_jobs_nas_trial_detail['nasJob']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_nas_jobs_nas_trial_details` resource:\n\nSee [google_vertex_ai_nas_jobs_nas_trial_detail](google_vertex_ai_nas_jobs_nas_trial_detail) for more detailed information.\n\n  * `parameters`: an array of `google_vertex_ai_nas_jobs_nas_trial_detail` parameters\n  * `names`: an array of `google_vertex_ai_nas_jobs_nas_trial_detail` name\n  * `search_trials`: an array of `google_vertex_ai_nas_jobs_nas_trial_detail` search_trial\n  * `train_trials`: an array of `google_vertex_ai_nas_jobs_nas_trial_detail` train_trial\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_pipeline_job.md",
    "content": "+++\ntitle = \"google_vertex_ai_pipeline_job resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_pipeline_job\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_pipeline_job resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_pipeline_job` InSpec audit resource to to test a Google Cloud PipelineJob resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_pipeline_job(name: \"projects/#{gcp_project_id}/locations/#{pipeline_job['region']}/pipelineJobs/#{pipeline_job['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('state') { should cmp 'value_state' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('name') { should cmp 'value_name' }\n\tits('schedule_name') { should cmp 'value_schedulename' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('service_account') { should cmp 'value_serviceaccount' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('template_uri') { should cmp 'value_templateuri' }\n\tits('network') { should cmp 'value_network' }\n\nend\n\ndescribe google_vertex_ai_pipeline_job(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_pipeline_job` resource:\n\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `end_time`: Output only. Pipeline end time.\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `update_time`: Output only. Timestamp when this PipelineJob was most recently updated.\n\n  * `job_detail`: The runtime detail of PipelineJob.\n\n    * `task_details`: Output only. The runtime details of the tasks under the pipeline.\n\n      * `inputs`: Output only. The runtime input artifacts of the task.\n\n        * `additional_properties`: A list of artifact metadata.\n\n      * `pipeline_task_status`: Output only. A list of task status. This field keeps a record of task status evolving over time.\n\n        * `update_time`: Output only. Update time of this status.\n\n        * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n          * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n          * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n          * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n        * `state`: Output only. The state of the task.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * PENDING\n          * RUNNING\n          * SUCCEEDED\n          * CANCEL_PENDING\n          * CANCELLING\n          * CANCELLED\n          * FAILED\n          * SKIPPED\n          * NOT_TRIGGERED\n\n      * `end_time`: Output only. Task end time.\n\n      * `outputs`: Output only. The runtime output artifacts of the task.\n\n        * `additional_properties`: A list of artifact metadata.\n\n      * `create_time`: Output only. Task create time.\n\n      * `start_time`: Output only. Task start time.\n\n      * `execution`: Instance of a general execution.\n\n        * `labels`: The labels with user-defined metadata to organize your Executions. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Execution (System labels are excluded).\n\n          * `additional_properties`: \n\n        * `create_time`: Output only. Timestamp when this Execution was created.\n\n        * `schema_version`: The version of the schema in `schema_title` to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n        * `state`: The state of this Execution. This is a property of the Execution, and does not imply or capture any ongoing process. This property is managed by clients (such as Vertex AI Pipelines) and the system does not prescribe or check the validity of state transitions.\n        Possible values:\n          * STATE_UNSPECIFIED\n          * NEW\n          * RUNNING\n          * COMPLETE\n          * FAILED\n          * CACHED\n          * CANCELLED\n\n        * `name`: Output only. The resource name of the Execution.\n\n        * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n        * `display_name`: User provided display name of the Execution. May be up to 128 Unicode characters.\n\n        * `metadata`: Properties of the Execution. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n          * `additional_properties`: Properties of the object.\n\n        * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n        * `description`: Description of the Execution\n\n        * `update_time`: Output only. Timestamp when this Execution was last updated.\n\n      * `task_name`: Output only. The user specified name of the task that is defined in pipeline_spec.\n\n      * `parent_task_id`: Output only. The id of the parent task if the task is within a component scope. Empty if the task is at the root level.\n\n      * `state`: Output only. State of the task.\n      Possible values:\n        * STATE_UNSPECIFIED\n        * PENDING\n        * RUNNING\n        * SUCCEEDED\n        * CANCEL_PENDING\n        * CANCELLING\n        * CANCELLED\n        * FAILED\n        * SKIPPED\n        * NOT_TRIGGERED\n\n      * `task_id`: Output only. The system generated ID of the task.\n\n      * `executor_detail`: The runtime detail of a pipeline executor.\n\n        * `container_detail`: The detail of a container execution. It contains the job names of the lifecycle of a container execution.\n\n          * `failed_main_jobs`: Output only. The names of the previously failed CustomJob for the main container executions. The list includes the all attempts in chronological order.\n\n          * `main_job`: Output only. The name of the CustomJob for the main container execution.\n\n          * `pre_caching_check_job`: Output only. The name of the CustomJob for the pre-caching-check container execution. This job will be available if the PipelineJob.pipeline_spec specifies the `pre_caching_check` hook in the lifecycle events.\n\n          * `failed_pre_caching_check_jobs`: Output only. The names of the previously failed CustomJob for the pre-caching-check container executions. This job will be available if the PipelineJob.pipeline_spec specifies the `pre_caching_check` hook in the lifecycle events. The list includes the all attempts in chronological order.\n\n        * `custom_job_detail`: The detailed info for a custom job executor.\n\n          * `failed_jobs`: Output only. The names of the previously failed CustomJob. The list includes the all attempts in chronological order.\n\n          * `job`: Output only. The name of the CustomJob.\n\n      * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n        * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n        * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n        * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n    * `pipeline_run_context`: Instance of a general context.\n\n      * `name`: Immutable. The resource name of the Context.\n\n      * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n      * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n      * `description`: Description of the Context\n\n      * `display_name`: User provided display name of the Context. May be up to 128 Unicode characters.\n\n      * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n      * `create_time`: Output only. Timestamp when this Context was created.\n\n      * `labels`: The labels with user-defined metadata to organize your Contexts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Context (System labels are excluded).\n\n        * `additional_properties`: \n\n      * `metadata`: Properties of the Context. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n        * `additional_properties`: Properties of the object.\n\n      * `update_time`: Output only. Timestamp when this Context was last updated.\n\n      * `parent_contexts`: Output only. A list of resource names of Contexts that are parents of this Context. A Context may have at most 10 parent_contexts.\n\n    * `pipeline_context`: Instance of a general context.\n\n      * `name`: Immutable. The resource name of the Context.\n\n      * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n      * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n      * `description`: Description of the Context\n\n      * `display_name`: User provided display name of the Context. May be up to 128 Unicode characters.\n\n      * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n      * `create_time`: Output only. Timestamp when this Context was created.\n\n      * `labels`: The labels with user-defined metadata to organize your Contexts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Context (System labels are excluded).\n\n        * `additional_properties`: \n\n      * `metadata`: Properties of the Context. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n        * `additional_properties`: Properties of the object.\n\n      * `update_time`: Output only. Timestamp when this Context was last updated.\n\n      * `parent_contexts`: Output only. A list of resource names of Contexts that are parents of this Context. A Context may have at most 10 parent_contexts.\n\n  * `template_metadata`: Pipeline template metadata if PipelineJob.template_uri is from supported template registry. Currently, the only supported registry is Artifact Registry.\n\n    * `version`: The version_name in artifact registry. Will always be presented in output if the PipelineJob.template_uri is from supported template registry. Format is \"sha256:abcdef123456...\".\n\n  * `state`: Output only. The detailed state of the job.\n  Possible values:\n    * PIPELINE_STATE_UNSPECIFIED\n    * PIPELINE_STATE_QUEUED\n    * PIPELINE_STATE_PENDING\n    * PIPELINE_STATE_RUNNING\n    * PIPELINE_STATE_SUCCEEDED\n    * PIPELINE_STATE_FAILED\n    * PIPELINE_STATE_CANCELLING\n    * PIPELINE_STATE_CANCELLED\n    * PIPELINE_STATE_PAUSED\n\n  * `create_time`: Output only. Pipeline creation time.\n\n  * `name`: Output only. The resource name of the PipelineJob.\n\n  * `schedule_name`: Output only. The schedule resource name. Only returned if the Pipeline is created by Schedule API.\n\n  * `reserved_ip_ranges`: A list of names for the reserved ip ranges under the VPC network that can be used for this Pipeline Job's workload. If set, we will deploy the Pipeline Job's workload within the provided ip ranges. Otherwise, the job will be deployed to any ip ranges under the provided VPC network. Example: ['vertex-ai-ip-range'].\n\n  * `start_time`: Output only. Pipeline start time.\n\n  * `service_account`: The service account that the pipeline workload runs as. If not specified, the Compute Engine default service account in the project will be used. See https://cloud.google.com/compute/docs/access/service-accounts#default_service_account Users starting the pipeline must have the `iam.serviceAccounts.actAs` permission on this service account.\n\n  * `display_name`: The display name of the Pipeline. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `template_uri`: A template uri from where the PipelineJob.pipeline_spec, if empty, will be downloaded.\n\n  * `pipeline_spec`: The spec of the pipeline.\n\n    * `additional_properties`: Properties of the object.\n\n  * `network`: The full name of the Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the Pipeline Job's workload should be peered. For example, `projects/12345/global/networks/myVPC`. [Format](/compute/docs/reference/rest/v1/networks/insert) is of the form `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in `12345`, and {network} is a network name. Private services access must already be configured for the network. Pipeline job will apply the network configuration to the Google Cloud resources being launched, if applied, such as Vertex AI Training or Dataflow job. If left unspecified, the workload is not peered with any network.\n\n  * `labels`: The labels with user-defined metadata to organize PipelineJob. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels. Note there is some reserved label key for Vertex AI Pipelines. - `vertex-ai-pipelines-run-billing-id`, user set value will get overrided.\n\n    * `additional_properties`: \n\n  * `runtime_config`: The runtime config of a PipelineJob.\n\n    * `gcs_output_directory`: Required. A path in a Cloud Storage bucket, which will be treated as the root output directory of the pipeline. It is used by the system to generate the paths of output artifacts. The artifact paths are generated with a sub-path pattern `{job_id}/{task_id}/{output_key}` under the specified output directory. The service account specified in this pipeline must have the `storage.objects.get` and `storage.objects.create` permissions for this bucket.\n\n    * `parameter_values`: The runtime parameters of the PipelineJob. The parameters will be passed into PipelineJob.pipeline_spec to replace the placeholders at runtime. This field is used by pipelines built using `PipelineJob.pipeline_spec.schema_version` 2.1.0, such as pipelines built using Kubeflow Pipelines SDK 1.9 or higher and the v2 DSL.\n\n      * `additional_properties`: \n\n    * `failure_policy`: Represents the failure policy of a pipeline. Currently, the default of a pipeline is that the pipeline will continue to run until no more tasks can be executed, also known as PIPELINE_FAILURE_POLICY_FAIL_SLOW. However, if a pipeline is set to PIPELINE_FAILURE_POLICY_FAIL_FAST, it will stop scheduling any new tasks when a task has failed. Any scheduled tasks will continue to completion.\n    Possible values:\n      * PIPELINE_FAILURE_POLICY_UNSPECIFIED\n      * PIPELINE_FAILURE_POLICY_FAIL_SLOW\n      * PIPELINE_FAILURE_POLICY_FAIL_FAST\n\n    * `parameters`: Deprecated. Use RuntimeConfig.parameter_values instead. The runtime parameters of the PipelineJob. The parameters will be passed into PipelineJob.pipeline_spec to replace the placeholders at runtime. This field is used by pipelines built using `PipelineJob.pipeline_spec.schema_version` 2.0.0 or lower, such as pipelines built using Kubeflow Pipelines SDK 1.8 or lower.\n\n      * `additional_properties`: Value is the value of the field.\n\n    * `input_artifacts`: The runtime artifacts of the PipelineJob. The key will be the input artifact name and the value would be one of the InputArtifact.\n\n      * `additional_properties`: The type of an input artifact.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_pipeline_jobs.md",
    "content": "+++\ntitle = \"google_vertex_ai_pipeline_jobs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_pipeline_jobs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_pipeline_jobs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_pipeline_jobs` InSpec audit resource to to test a Google Cloud PipelineJob resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_pipeline_jobs(parent: \"projects/#{gcp_project_id}/locations/#{pipeline_job['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_pipeline_jobs` resource:\n\nSee [google_vertex_ai_pipeline_job](google_vertex_ai_pipeline_job) for more detailed information.\n\n  * `encryption_specs`: an array of `google_vertex_ai_pipeline_job` encryption_spec\n  * `end_times`: an array of `google_vertex_ai_pipeline_job` end_time\n  * `errors`: an array of `google_vertex_ai_pipeline_job` error\n  * `update_times`: an array of `google_vertex_ai_pipeline_job` update_time\n  * `job_details`: an array of `google_vertex_ai_pipeline_job` job_detail\n  * `template_metadata`: an array of `google_vertex_ai_pipeline_job` template_metadata\n  * `states`: an array of `google_vertex_ai_pipeline_job` state\n  * `create_times`: an array of `google_vertex_ai_pipeline_job` create_time\n  * `names`: an array of `google_vertex_ai_pipeline_job` name\n  * `schedule_names`: an array of `google_vertex_ai_pipeline_job` schedule_name\n  * `reserved_ip_ranges`: an array of `google_vertex_ai_pipeline_job` reserved_ip_ranges\n  * `start_times`: an array of `google_vertex_ai_pipeline_job` start_time\n  * `service_accounts`: an array of `google_vertex_ai_pipeline_job` service_account\n  * `display_names`: an array of `google_vertex_ai_pipeline_job` display_name\n  * `template_uris`: an array of `google_vertex_ai_pipeline_job` template_uri\n  * `pipeline_specs`: an array of `google_vertex_ai_pipeline_job` pipeline_spec\n  * `networks`: an array of `google_vertex_ai_pipeline_job` network\n  * `labels`: an array of `google_vertex_ai_pipeline_job` labels\n  * `runtime_configs`: an array of `google_vertex_ai_pipeline_job` runtime_config\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_schedule.md",
    "content": "+++\ntitle = \"google_vertex_ai_schedule resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_schedule\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_schedule resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_schedule` InSpec audit resource to to test a Google Cloud Schedule resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_schedule(name: \"projects/#{gcp_project_id}/locations/#{schedule['region']}/schedules/#{schedule['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('started_run_count') { should cmp 'value_startedruncount' }\n\tits('name') { should cmp 'value_name' }\n\tits('cron') { should cmp 'value_cron' }\n\tits('last_pause_time') { should cmp 'value_lastpausetime' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('max_run_count') { should cmp 'value_maxruncount' }\n\tits('next_run_time') { should cmp 'value_nextruntime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('last_resume_time') { should cmp 'value_lastresumetime' }\n\tits('max_concurrent_run_count') { should cmp 'value_maxconcurrentruncount' }\n\tits('state') { should cmp 'value_state' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('end_time') { should cmp 'value_endtime' }\n\nend\n\ndescribe google_vertex_ai_schedule(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_schedule` resource:\n\n\n  * `started_run_count`: Output only. The number of runs started by this schedule.\n\n  * `allow_queueing`: Optional. Whether new scheduled runs can be queued when max_concurrent_runs limit is reached. If set to true, new runs will be queued instead of skipped. Default to false.\n\n  * `name`: Immutable. The resource name of the Schedule.\n\n  * `cron`: Cron schedule (https://en.wikipedia.org/wiki/Cron) to launch scheduled runs. To explicitly set a timezone to the cron tab, apply a prefix in the cron tab: \"CRON_TZ=${IANA_TIME_ZONE}\" or \"TZ=${IANA_TIME_ZONE}\". The ${IANA_TIME_ZONE} may only be a valid string from IANA time zone database. For example, \"CRON_TZ=America/New_York 1 * * * *\", or \"TZ=America/New_York 1 * * * *\".\n\n  * `last_pause_time`: Output only. Timestamp when this Schedule was last paused. Unset if never paused.\n\n  * `create_time`: Output only. Timestamp when this Schedule was created.\n\n  * `start_time`: Optional. Timestamp after which the first run can be scheduled. Default to Schedule create time if not specified.\n\n  * `max_run_count`: Optional. Maximum run count of the schedule. If specified, The schedule will be completed when either started_run_count >= max_run_count or when end_time is reached. If not specified, new runs will keep getting scheduled until this Schedule is paused or deleted. Already scheduled runs will be allowed to complete. Unset if not specified.\n\n  * `next_run_time`: Output only. Timestamp when this Schedule should schedule the next run. Having a next_run_time in the past means the runs are being started behind schedule.\n\n  * `update_time`: Output only. Timestamp when this Schedule was updated.\n\n  * `last_scheduled_run_response`: Status of a scheduled run.\n\n    * `run_response`: The response of the scheduled run.\n\n    * `scheduled_run_time`: The scheduled run time based on the user-specified schedule.\n\n  * `last_resume_time`: Output only. Timestamp when this Schedule was last resumed. Unset if never resumed from pause.\n\n  * `max_concurrent_run_count`: Required. Maximum number of runs that can be started concurrently for this Schedule. This is the limit for starting the scheduled requests and not the execution of the operations/jobs created by the requests (if applicable).\n\n  * `state`: Output only. The state of this Schedule.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * ACTIVE\n    * PAUSED\n    * COMPLETED\n\n  * `create_pipeline_job_request`: Request message for PipelineService.CreatePipelineJob.\n\n    * `pipeline_job`: An instance of a machine learning PipelineJob.\n\n      * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n        * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n      * `end_time`: Output only. Pipeline end time.\n\n      * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n        * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n        * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n        * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n      * `update_time`: Output only. Timestamp when this PipelineJob was most recently updated.\n\n      * `job_detail`: The runtime detail of PipelineJob.\n\n        * `task_details`: Output only. The runtime details of the tasks under the pipeline.\n\n          * `inputs`: Output only. The runtime input artifacts of the task.\n\n            * `additional_properties`: A list of artifact metadata.\n\n          * `pipeline_task_status`: Output only. A list of task status. This field keeps a record of task status evolving over time.\n\n            * `update_time`: Output only. Update time of this status.\n\n            * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n              * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n              * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n              * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n            * `state`: Output only. The state of the task.\n            Possible values:\n              * STATE_UNSPECIFIED\n              * PENDING\n              * RUNNING\n              * SUCCEEDED\n              * CANCEL_PENDING\n              * CANCELLING\n              * CANCELLED\n              * FAILED\n              * SKIPPED\n              * NOT_TRIGGERED\n\n          * `end_time`: Output only. Task end time.\n\n          * `outputs`: Output only. The runtime output artifacts of the task.\n\n            * `additional_properties`: A list of artifact metadata.\n\n          * `create_time`: Output only. Task create time.\n\n          * `start_time`: Output only. Task start time.\n\n          * `execution`: Instance of a general execution.\n\n            * `labels`: The labels with user-defined metadata to organize your Executions. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Execution (System labels are excluded).\n\n              * `additional_properties`: \n\n            * `create_time`: Output only. Timestamp when this Execution was created.\n\n            * `schema_version`: The version of the schema in `schema_title` to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n            * `state`: The state of this Execution. This is a property of the Execution, and does not imply or capture any ongoing process. This property is managed by clients (such as Vertex AI Pipelines) and the system does not prescribe or check the validity of state transitions.\n            Possible values:\n              * STATE_UNSPECIFIED\n              * NEW\n              * RUNNING\n              * COMPLETE\n              * FAILED\n              * CACHED\n              * CANCELLED\n\n            * `name`: Output only. The resource name of the Execution.\n\n            * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n            * `display_name`: User provided display name of the Execution. May be up to 128 Unicode characters.\n\n            * `metadata`: Properties of the Execution. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n              * `additional_properties`: Properties of the object.\n\n            * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n            * `description`: Description of the Execution\n\n            * `update_time`: Output only. Timestamp when this Execution was last updated.\n\n          * `task_name`: Output only. The user specified name of the task that is defined in pipeline_spec.\n\n          * `parent_task_id`: Output only. The id of the parent task if the task is within a component scope. Empty if the task is at the root level.\n\n          * `state`: Output only. State of the task.\n          Possible values:\n            * STATE_UNSPECIFIED\n            * PENDING\n            * RUNNING\n            * SUCCEEDED\n            * CANCEL_PENDING\n            * CANCELLING\n            * CANCELLED\n            * FAILED\n            * SKIPPED\n            * NOT_TRIGGERED\n\n          * `task_id`: Output only. The system generated ID of the task.\n\n          * `executor_detail`: The runtime detail of a pipeline executor.\n\n            * `container_detail`: The detail of a container execution. It contains the job names of the lifecycle of a container execution.\n\n              * `failed_main_jobs`: Output only. The names of the previously failed CustomJob for the main container executions. The list includes the all attempts in chronological order.\n\n              * `main_job`: Output only. The name of the CustomJob for the main container execution.\n\n              * `pre_caching_check_job`: Output only. The name of the CustomJob for the pre-caching-check container execution. This job will be available if the PipelineJob.pipeline_spec specifies the `pre_caching_check` hook in the lifecycle events.\n\n              * `failed_pre_caching_check_jobs`: Output only. The names of the previously failed CustomJob for the pre-caching-check container executions. This job will be available if the PipelineJob.pipeline_spec specifies the `pre_caching_check` hook in the lifecycle events. The list includes the all attempts in chronological order.\n\n            * `custom_job_detail`: The detailed info for a custom job executor.\n\n              * `failed_jobs`: Output only. The names of the previously failed CustomJob. The list includes the all attempts in chronological order.\n\n              * `job`: Output only. The name of the CustomJob.\n\n          * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n            * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n            * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n            * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n        * `pipeline_run_context`: Instance of a general context.\n\n          * `name`: Immutable. The resource name of the Context.\n\n          * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n          * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n          * `description`: Description of the Context\n\n          * `display_name`: User provided display name of the Context. May be up to 128 Unicode characters.\n\n          * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n          * `create_time`: Output only. Timestamp when this Context was created.\n\n          * `labels`: The labels with user-defined metadata to organize your Contexts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Context (System labels are excluded).\n\n            * `additional_properties`: \n\n          * `metadata`: Properties of the Context. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n            * `additional_properties`: Properties of the object.\n\n          * `update_time`: Output only. Timestamp when this Context was last updated.\n\n          * `parent_contexts`: Output only. A list of resource names of Contexts that are parents of this Context. A Context may have at most 10 parent_contexts.\n\n        * `pipeline_context`: Instance of a general context.\n\n          * `name`: Immutable. The resource name of the Context.\n\n          * `schema_title`: The title of the schema describing the metadata. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n          * `etag`: An eTag used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n          * `description`: Description of the Context\n\n          * `display_name`: User provided display name of the Context. May be up to 128 Unicode characters.\n\n          * `schema_version`: The version of the schema in schema_name to use. Schema title and version is expected to be registered in earlier Create Schema calls. And both are used together as unique identifiers to identify schemas within the local metadata store.\n\n          * `create_time`: Output only. Timestamp when this Context was created.\n\n          * `labels`: The labels with user-defined metadata to organize your Contexts. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Context (System labels are excluded).\n\n            * `additional_properties`: \n\n          * `metadata`: Properties of the Context. Top level metadata keys' heading and trailing spaces will be trimmed. The size of this field should not exceed 200KB.\n\n            * `additional_properties`: Properties of the object.\n\n          * `update_time`: Output only. Timestamp when this Context was last updated.\n\n          * `parent_contexts`: Output only. A list of resource names of Contexts that are parents of this Context. A Context may have at most 10 parent_contexts.\n\n      * `template_metadata`: Pipeline template metadata if PipelineJob.template_uri is from supported template registry. Currently, the only supported registry is Artifact Registry.\n\n        * `version`: The version_name in artifact registry. Will always be presented in output if the PipelineJob.template_uri is from supported template registry. Format is \"sha256:abcdef123456...\".\n\n      * `state`: Output only. The detailed state of the job.\n      Possible values:\n        * PIPELINE_STATE_UNSPECIFIED\n        * PIPELINE_STATE_QUEUED\n        * PIPELINE_STATE_PENDING\n        * PIPELINE_STATE_RUNNING\n        * PIPELINE_STATE_SUCCEEDED\n        * PIPELINE_STATE_FAILED\n        * PIPELINE_STATE_CANCELLING\n        * PIPELINE_STATE_CANCELLED\n        * PIPELINE_STATE_PAUSED\n\n      * `create_time`: Output only. Pipeline creation time.\n\n      * `name`: Output only. The resource name of the PipelineJob.\n\n      * `schedule_name`: Output only. The schedule resource name. Only returned if the Pipeline is created by Schedule API.\n\n      * `reserved_ip_ranges`: A list of names for the reserved ip ranges under the VPC network that can be used for this Pipeline Job's workload. If set, we will deploy the Pipeline Job's workload within the provided ip ranges. Otherwise, the job will be deployed to any ip ranges under the provided VPC network. Example: ['vertex-ai-ip-range'].\n\n      * `start_time`: Output only. Pipeline start time.\n\n      * `service_account`: The service account that the pipeline workload runs as. If not specified, the Compute Engine default service account in the project will be used. See https://cloud.google.com/compute/docs/access/service-accounts#default_service_account Users starting the pipeline must have the `iam.serviceAccounts.actAs` permission on this service account.\n\n      * `display_name`: The display name of the Pipeline. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n      * `template_uri`: A template uri from where the PipelineJob.pipeline_spec, if empty, will be downloaded.\n\n      * `pipeline_spec`: The spec of the pipeline.\n\n        * `additional_properties`: Properties of the object.\n\n      * `network`: The full name of the Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the Pipeline Job's workload should be peered. For example, `projects/12345/global/networks/myVPC`. [Format](/compute/docs/reference/rest/v1/networks/insert) is of the form `projects/{project}/global/networks/{network}`. Where {project} is a project number, as in `12345`, and {network} is a network name. Private services access must already be configured for the network. Pipeline job will apply the network configuration to the Google Cloud resources being launched, if applied, such as Vertex AI Training or Dataflow job. If left unspecified, the workload is not peered with any network.\n\n      * `labels`: The labels with user-defined metadata to organize PipelineJob. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels. Note there is some reserved label key for Vertex AI Pipelines. - `vertex-ai-pipelines-run-billing-id`, user set value will get overrided.\n\n        * `additional_properties`: \n\n      * `runtime_config`: The runtime config of a PipelineJob.\n\n        * `gcs_output_directory`: Required. A path in a Cloud Storage bucket, which will be treated as the root output directory of the pipeline. It is used by the system to generate the paths of output artifacts. The artifact paths are generated with a sub-path pattern `{job_id}/{task_id}/{output_key}` under the specified output directory. The service account specified in this pipeline must have the `storage.objects.get` and `storage.objects.create` permissions for this bucket.\n\n        * `parameter_values`: The runtime parameters of the PipelineJob. The parameters will be passed into PipelineJob.pipeline_spec to replace the placeholders at runtime. This field is used by pipelines built using `PipelineJob.pipeline_spec.schema_version` 2.1.0, such as pipelines built using Kubeflow Pipelines SDK 1.9 or higher and the v2 DSL.\n\n          * `additional_properties`: \n\n        * `failure_policy`: Represents the failure policy of a pipeline. Currently, the default of a pipeline is that the pipeline will continue to run until no more tasks can be executed, also known as PIPELINE_FAILURE_POLICY_FAIL_SLOW. However, if a pipeline is set to PIPELINE_FAILURE_POLICY_FAIL_FAST, it will stop scheduling any new tasks when a task has failed. Any scheduled tasks will continue to completion.\n        Possible values:\n          * PIPELINE_FAILURE_POLICY_UNSPECIFIED\n          * PIPELINE_FAILURE_POLICY_FAIL_SLOW\n          * PIPELINE_FAILURE_POLICY_FAIL_FAST\n\n        * `parameters`: Deprecated. Use RuntimeConfig.parameter_values instead. The runtime parameters of the PipelineJob. The parameters will be passed into PipelineJob.pipeline_spec to replace the placeholders at runtime. This field is used by pipelines built using `PipelineJob.pipeline_spec.schema_version` 2.0.0 or lower, such as pipelines built using Kubeflow Pipelines SDK 1.8 or lower.\n\n          * `additional_properties`: Value is the value of the field.\n\n        * `input_artifacts`: The runtime artifacts of the PipelineJob. The key will be the input artifact name and the value would be one of the InputArtifact.\n\n          * `additional_properties`: The type of an input artifact.\n\n    * `pipeline_job_id`: The ID to use for the PipelineJob, which will become the final component of the PipelineJob name. If not provided, an ID will be automatically generated. This value should be less than 128 characters, and valid characters are /a-z-/.\n\n    * `parent`: Required. The resource name of the Location to create the PipelineJob in. Format: `projects/{project}/locations/{location}`\n\n  * `display_name`: Required. User provided name of the Schedule. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n  * `catch_up`: Output only. Whether to backfill missed runs when the schedule is resumed from PAUSED state. If set to true, all missed runs will be scheduled. New runs will be scheduled after the backfill is complete. Default to false.\n\n  * `end_time`: Optional. Timestamp after which no new runs can be scheduled. If specified, The schedule will be completed when either end_time is reached or when scheduled_run_count >= max_run_count. If not specified, new runs will keep getting scheduled until this Schedule is paused or deleted. Already scheduled runs will be allowed to complete. Unset if not specified.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_schedules.md",
    "content": "+++\ntitle = \"google_vertex_ai_schedules resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_schedules\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_schedules resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_schedules` InSpec audit resource to to test a Google Cloud Schedule resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_schedules(parent: \"projects/#{gcp_project_id}/locations/#{schedule['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_schedules` resource:\n\nSee [google_vertex_ai_schedule](google_vertex_ai_schedule) for more detailed information.\n\n  * `started_run_counts`: an array of `google_vertex_ai_schedule` started_run_count\n  * `allow_queueings`: an array of `google_vertex_ai_schedule` allow_queueing\n  * `names`: an array of `google_vertex_ai_schedule` name\n  * `crons`: an array of `google_vertex_ai_schedule` cron\n  * `last_pause_times`: an array of `google_vertex_ai_schedule` last_pause_time\n  * `create_times`: an array of `google_vertex_ai_schedule` create_time\n  * `start_times`: an array of `google_vertex_ai_schedule` start_time\n  * `max_run_counts`: an array of `google_vertex_ai_schedule` max_run_count\n  * `next_run_times`: an array of `google_vertex_ai_schedule` next_run_time\n  * `update_times`: an array of `google_vertex_ai_schedule` update_time\n  * `last_scheduled_run_responses`: an array of `google_vertex_ai_schedule` last_scheduled_run_response\n  * `last_resume_times`: an array of `google_vertex_ai_schedule` last_resume_time\n  * `max_concurrent_run_counts`: an array of `google_vertex_ai_schedule` max_concurrent_run_count\n  * `states`: an array of `google_vertex_ai_schedule` state\n  * `create_pipeline_job_requests`: an array of `google_vertex_ai_schedule` create_pipeline_job_request\n  * `display_names`: an array of `google_vertex_ai_schedule` display_name\n  * `catch_ups`: an array of `google_vertex_ai_schedule` catch_up\n  * `end_times`: an array of `google_vertex_ai_schedule` end_time\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_studies.md",
    "content": "+++\ntitle = \"google_vertex_ai_studies resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_studies\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_studies resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_studies` InSpec audit resource to to test a Google Cloud Study resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_studies(parent: \"projects/#{gcp_project_id}/locations/#{study['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_studies` resource:\n\nSee [google_vertex_ai_study](google_vertex_ai_study) for more detailed information.\n\n  * `study_specs`: an array of `google_vertex_ai_study` study_spec\n  * `names`: an array of `google_vertex_ai_study` name\n  * `display_names`: an array of `google_vertex_ai_study` display_name\n  * `states`: an array of `google_vertex_ai_study` state\n  * `create_times`: an array of `google_vertex_ai_study` create_time\n  * `inactive_reasons`: an array of `google_vertex_ai_study` inactive_reason\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_studies_trial.md",
    "content": "+++\ntitle = \"google_vertex_ai_studies_trial resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_studies_trial\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_studies_trial resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_studies_trial` InSpec audit resource to to test a Google Cloud StudiesTrial resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_studies_trial(name: \"projects/#{gcp_project_id}/locations/#{studies_trial['region']}/studies/#{studies_trial['study']}/trials/#{studies_trial['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('start_time') { should cmp 'value_starttime' }\n\tits('end_time') { should cmp 'value_endtime' }\n\tits('name') { should cmp 'value_name' }\n\tits('infeasible_reason') { should cmp 'value_infeasiblereason' }\n\tits('client_id') { should cmp 'value_clientid' }\n\tits('custom_job') { should cmp 'value_customjob' }\n\tits('state') { should cmp 'value_state' }\n\tits('id') { should cmp 'value_id' }\n\nend\n\ndescribe google_vertex_ai_studies_trial(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_studies_trial` resource:\n\n\n  * `measurements`: Output only. A list of measurements that are strictly lexicographically ordered by their induced tuples (steps, elapsed_duration). These are used for early stopping computations.\n\n    * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n      * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n      * `value`: Output only. The value for this metric.\n\n    * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n    * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n  * `start_time`: Output only. Time when the Trial was started.\n\n  * `end_time`: Output only. Time when the Trial's status changed to `SUCCEEDED` or `INFEASIBLE`.\n\n  * `parameters`: Output only. The parameters of the Trial.\n\n    * `value`: Output only. The value of the parameter. `number_value` will be set if a parameter defined in StudySpec is in type 'INTEGER', 'DOUBLE' or 'DISCRETE'. `string_value` will be set if a parameter defined in StudySpec is in type 'CATEGORICAL'.\n\n    * `parameter_id`: Output only. The ID of the parameter. The parameter should be defined in StudySpec's Parameters.\n\n  * `name`: Output only. Resource name of the Trial assigned by the service.\n\n  * `infeasible_reason`: Output only. A human readable string describing why the Trial is infeasible. This is set only if Trial state is `INFEASIBLE`.\n\n  * `final_measurement`: A message representing a Measurement of a Trial. A Measurement contains the Metrics got by executing a Trial using suggested hyperparameter values.\n\n    * `metrics`: Output only. A list of metrics got by evaluating the objective functions using suggested Parameter values.\n\n      * `metric_id`: Output only. The ID of the Metric. The Metric should be defined in StudySpec's Metrics.\n\n      * `value`: Output only. The value for this metric.\n\n    * `elapsed_duration`: Output only. Time that the Trial has been running at the point of this Measurement.\n\n    * `step_count`: Output only. The number of steps the machine learning model has been trained for. Must be non-negative.\n\n  * `client_id`: Output only. The identifier of the client that originally requested this Trial. Each client is identified by a unique client_id. When a client asks for a suggestion, Vertex AI Vizier will assign it a Trial. The client should evaluate the Trial, complete it, and report back to Vertex AI Vizier. If suggestion is asked again by same client_id before the Trial is completed, the same Trial will be returned. Multiple clients with different client_ids can ask for suggestions simultaneously, each of them will get their own Trial.\n\n  * `custom_job`: Output only. The CustomJob name linked to the Trial. It's set for a HyperparameterTuningJob's Trial.\n\n  * `state`: Output only. The detailed state of the Trial.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * REQUESTED\n    * ACTIVE\n    * STOPPING\n    * SUCCEEDED\n    * INFEASIBLE\n\n  * `web_access_uris`: Output only. URIs for accessing [interactive shells](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell) (one URI for each training node). Only available if this trial is part of a HyperparameterTuningJob and the job's trial_job_spec.enable_web_access field is `true`. The keys are names of each node used for the trial; for example, `workerpool0-0` for the primary node, `workerpool1-0` for the first node in the second worker pool, and `workerpool1-1` for the second node in the second worker pool. The values are the URIs for each node's interactive shell.\n\n    * `additional_properties`: \n\n  * `id`: Output only. The identifier of the Trial assigned by the service.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_studies_trials.md",
    "content": "+++\ntitle = \"google_vertex_ai_studies_trials resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_studies_trials\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_studies_trials resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_studies_trials` InSpec audit resource to to test a Google Cloud StudiesTrial resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_studies_trials(parent: \"projects/#{gcp_project_id}/locations/#{studies_trial['region']}/studies/#{studies_trial['study']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_studies_trials` resource:\n\nSee [google_vertex_ai_studies_trial](google_vertex_ai_studies_trial) for more detailed information.\n\n  * `measurements`: an array of `google_vertex_ai_studies_trial` measurements\n  * `start_times`: an array of `google_vertex_ai_studies_trial` start_time\n  * `end_times`: an array of `google_vertex_ai_studies_trial` end_time\n  * `parameters`: an array of `google_vertex_ai_studies_trial` parameters\n  * `names`: an array of `google_vertex_ai_studies_trial` name\n  * `infeasible_reasons`: an array of `google_vertex_ai_studies_trial` infeasible_reason\n  * `final_measurements`: an array of `google_vertex_ai_studies_trial` final_measurement\n  * `client_ids`: an array of `google_vertex_ai_studies_trial` client_id\n  * `custom_jobs`: an array of `google_vertex_ai_studies_trial` custom_job\n  * `states`: an array of `google_vertex_ai_studies_trial` state\n  * `web_access_uris`: an array of `google_vertex_ai_studies_trial` web_access_uris\n  * `ids`: an array of `google_vertex_ai_studies_trial` id\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_study.md",
    "content": "+++\ntitle = \"google_vertex_ai_study resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_study\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_study resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_study` InSpec audit resource to to test a Google Cloud Study resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_study(name: \"projects/#{gcp_project_id}/locations/#{study['region']}/studies/#{study['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('state') { should cmp 'value_state' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('inactive_reason') { should cmp 'value_inactivereason' }\n\nend\n\ndescribe google_vertex_ai_study(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_study` resource:\n\n\n  * `study_spec`: Required. Configuration of the Study.\n\n  * `name`: Output only. The name of a study. The study's globally unique identifier. Format: `projects/{project}/locations/{location}/studies/{study}`\n\n  * `display_name`: Required. Describes the Study, default value is empty string.\n\n  * `state`: Output only. The detailed state of a Study.\n  Possible values:\n    * STATE_UNSPECIFIED\n    * ACTIVE\n    * INACTIVE\n    * COMPLETED\n\n  * `create_time`: Output only. Time at which the study was created.\n\n  * `inactive_reason`: Output only. A human readable reason why the Study is inactive. This should be empty if a study is ACTIVE or COMPLETED.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboard.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboard resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboard\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboard resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboard` InSpec audit resource to to test a Google Cloud Tensorboard resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_tensorboard(name: \"projects/#{gcp_project_id}/locations/#{tensorboard['region']}/tensorboards/#{tensorboard['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('name') { should cmp 'value_name' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('blob_storage_path_prefix') { should cmp 'value_blobstoragepathprefix' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('description') { should cmp 'value_description' }\n\nend\n\ndescribe google_vertex_ai_tensorboard(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboard` resource:\n\n\n  * `name`: Output only. Name of the Tensorboard. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}`\n\n  * `is_default`: Used to indicate if the TensorBoard instance is the default one. Each project & region can have at most one default TensorBoard instance. Creation of a default TensorBoard instance and updating an existing TensorBoard instance to be default will mark all other TensorBoard instances (if any) as non default.\n\n  * `update_time`: Output only. Timestamp when this Tensorboard was last updated.\n\n  * `labels`: The labels with user-defined metadata to organize your Tensorboards. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Tensorboard (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable.\n\n    * `additional_properties`: \n\n  * `blob_storage_path_prefix`: Output only. Consumer project Cloud Storage path prefix used to store blob data, which can either be a bucket or directory. Does not end with a '/'.\n\n  * `etag`: Used to perform a consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `create_time`: Output only. Timestamp when this Tensorboard was created.\n\n  * `run_count`: Output only. The number of Runs stored in this Tensorboard.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `display_name`: Required. User provided name of this Tensorboard.\n\n  * `description`: Description of this Tensorboard.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboard_experiment_run.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboard_experiment_run resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboard_experiment_run\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboard_experiment_run resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboard_experiment_run` InSpec audit resource to to test a Google Cloud TensorboardExperimentRun resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_tensorboard_experiment_run(name: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run['region']}/tensorboards/#{tensorboard_experiment_run['tensorboard']}/experiments/#{tensorboard_experiment_run['experiment']}/runs/#{tensorboard_experiment_run['run']}\", region: ' value_region') do\n\tit { should exist }\n\nend\n\ndescribe google_vertex_ai_tensorboard_experiment_run(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboard_experiment_run` resource:\n\n\n  * `display_name`: Required. User provided name of this TensorboardRun. This value must be unique among all TensorboardRuns belonging to the same parent TensorboardExperiment.\n\n  * `update_time`: Output only. Timestamp when this TensorboardRun was last updated.\n\n  * `description`: Description of this TensorboardRun.\n\n  * `etag`: Used to perform a consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `labels`: The labels with user-defined metadata to organize your TensorboardRuns. This field will be used to filter and visualize Runs in the Tensorboard UI. For example, a Vertex AI training job can set a label aiplatform.googleapis.com/training_job_id=xxxxx to all the runs created within that job. An end user can set a label experiment_id=xxxxx for all the runs produced in a Jupyter notebook. These runs can be grouped by a label value and visualized together in the Tensorboard UI. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one TensorboardRun (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with \"aiplatform.googleapis.com/\" and are immutable.\n\n    * `additional_properties`: \n\n  * `create_time`: Output only. Timestamp when this TensorboardRun was created.\n\n  * `name`: Output only. Name of the TensorboardRun. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}/experiments/{experiment}/runs/{run}`\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboard_experiment_run_time_series_resource.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboard_experiment_run_time_series_resource resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboard_experiment_run_time_series_resource\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboard_experiment_run_time_series_resource resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboard_experiment_run_time_series_resource` InSpec audit resource to to test a Google Cloud TensorboardExperimentRunTimeSeriesResource resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_tensorboard_experiment_run_time_series_resource(name: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run_time_series_resource['region']}/tensorboards/#{tensorboard_experiment_run_time_series_resource['tensorboard']}/experiments/#{tensorboard_experiment_run_time_series_resource['experiment']}/runs/#{tensorboard_experiment_run_time_series_resource['run']}/timeSeries/#{tensorboard_experiment_run_time_series_resource['timeSery']}\", region: ' value_region') do\n\tit { should exist }\n\tits('plugin_name') { should cmp 'value_pluginname' }\n\tits('plugin_data') { should cmp 'value_plugindata' }\n\tits('description') { should cmp 'value_description' }\n\tits('etag') { should cmp 'value_etag' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('name') { should cmp 'value_name' }\n\tits('value_type') { should cmp 'value_valuetype' }\n\nend\n\ndescribe google_vertex_ai_tensorboard_experiment_run_time_series_resource(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboard_experiment_run_time_series_resource` resource:\n\n\n  * `plugin_name`: Immutable. Name of the plugin this time series pertain to. Such as Scalar, Tensor, Blob\n\n  * `plugin_data`: Data of the current plugin, with the size limited to 65KB.\n\n  * `description`: Description of this TensorboardTimeSeries.\n\n  * `etag`: Used to perform a consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n  * `display_name`: Required. User provided name of this TensorboardTimeSeries. This value should be unique among all TensorboardTimeSeries resources belonging to the same TensorboardRun resource (parent resource).\n\n  * `update_time`: Output only. Timestamp when this TensorboardTimeSeries was last updated.\n\n  * `create_time`: Output only. Timestamp when this TensorboardTimeSeries was created.\n\n  * `name`: Output only. Name of the TensorboardTimeSeries.\n\n  * `metadata`: Output only. Scalar, Tensor, or Blob metadata for this TensorboardTimeSeries.\n\n  * `value_type`: Required. Immutable. Type of TensorboardTimeSeries value.\n  Possible values:\n    * VALUE_TYPE_UNSPECIFIED\n    * SCALAR\n    * TENSOR\n    * BLOB_SEQUENCE\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboard_experiment_run_time_series_resources.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboard_experiment_run_time_series_resources resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboard_experiment_run_time_series_resources\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboard_experiment_run_time_series_resources resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboard_experiment_run_time_series_resources` InSpec audit resource to to test a Google Cloud TensorboardExperimentRunTimeSeriesResource resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_tensorboard_experiment_run_time_series_resources(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run_time_series_resource['region']}/tensorboards/#{tensorboard_experiment_run_time_series_resource['tensorboard']}/experiments/#{tensorboard_experiment_run_time_series_resource['experiment']}/runs/#{tensorboard_experiment_run_time_series_resource['run']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboard_experiment_run_time_series_resources` resource:\n\nSee [google_vertex_ai_tensorboard_experiment_run_time_series_resource](google_vertex_ai_tensorboard_experiment_run_time_series_resource) for more detailed information.\n\n  * `plugin_names`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` plugin_name\n  * `plugin_data`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` plugin_data\n  * `descriptions`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` description\n  * `etags`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` etag\n  * `display_names`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` display_name\n  * `update_times`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` update_time\n  * `create_times`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` create_time\n  * `names`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` name\n  * `metadata`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` metadata\n  * `value_types`: an array of `google_vertex_ai_tensorboard_experiment_run_time_series_resource` value_type\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboard_experiment_runs.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboard_experiment_runs resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboard_experiment_runs\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboard_experiment_runs resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboard_experiment_runs` InSpec audit resource to to test a Google Cloud TensorboardExperimentRun resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_tensorboard_experiment_runs(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run['region']}/tensorboards/#{tensorboard_experiment_run['tensorboard']}/experiments/#{tensorboard_experiment_run['experiment']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboard_experiment_runs` resource:\n\nSee [google_vertex_ai_tensorboard_experiment_run](google_vertex_ai_tensorboard_experiment_run) for more detailed information.\n\n  * `display_names`: an array of `google_vertex_ai_tensorboard_experiment_run` display_name\n  * `update_times`: an array of `google_vertex_ai_tensorboard_experiment_run` update_time\n  * `descriptions`: an array of `google_vertex_ai_tensorboard_experiment_run` description\n  * `etags`: an array of `google_vertex_ai_tensorboard_experiment_run` etag\n  * `labels`: an array of `google_vertex_ai_tensorboard_experiment_run` labels\n  * `create_times`: an array of `google_vertex_ai_tensorboard_experiment_run` create_time\n  * `names`: an array of `google_vertex_ai_tensorboard_experiment_run` name\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboards.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboards resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboards\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboards resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboards` InSpec audit resource to to test a Google Cloud Tensorboard resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_tensorboards(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboards` resource:\n\nSee [google_vertex_ai_tensorboard](google_vertex_ai_tensorboard) for more detailed information.\n\n  * `names`: an array of `google_vertex_ai_tensorboard` name\n  * `is_defaults`: an array of `google_vertex_ai_tensorboard` is_default\n  * `update_times`: an array of `google_vertex_ai_tensorboard` update_time\n  * `labels`: an array of `google_vertex_ai_tensorboard` labels\n  * `blob_storage_path_prefixes`: an array of `google_vertex_ai_tensorboard` blob_storage_path_prefix\n  * `etags`: an array of `google_vertex_ai_tensorboard` etag\n  * `create_times`: an array of `google_vertex_ai_tensorboard` create_time\n  * `run_counts`: an array of `google_vertex_ai_tensorboard` run_count\n  * `encryption_specs`: an array of `google_vertex_ai_tensorboard` encryption_spec\n  * `display_names`: an array of `google_vertex_ai_tensorboard` display_name\n  * `descriptions`: an array of `google_vertex_ai_tensorboard` description\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboards_experiment.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboards_experiment resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboards_experiment\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboards_experiment resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboards_experiment` InSpec audit resource to to test a Google Cloud TensorboardsExperiment resource.\n\n## Examples\n\n```ruby\ndescribe google_vertex_ai_tensorboards_experiment(name: \"projects/#{gcp_project_id}/locations/#{tensorboards_experiment['region']}/tensorboards/#{tensorboards_experiment['tensorboard']}/experiments/#{tensorboards_experiment['name']}\", region: ' value_region') do\n\tit { should exist }\n\tits('description') { should cmp 'value_description' }\n\tits('source') { should cmp 'value_source' }\n\tits('display_name') { should cmp 'value_displayname' }\n\tits('create_time') { should cmp 'value_createtime' }\n\tits('update_time') { should cmp 'value_updatetime' }\n\tits('name') { should cmp 'value_name' }\n\tits('etag') { should cmp 'value_etag' }\n\nend\n\ndescribe google_vertex_ai_tensorboards_experiment(name: \"does_not_exit\", region: ' value_region') do\n\tit { should_not exist }\nend\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboards_experiment` resource:\n\n\n  * `description`: Description of this TensorboardExperiment.\n\n  * `source`: Immutable. Source of the TensorboardExperiment. Example: a custom training job.\n\n  * `display_name`: User provided name of this TensorboardExperiment.\n\n  * `create_time`: Output only. Timestamp when this TensorboardExperiment was created.\n\n  * `update_time`: Output only. Timestamp when this TensorboardExperiment was last updated.\n\n  * `labels`: The labels with user-defined metadata to organize your TensorboardExperiment. Label keys and values cannot be longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Dataset (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with `aiplatform.googleapis.com/` and are immutable. The following system labels exist for each Dataset: * `aiplatform.googleapis.com/dataset_metadata_schema`: output only. Its value is the metadata_schema's title.\n\n    * `additional_properties`: \n\n  * `name`: Output only. Name of the TensorboardExperiment. Format: `projects/{project}/locations/{location}/tensorboards/{tensorboard}/experiments/{experiment}`\n\n  * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_tensorboards_experiments.md",
    "content": "+++\ntitle = \"google_vertex_ai_tensorboards_experiments resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_tensorboards_experiments\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_tensorboards_experiments resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_tensorboards_experiments` InSpec audit resource to to test a Google Cloud TensorboardsExperiment resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_tensorboards_experiments(parent: \"projects/#{gcp_project_id}/locations/#{tensorboards_experiment['region']}/tensorboards/#{tensorboards_experiment['tensorboard']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_tensorboards_experiments` resource:\n\nSee [google_vertex_ai_tensorboards_experiment](google_vertex_ai_tensorboards_experiment) for more detailed information.\n\n  * `descriptions`: an array of `google_vertex_ai_tensorboards_experiment` description\n  * `sources`: an array of `google_vertex_ai_tensorboards_experiment` source\n  * `display_names`: an array of `google_vertex_ai_tensorboards_experiment` display_name\n  * `create_times`: an array of `google_vertex_ai_tensorboards_experiment` create_time\n  * `update_times`: an array of `google_vertex_ai_tensorboards_experiment` update_time\n  * `labels`: an array of `google_vertex_ai_tensorboards_experiment` labels\n  * `names`: an array of `google_vertex_ai_tensorboards_experiment` name\n  * `etags`: an array of `google_vertex_ai_tensorboards_experiment` etag\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_training_pipeline.md",
    "content": "+++\ntitle = \"google_vertex_ai_training_pipeline resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_training_pipeline\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_training_pipeline resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_training_pipeline` InSpec audit resource to to test a Google Cloud TrainingPipeline resource.\n\n## Examples\n\n```ruby\n      describe google_vertex_ai_training_pipeline(name: \"projects/#{gcp_project_id}/locations/#{training_pipeline['region']}/trainingPipelines/#{training_pipeline['name']}\", region: ' value_region') do\n     it { should exist }\n   end\n   describe google_vertex_ai_training_pipeline(name: \"does_not_exit\", region: ' value_region') do\n     it { should_not exist }\n   end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_training_pipeline` resource:\n\n\n  * `end_time`: Output only. Time when the TrainingPipeline entered any of the following states: `PIPELINE_STATE_SUCCEEDED`, `PIPELINE_STATE_FAILED`, `PIPELINE_STATE_CANCELLED`.\n\n  * `error`: The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\n\n    * `details`: A list of messages that carry the error details. There is a common set of message types for APIs to use.\n\n    * `code`: The status code, which should be an enum value of google.rpc.Code.\n\n    * `message`: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.\n\n  * `display_name`: Required. The user-defined name of this TrainingPipeline.\n\n  * `name`: Output only. Resource name of the TrainingPipeline.\n\n  * `input_data_config`: Specifies Vertex AI owned input data to be used for training, and possibly evaluating, the Model.\n\n    * `fraction_split`: Assigns the input data to training, validation, and test sets as per the given fractions. Any of `training_fraction`, `validation_fraction` and `test_fraction` may optionally be provided, they must sum to up to 1. If the provided ones sum to less than 1, the remainder is assigned to sets as decided by Vertex AI. If none of the fractions are set, by default roughly 80% of data is used for training, 10% for validation, and 10% for test.\n\n      * `training_fraction`: The fraction of the input data that is to be used to train the Model.\n\n      * `test_fraction`: The fraction of the input data that is to be used to evaluate the Model.\n\n      * `validation_fraction`: The fraction of the input data that is to be used to validate the Model.\n\n    * `persist_ml_use_assignment`: Whether to persist the ML use assignment to data item system labels.\n\n    * `saved_query_id`: Only applicable to Datasets that have SavedQueries. The ID of a SavedQuery (annotation set) under the Dataset specified by dataset_id used for filtering Annotations for training. Only Annotations that are associated with this SavedQuery are used in respectively training. When used in conjunction with annotations_filter, the Annotations used for training are filtered by both saved_query_id and annotations_filter. Only one of saved_query_id and annotation_schema_uri should be specified as both of them represent the same thing: problem type.\n\n    * `annotations_filter`: Applicable only to Datasets that have DataItems and Annotations. A filter on Annotations of the Dataset. Only Annotations that both match this filter and belong to DataItems not ignored by the split method are used in respectively training, validation or test role, depending on the role of the DataItem they are on (for the auto-assigned that role is decided by Vertex AI). A filter with same syntax as the one used in ListAnnotations may be used, but note here it filters across all Annotations of the Dataset, and not just within a single DataItem.\n\n    * `gcs_destination`: The Google Cloud Storage location where the output is to be written to.\n\n      * `output_uri_prefix`: Required. Google Cloud Storage URI to output directory. If the uri doesn't end with '/', a '/' will be automatically appended. The directory is created if it doesn't exist.\n\n    * `bigquery_destination`: The BigQuery location for the output content.\n\n      * `output_uri`: Required. BigQuery URI to a project or table, up to 2000 characters long. When only the project is specified, the Dataset and Table is created. When the full table reference is specified, the Dataset must exist and table must not exist. Accepted forms: * BigQuery path. For example: `bq://projectId` or `bq://projectId.bqDatasetId` or `bq://projectId.bqDatasetId.bqTableId`.\n\n    * `stratified_split`: Assigns input data to the training, validation, and test sets so that the distribution of values found in the categorical column (as specified by the `key` field) is mirrored within each split. The fraction values determine the relative sizes of the splits. For example, if the specified column has three values, with 50% of the rows having value \"A\", 25% value \"B\", and 25% value \"C\", and the split fractions are specified as 80/10/10, then the training set will constitute 80% of the training data, with about 50% of the training set rows having the value \"A\" for the specified column, about 25% having the value \"B\", and about 25% having the value \"C\". Only the top 500 occurring values are used; any values not in the top 500 values are randomly assigned to a split. If less than three rows contain a specific value, those rows are randomly assigned. Supported only for tabular Datasets.\n\n      * `training_fraction`: The fraction of the input data that is to be used to train the Model.\n\n      * `test_fraction`: The fraction of the input data that is to be used to evaluate the Model.\n\n      * `key`: Required. The key is a name of one of the Dataset's data columns. The key provided must be for a categorical column.\n\n      * `validation_fraction`: The fraction of the input data that is to be used to validate the Model.\n\n    * `annotation_schema_uri`: Applicable only to custom training with Datasets that have DataItems and Annotations. Cloud Storage URI that points to a YAML file describing the annotation schema. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). The schema files that can be used here are found in gs://google-cloud-aiplatform/schema/dataset/annotation/ , note that the chosen schema must be consistent with metadata of the Dataset specified by dataset_id. Only Annotations that both match this schema and belong to DataItems not ignored by the split method are used in respectively training, validation or test role, depending on the role of the DataItem they are on. When used in conjunction with annotations_filter, the Annotations used for training are filtered by both annotations_filter and annotation_schema_uri.\n\n    * `predefined_split`: Assigns input data to training, validation, and test sets based on the value of a provided key. Supported only for tabular Datasets.\n\n      * `key`: Required. The key is a name of one of the Dataset's data columns. The value of the key (either the label's value or value in the column) must be one of {`training`, `validation`, `test`}, and it defines to which set the given piece of data is assigned. If for a piece of data the key is not present or has an invalid value, that piece is ignored by the pipeline.\n\n    * `filter_split`: Assigns input data to training, validation, and test sets based on the given filters, data pieces not matched by any filter are ignored. Currently only supported for Datasets containing DataItems. If any of the filters in this message are to match nothing, then they can be set as '-' (the minus sign). Supported only for unstructured Datasets. \n\n      * `validation_filter`: Required. A filter on DataItems of the Dataset. DataItems that match this filter are used to validate the Model. A filter with same syntax as the one used in DatasetService.ListDataItems may be used. If a single DataItem is matched by more than one of the FilterSplit filters, then it is assigned to the first set that applies to it in the training, validation, test order.\n\n      * `test_filter`: Required. A filter on DataItems of the Dataset. DataItems that match this filter are used to test the Model. A filter with same syntax as the one used in DatasetService.ListDataItems may be used. If a single DataItem is matched by more than one of the FilterSplit filters, then it is assigned to the first set that applies to it in the training, validation, test order.\n\n      * `training_filter`: Required. A filter on DataItems of the Dataset. DataItems that match this filter are used to train the Model. A filter with same syntax as the one used in DatasetService.ListDataItems may be used. If a single DataItem is matched by more than one of the FilterSplit filters, then it is assigned to the first set that applies to it in the training, validation, test order.\n\n    * `timestamp_split`: Assigns input data to training, validation, and test sets based on a provided timestamps. The youngest data pieces are assigned to training set, next to validation set, and the oldest to the test set. Supported only for tabular Datasets.\n\n      * `test_fraction`: The fraction of the input data that is to be used to evaluate the Model.\n\n      * `training_fraction`: The fraction of the input data that is to be used to train the Model.\n\n      * `validation_fraction`: The fraction of the input data that is to be used to validate the Model.\n\n      * `key`: Required. The key is a name of one of the Dataset's data columns. The values of the key (the values in the column) must be in RFC 3339 `date-time` format, where `time-offset` = `\"Z\"` (e.g. 1985-04-12T23:20:50.52Z). If for a piece of data the key is not present or has an invalid value, that piece is ignored by the pipeline.\n\n    * `dataset_id`: Required. The ID of the Dataset in the same Project and Location which data will be used to train the Model. The Dataset must use schema compatible with Model being trained, and what is compatible should be described in the used TrainingPipeline's training_task_definition. For tabular Datasets, all their data is exported to training, to pick and choose from.\n\n  * `parent_model`: Optional. When specify this field, the `model_to_upload` will not be uploaded as a new model, instead, it will become a new version of this `parent_model`.\n\n  * `update_time`: Output only. Time when the TrainingPipeline was most recently updated.\n\n  * `state`: Output only. The detailed state of the pipeline.\n  Possible values:\n    * PIPELINE_STATE_UNSPECIFIED\n    * PIPELINE_STATE_QUEUED\n    * PIPELINE_STATE_PENDING\n    * PIPELINE_STATE_RUNNING\n    * PIPELINE_STATE_SUCCEEDED\n    * PIPELINE_STATE_FAILED\n    * PIPELINE_STATE_CANCELLING\n    * PIPELINE_STATE_CANCELLED\n    * PIPELINE_STATE_PAUSED\n\n  * `labels`: The labels with user-defined metadata to organize TrainingPipelines. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n    * `additional_properties`: \n\n  * `training_task_definition`: Required. A Google Cloud Storage path to the YAML file that defines the training task which is responsible for producing the model artifact, and may also include additional auxiliary work. The definition files that can be used here are found in gs://google-cloud-aiplatform/schema/trainingjob/definition/. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n  * `start_time`: Output only. Time when the TrainingPipeline for the first time entered the `PIPELINE_STATE_RUNNING` state.\n\n  * `create_time`: Output only. Time when the TrainingPipeline was created.\n\n  * `training_task_metadata`: Output only. The metadata information as specified in the training_task_definition's `metadata`. This metadata is an auxiliary runtime and final information about the training task. While the pipeline is running this information is populated only at a best effort basis. Only present if the pipeline's training_task_definition contains `metadata` object.\n\n  * `training_task_inputs`: Required. The training task's parameter(s), as specified in the training_task_definition's `inputs`.\n\n  * `model_id`: Optional. The ID to use for the uploaded Model, which will become the final component of the model resource name. This value may be up to 63 characters, and valid characters are `[a-z0-9_-]`. The first character cannot be a number or hyphen.\n\n  * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n    * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n  * `model_to_upload`: A trained machine learning Model.\n\n    * `model_source_info`: Detail description of the source information of the model.\n\n      * `copy`: If this Model is copy of another Model. If true then source_type pertains to the original.\n\n      * `source_type`: Type of the model source.\n      Possible values:\n        * MODEL_SOURCE_TYPE_UNSPECIFIED\n        * AUTOML\n        * CUSTOM\n        * BQML\n        * MODEL_GARDEN\n        * GENIE\n\n    * `name`: The resource name of the Model.\n\n    * `metadata`: Immutable. An additional information about the Model; the schema of the metadata can be found in metadata_schema. Unset if the Model does not have any additional information.\n\n    * `update_time`: Output only. Timestamp when this Model was most recently updated.\n\n    * `etag`: Used to perform consistent read-modify-write updates. If not set, a blind \"overwrite\" update happens.\n\n    * `description`: The description of the Model.\n\n    * `deployed_models`: Output only. The pointers to DeployedModels created from this Model. Note that Model could have been deployed to Endpoints in different Locations.\n\n      * `deployed_model_id`: Immutable. An ID of a DeployedModel in the above Endpoint.\n\n      * `endpoint`: Immutable. A resource name of an Endpoint.\n\n    * `create_time`: Output only. Timestamp when this Model was uploaded into Vertex AI.\n\n    * `explanation_spec`: Specification of Model explanation.\n\n      * `parameters`: Parameters to configure explaining for Model's predictions.\n\n        * `output_indices`: If populated, only returns attributions that have output_index contained in output_indices. It must be an ndarray of integers, with the same shape of the output it's explaining. If not populated, returns attributions for top_k indices of outputs. If neither top_k nor output_indices is populated, returns the argmax index of the outputs. Only applicable to Models that predict multiple outputs (e,g, multi-class Models that predict multiple classes).\n\n        * `examples`: Example-based explainability that returns the nearest neighbors from the provided dataset.\n\n          * `presets`: Preset configuration for example-based explanations\n\n            * `modality`: The modality of the uploaded model, which automatically configures the distance measurement and feature normalization for the underlying example index and queries. If your model does not precisely fit one of these types, it is okay to choose the closest type.\n            Possible values:\n              * MODALITY_UNSPECIFIED\n              * IMAGE\n              * TEXT\n              * TABULAR\n\n            * `query`: Preset option controlling parameters for speed-precision trade-off when querying for examples. If omitted, defaults to `PRECISE`.\n            Possible values:\n              * PRECISE\n              * FAST\n\n          * `neighbor_count`: The number of neighbors to return when querying for examples.\n\n          * `example_gcs_source`: The Cloud Storage input instances.\n\n            * `gcs_source`: The Google Cloud Storage location for the input content.\n\n              * `uris`: Required. Google Cloud Storage URI(-s) to the input file(s). May contain wildcards. For more information on wildcards, see https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames.\n\n            * `data_format`: The format in which instances are given, if not specified, assume it's JSONL format. Currently only JSONL format is supported.\n            Possible values:\n              * DATA_FORMAT_UNSPECIFIED\n              * JSONL\n\n          * `nearest_neighbor_search_config`: The full configuration for the generated index, the semantics are the same as metadata and should match [NearestNeighborSearchConfig](https://cloud.google.com/vertex-ai/docs/explainable-ai/configuring-explanations-example-based#nearest-neighbor-search-config).\n\n        * `xrai_attribution`: An explanation method that redistributes Integrated Gradients attributions to segmented regions, taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1906.02825 Supported only by image Models.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is met within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `top_k`: If populated, returns attributions for top K indices of outputs (defaults to 1). Only applies to Models that predicts more than one outputs (e,g, multi-class Models). When set to -1, returns explanations for all outputs.\n\n        * `integrated_gradients_attribution`: An attribution method that computes the Aumann-Shapley value taking advantage of the model's fully differentiable structure. Refer to this paper for more details: https://arxiv.org/abs/1703.01365\n\n          * `step_count`: Required. The number of steps for approximating the path integral. A good value to start is 50 and gradually increase until the sum to diff property is within the desired error range. Valid range of its value is [1, 100], inclusively.\n\n          * `smooth_grad_config`: Config for SmoothGrad approximation of gradients. When enabled, the gradients are approximated by averaging the gradients from noisy samples in the vicinity of the inputs. Adding noise can help improve the computed gradients. Refer to this paper for more details: https://arxiv.org/pdf/1706.03825.pdf\n\n            * `feature_noise_sigma`: Noise sigma by features. Noise sigma represents the standard deviation of the gaussian kernel that will be used to add noise to interpolated inputs prior to computing gradients.\n\n              * `noise_sigma`: Noise sigma per feature. No noise is added to features that are not set.\n\n                * `name`: The name of the input feature for which noise sigma is provided. The features are defined in explanation metadata inputs.\n\n                * `sigma`: This represents the standard deviation of the Gaussian kernel that will be used to add noise to the feature prior to computing gradients. Similar to noise_sigma but represents the noise added to the current feature. Defaults to 0.1.\n\n            * `noise_sigma`: This is a single float value and will be used to add noise to all the features. Use this field when all features are normalized to have the same distribution: scale to range [0, 1], [-1, 1] or z-scoring, where features are normalized to have 0-mean and 1-variance. Learn more about [normalization](https://developers.google.com/machine-learning/data-prep/transform/normalization). For best results the recommended value is about 10% - 20% of the standard deviation of the input feature. Refer to section 3.2 of the SmoothGrad paper: https://arxiv.org/pdf/1706.03825.pdf. Defaults to 0.1. If the distribution is different per feature, set feature_noise_sigma instead for each feature.\n\n            * `noisy_sample_count`: The number of gradient samples to use for approximation. The higher this number, the more accurate the gradient is, but the runtime complexity increases by this factor as well. Valid range of its value is [1, 50]. Defaults to 3.\n\n          * `blur_baseline_config`: Config for blur baseline. When enabled, a linear path from the maximally blurred image to the input image is created. Using a blurred baseline instead of zero (black image) is motivated by the BlurIG approach explained here: https://arxiv.org/abs/2004.03383\n\n            * `max_blur_sigma`: The standard deviation of the blur kernel for the blurred baseline. The same blurring parameter is used for both the height and the width dimension. If not set, the method defaults to the zero (i.e. black for images) baseline.\n\n        * `sampled_shapley_attribution`: An attribution method that approximates Shapley values for features that contribute to the label being predicted. A sampling strategy is used to approximate the value rather than considering all subsets of features.\n\n          * `path_count`: Required. The number of feature permutations to consider when approximating the Shapley values. Valid range of its value is [1, 50], inclusively.\n\n      * `metadata`: Metadata describing the Model's input and output for explanation.\n\n        * `feature_attributions_schema_uri`: Points to a YAML file stored on Google Cloud Storage describing the format of the feature attributions. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML tabular Models always have this field populated by Vertex AI. Note: The URI given on output may be different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n        * `latent_space_source`: Name of the source to generate embeddings for example based explanations.\n\n        * `outputs`: Required. Map from output names to output metadata. For Vertex AI-provided Tensorflow images, keys can be any user defined string that consists of any UTF-8 characters. For custom images, keys are the name of the output field in the prediction to be explained. Currently only one key is allowed.\n\n          * `additional_properties`: Metadata of the prediction output to be explained.\n\n        * `inputs`: Required. Map from feature names to feature input metadata. Keys are the name of the features. Values are the specification of the feature. An empty InputMetadata is valid. It describes a text feature which has the name specified as the key in ExplanationMetadata.inputs. The baseline of the empty feature is chosen by Vertex AI. For Vertex AI-provided Tensorflow images, the key can be any friendly name of the feature. Once specified, featureAttributions are keyed by this key (if not grouped with another feature). For custom images, the key must match with the key in instance.\n\n          * `additional_properties`: Metadata of the input of a feature. Fields other than InputMetadata.input_baselines are applicable only for Models that are using Vertex AI-provided images for Tensorflow.\n\n    * `encryption_spec`: Represents a customer-managed encryption key spec that can be applied to a top-level resource.\n\n      * `kms_key_name`: Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.\n\n    * `pipeline_job`: Optional. This field is populated if the model is produced by a pipeline job.\n\n    * `predict_schemata`: Contains the schemata used in Model's predictions and explanations via PredictionService.Predict, PredictionService.Explain and BatchPredictionJob.\n\n      * `instance_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single instance, which are used in PredictRequest.instances, ExplainRequest.instances and BatchPredictionJob.input_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `parameters_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the parameters of prediction and explanation via PredictRequest.parameters, ExplainRequest.parameters and BatchPredictionJob.model_parameters. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI, if no parameters are supported, then it is set to an empty string. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n      * `prediction_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing the format of a single prediction produced by this Model, which are returned via PredictResponse.predictions, ExplainResponse.explanations, and BatchPredictionJob.output_config. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n    * `version_update_time`: Output only. Timestamp when this version was most recently updated.\n\n    * `supported_export_formats`: Output only. The formats in which this Model may be exported. If empty, this Model is not available for export.\n\n      * `exportable_contents`: Output only. The content of this Model that may be exported.\n\n      * `id`: Output only. The ID of the export format. The possible format IDs are: * `tflite` Used for Android mobile devices. * `edgetpu-tflite` Used for [Edge TPU](https://cloud.google.com/edge-tpu/) devices. * `tf-saved-model` A tensorflow model in SavedModel format. * `tf-js` A [TensorFlow.js](https://www.tensorflow.org/js) model that can be used in the browser and in Node.js using JavaScript. * `core-ml` Used for iOS mobile devices. * `custom-trained` A Model that was uploaded or trained by custom code.\n\n    * `original_model_info`: Contains information about the original Model if this Model is a copy.\n\n      * `model`: Output only. The resource name of the Model this Model is a copy of, including the revision. Format: `projects/{project}/locations/{location}/models/{model_id}@{version_id}`\n\n    * `metadata_artifact`: Output only. The resource name of the Artifact that was created in MetadataStore when creating the Model. The Artifact resource name pattern is `projects/{project}/locations/{location}/metadataStores/{metadata_store}/artifacts/{artifact}`.\n\n    * `supported_input_storage_formats`: Output only. The formats this Model supports in BatchPredictionJob.input_config. If PredictSchemata.instance_schema_uri exists, the instances should be given as per that schema. The possible formats are: * `jsonl` The JSON Lines format, where each instance is a single line. Uses GcsSource. * `csv` The CSV format, where each instance is a single comma-separated line. The first line in the file is the header, containing comma-separated field names. Uses GcsSource. * `tf-record` The TFRecord format, where each instance is a single record in tfrecord syntax. Uses GcsSource. * `tf-record-gzip` Similar to `tf-record`, but the file is gzipped. Uses GcsSource. * `bigquery` Each instance is a single row in BigQuery. Uses BigQuerySource. * `file-list` Each line of the file is the location of an instance to process, uses `gcs_source` field of the InputConfig object. If this Model doesn't support any of these formats it means it cannot be used with a BatchPredictionJob. However, if it has supported_deployment_resources_types, it could serve online predictions by using PredictionService.Predict or PredictionService.Explain.\n\n    * `metadata_schema_uri`: Immutable. Points to a YAML file stored on Google Cloud Storage describing additional information about the Model, that is specific to it. Unset if the Model does not have any additional information. The schema is defined as an OpenAPI 3.0.2 [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). AutoML Models always have this field populated by Vertex AI, if no additional metadata is needed, this field is set to an empty string. Note: The URI given on output will be immutable and probably different, including the URI scheme, than the one given on input. The output URI will point to a location where the user only has a read access.\n\n    * `container_spec`: Specification of a container for serving predictions. Some fields in this message correspond to fields in the [Kubernetes Container v1 core specification](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `predict_route`: Immutable. HTTP path on the container to send prediction requests to. Vertex AI forwards requests sent using projects.locations.endpoints.predict to this path on the container's IP address and port. Vertex AI then returns the container's response in the API response. For example, if you set this field to `/foo`, then when Vertex AI receives a prediction request, it forwards the request body in a POST request to the `/foo` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n      * `image_uri`: Required. Immutable. URI of the Docker image to be used as the custom container for serving predictions. This URI must identify an image in Artifact Registry or Container Registry. Learn more about the [container publishing requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#publishing), including permissions requirements for the Vertex AI Service Agent. The container image is ingested upon ModelService.UploadModel, stored internally, and this original path is afterwards not used. To learn about the requirements for the Docker image itself, see [Custom container requirements](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#). You can use the URI to one of Vertex AI's [pre-built container images for prediction](https://cloud.google.com/vertex-ai/docs/predictions/pre-built-containers) in this field.\n\n      * `env`: Immutable. List of environment variables to set in the container. After the container starts running, code running in the container can read these environment variables. Additionally, the command and args fields can reference these variables. Later entries in this list can also reference earlier entries. For example, the following example sets the variable `VAR_2` to have the value `foo bar`: ```json [ { \"name\": \"VAR_1\", \"value\": \"foo\" }, { \"name\": \"VAR_2\", \"value\": \"$(VAR_1) bar\" } ] ``` If you switch the order of the variables in the example, then the expansion does not occur. This field corresponds to the `env` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n        * `name`: Required. Name of the environment variable. Must be a valid C identifier.\n\n        * `value`: Required. Variables that reference a $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not.\n\n      * `args`: Immutable. Specifies arguments for the command that runs when the container starts. This overrides the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd). Specify this field as an array of executable and arguments, similar to a Docker `CMD`'s \"default parameters\" form. If you don't specify this field but do specify the command field, then the command from the `command` field runs without any additional arguments. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). If you don't specify this field and don't specify the `command` field, then the container's [`ENTRYPOINT`](https://docs.docker.com/engine/reference/builder/#cmd) and `CMD` determine what runs based on their default behavior. See the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `args` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `command`: Immutable. Specifies the command that runs when the container starts. This overrides the container's [ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint). Specify this field as an array of executable and arguments, similar to a Docker `ENTRYPOINT`'s \"exec\" form, not its \"shell\" form. If you do not specify this field, then the container's `ENTRYPOINT` runs, in conjunction with the args field or the container's [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd), if either exists. If this field is not specified and the container does not have an `ENTRYPOINT`, then refer to the Docker documentation about [how `CMD` and `ENTRYPOINT` interact](https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact). If you specify this field, then you can also specify the `args` field to provide additional arguments for this command. However, if you specify this field, then the container's `CMD` is ignored. See the [Kubernetes documentation about how the `command` and `args` fields interact with a container's `ENTRYPOINT` and `CMD`](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes). In this field, you can reference [environment variables set by Vertex AI](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables) and environment variables set in the env field. You cannot reference environment variables set in the Docker image. In order for environment variables to be expanded, reference them by using the following syntax: $( VARIABLE_NAME) Note that this differs from Bash variable expansion, which does not use parentheses. If a variable cannot be resolved, the reference in the input string is used unchanged. To avoid variable expansion, you can escape this syntax with `$$`; for example: $$(VARIABLE_NAME) This field corresponds to the `command` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n      * `ports`: Immutable. List of ports to expose from the container. Vertex AI sends any prediction requests that it receives to the first port on this list. Vertex AI also sends [liveness and health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#liveness) to this port. If you do not specify this field, it defaults to following value: ```json [ { \"containerPort\": 8080 } ] ``` Vertex AI does not use ports other than the first one listed. This field corresponds to the `ports` field of the Kubernetes Containers [v1 core API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core).\n\n        * `container_port`: The number of the port to expose on the pod's IP address. Must be a valid port number, between 1 and 65535 inclusive.\n\n      * `health_route`: Immutable. HTTP path on the container to send health checks to. Vertex AI intermittently sends GET requests to this path on the container's IP address and port to check that the container is healthy. Read more about [health checks](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#health). For example, if you set this field to `/bar`, then Vertex AI intermittently sends a GET request to the `/bar` path on the port of your container specified by the first value of this `ModelContainerSpec`'s ports field. If you don't specify this field, it defaults to the following value when you deploy this Model to an Endpoint: /v1/endpoints/ENDPOINT/deployedModels/ DEPLOYED_MODEL:predict The placeholders in this value are replaced as follows: * ENDPOINT: The last segment (following `endpoints/`)of the Endpoint.name][] field of the Endpoint where this Model has been deployed. (Vertex AI makes this value available to your container code as the [`AIP_ENDPOINT_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) * DEPLOYED_MODEL: DeployedModel.id of the `DeployedModel`. (Vertex AI makes this value available to your container code as the [`AIP_DEPLOYED_MODEL_ID` environment variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).)\n\n    * `version_id`: Output only. Immutable. The version ID of the model. A new version is committed when a new model version is uploaded or trained under an existing model id. It is an auto-incrementing decimal number in string representation.\n\n    * `artifact_uri`: Immutable. The path to the directory containing the Model artifact and any of its supporting files. Not present for AutoML Models or Large Models.\n\n    * `training_pipeline`: Output only. The resource name of the TrainingPipeline that uploaded this Model, if any.\n\n    * `display_name`: Required. The display name of the Model. The name can be up to 128 characters long and can consist of any UTF-8 characters.\n\n    * `supported_deployment_resources_types`: Output only. When this Model is deployed, its prediction resources are described by the `prediction_resources` field of the Endpoint.deployed_models object. Because not all Models support all resource configuration types, the configuration types this Model supports are listed here. If no configuration types are listed, the Model cannot be deployed to an Endpoint and does not support online predictions (PredictionService.Predict or PredictionService.Explain). Such a Model can serve predictions by using a BatchPredictionJob, if it has at least one entry each in supported_input_storage_formats and supported_output_storage_formats.\n\n    * `supported_output_storage_formats`: Output only. The formats this Model supports in BatchPredictionJob.output_config. If both PredictSchemata.instance_schema_uri and PredictSchemata.prediction_schema_uri exist, the predictions are returned together with their instances. In other words, the prediction has the original instance data first, followed by the actual prediction content (as per the schema). The possible formats are: * `jsonl` The JSON Lines format, where each prediction is a single line. Uses GcsDestination. * `csv` The CSV format, where each prediction is a single comma-separated line. The first line in the file is the header, containing comma-separated field names. Uses GcsDestination. * `bigquery` Each prediction is a single row in a BigQuery table, uses BigQueryDestination . If this Model doesn't support any of these formats it means it cannot be used with a BatchPredictionJob. However, if it has supported_deployment_resources_types, it could serve online predictions by using PredictionService.Predict or PredictionService.Explain.\n\n    * `version_aliases`: User provided version aliases so that a model version can be referenced via alias (i.e. `projects/{project}/locations/{location}/models/{model_id}@{version_alias}` instead of auto-generated version id (i.e. `projects/{project}/locations/{location}/models/{model_id}@{version_id})`. The format is a-z{0,126}[a-z0-9] to distinguish from version_id. A default version alias will be created for the first version of the model, and there must be exactly one default version alias for a model.\n\n    * `version_create_time`: Output only. Timestamp when this version was created.\n\n    * `version_description`: The description of this version.\n\n    * `labels`: The labels with user-defined metadata to organize your Models. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.\n\n      * `additional_properties`: \n\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/content/google_vertex_ai_training_pipelines.md",
    "content": "+++\ntitle = \"google_vertex_ai_training_pipelines resource\"\n\ndraft = false\n\n\n[menu.gcp]\ntitle = \"google_vertex_ai_training_pipelines\"\nidentifier = \"inspec/resources/gcp/google_vertex_ai_training_pipelines resource\"\nparent = \"inspec/resources/gcp\"\n+++\n\nUse the `google_vertex_ai_training_pipelines` InSpec audit resource to to test a Google Cloud TrainingPipeline resource.\n\n## Examples\n\n```ruby\n    describe google_vertex_ai_training_pipelines(parent: \"projects/#{gcp_project_id}/locations/#{training_pipeline['region']}\", region: ' value_region') do\n    it { should exist }\n  end\n```\n\n## Properties\n\nProperties that can be accessed from the `google_vertex_ai_training_pipelines` resource:\n\nSee [google_vertex_ai_training_pipeline](google_vertex_ai_training_pipeline) for more detailed information.\n\n  * `end_times`: an array of `google_vertex_ai_training_pipeline` end_time\n  * `errors`: an array of `google_vertex_ai_training_pipeline` error\n  * `display_names`: an array of `google_vertex_ai_training_pipeline` display_name\n  * `names`: an array of `google_vertex_ai_training_pipeline` name\n  * `input_data_configs`: an array of `google_vertex_ai_training_pipeline` input_data_config\n  * `parent_models`: an array of `google_vertex_ai_training_pipeline` parent_model\n  * `update_times`: an array of `google_vertex_ai_training_pipeline` update_time\n  * `states`: an array of `google_vertex_ai_training_pipeline` state\n  * `labels`: an array of `google_vertex_ai_training_pipeline` labels\n  * `training_task_definitions`: an array of `google_vertex_ai_training_pipeline` training_task_definition\n  * `start_times`: an array of `google_vertex_ai_training_pipeline` start_time\n  * `create_times`: an array of `google_vertex_ai_training_pipeline` create_time\n  * `training_task_metadata`: an array of `google_vertex_ai_training_pipeline` training_task_metadata\n  * `training_task_inputs`: an array of `google_vertex_ai_training_pipeline` training_task_inputs\n  * `model_ids`: an array of `google_vertex_ai_training_pipeline` model_id\n  * `encryption_specs`: an array of `google_vertex_ai_training_pipeline` encryption_spec\n  * `model_to_uploads`: an array of `google_vertex_ai_training_pipeline` model_to_upload\n\n## Filter criteria\n\nThis resource supports all of the above properties as filter criteria, which can be used\nwith `where` as a block or a method.\n\n## GCP permissions\n"
  },
  {
    "path": "docs-chef-io/go.mod",
    "content": "module github.com/inspec/inspec-gcp/docs-chef-io\n\ngo 1.17\n"
  },
  {
    "path": "generate/Gemfile",
    "content": "source 'https://rubygems.org'\n\ngem 'bundle'\ngem 'faraday', '>= 0.16.2'\ngem 'google-api-client'\ngem 'google-cloud'\ngem 'googleauth'\ngem 'inifile'\ngem 'inspec-bin', '4.16.0'\ngem 'rubocop'\n\ngroup :development do\n  gem 'github_changelog_generator'\n  gem 'pry-coolline'\n  gem 'rake'\n  gem 'vcr'\n  gem 'webmock'\nend\n"
  },
  {
    "path": "generate/README.md",
    "content": "** This tool is experimental and may change with little notice **\n\n## What this tool does\n\nAllows a user to generate InSpec controls from a GCP environment. Similar to [inspec-iggy](https://github.com/mattray/inspec-iggy) but without the requirement of the infrastructure being managed via Terraform. This tool gathers info on the environment by querying the GCP APIs directly. Currently it only works for a single GCP project, but in the future this could be modified.\n\n# Instructions\n\n## Install bundle & inspec CLI\nFollow directions from https://github.com/inspec/inspec-gcp/ about prerequisites. This tool is based heavily off \nof the inspec-gcp resource pack, so setup is similar. Individual APIs need to be enabled if you wish to generate \ntests for resources that use that API.\n\nYou will need ruby 2.5+ and bundler installed, run `bundle install` in this directory to ensure dependencies are installed\n\n## Set environment variables:\n\n### Required\n\n`GCP_PROJECT_NAME=my-gcp-project`\nThe name of the GCP project to generate tests for. Currently this tool only works for a single project. This may change in the future to accommodate an entire organization\n\n`GOOGLE_APPLICATION_CREDENTIALS=/path/to/serviceaccount.json`\nGives InSpec access to view the GCP account in question. This must be created manually either via the \nconsole or a CLI tool like `gcloud`. See https://cloud.google.com/iam/docs/understanding-service-accounts\nThis must be a JSON service account file.\n\n### Optional\n\n`CNF_PATH=/path/to/config/directory`\nPath to the directory containing configuration files for modifying which tests to generate.\n\n`OUTPUT_PATH=/path/to/output/directory` (must exist)\nThis points to the directory where generated tests will be output\n\n`TEMPLATE_PATH=/path/to/generated_test_template.erb`\n`generated_test_template.erb` is provided with this resource pack.\n\n## Create configuration files (optional)\n\nResources for which tests are generated can be controlled via configuration files for each type of resource. Configuration files are to be placed within the `CNF_PATH` directory, and are YAML files that contain lists of filters and ignored fields.\n\nConfiguration files are named the same as the InSpec resource for that GCP resource. For example, Google Compute Instances are represented by the InSpec resource `google_compute_instance.rb` and configuration file `google_compute_instance.yaml`.\n\nConfiguration files have two arrays, `filters` and `ignore_fields`. \n\n** Filters are not currently supported **\nFilters are ruby code that is evaluated in context of each potential resource to generate tests for. They have access to the InSpec resource in question as a variable `resource` and return a boolean for if this resource should generate a test. For example, for a Compute Disk `resource` would be a [disk](https://github.com/inspec/inspec-gcp/blob/master/libraries/google_compute_disk.rb) object and have access to all of the [properties](https://github.com/inspec/inspec-gcp/blob/master/docs/resources/google_compute_disk.md) for that disk.\n\nThis allows a user to generate tests based on their needs. For example, a `google_compute_instance.yaml` file of the following:\n```\nignore_fields: []\nfilters: \n  - resource.status == \"RUNNING\"\n```\n\nWould generate tests for every compute instance that is currently running.\n\n`ignore_fields` is used to ignore certain fields when writing an InSpec test for a type of resource. These must match the property name in the [markdown doc](https://github.com/inspec/inspec-gcp/tree/master/docs/resources) for the resource. This only works for top level properties currently.\n\nThis allows a user to omit extraneous fields when generating tests. For example, a `google_compute_instance.yaml` file of the following:\n```\nignore_fields: ['creation_timestamp', 'metadata']\nfilters: []\n```\n\nWould generate tests for every Compute Instance, but will omit any reference to `creation_timestamp` and `metadata` within those tests.\n\nCommon use of `filters` would be to exclude managed resources, such as Compute Instances managed by Instance Group Managers. These can be ephemeral resources, so writing tests against individuals may not be useful. \n\n## Create InSpec profile\n\nI have included a collection of generation tests within the `gen-controls` directory in this package. Each of these will generate tests for the GCP resource it is named after. `compute_instance.rb` is an InSpec test that will generate tests for all Compute Instances in the project. I have included an InSpec profile at `./generate-profile` that will use the resources included in this package. Add any tests from the `gen-controls` directory to the `./generate-profile/controls` directory to generate tests for those types of resources.\n\n```\n# Move one (or more) tests to the control folder of the included InSpec profile.\ncp gen-controls/* generate-profile/controls/\n```\n\n## Run InSpec profile\n\nRun the InSpec profile with \n```\n# From the inspec-gcp-generate directory\nbundle install\nbundle exec inspec exec generate-profile -t gcp://\nls $OUTPUT_PATH\n```\nThe tests may take a while to execute, as they need to iterate every resource in the project. Executing the tests will not produce any command line output, see the `OUTPUT_DIRECTORY` for results. I recommend starting with a small subset of resources by only including a single test from the `generate` directory at first to ensure everything is working.\n\nYou can now execute the generated tests to verify that they work correctly"
  },
  {
    "path": "generate/gen-controls/bigquery_dataset.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_bigquery_dataset resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_bigquery_dataset-1.0' do\n  impact 1.0\n  title 'google_bigquery_dataset resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_bigquery_dataset')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_bigquery_dataset.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_bigquery_datasets(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_bigquery_dataset(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Dataset_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/bigquery_table.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_bigquery_table resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_bigquery_table-1.0' do\n  impact 1.0\n  title 'google_bigquery_table resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_bigquery_table')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_bigquery_table.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  dataset_ids = google_bigquery_datasets(project: project_name).ids\n  dataset_ids.each do |dataset_id|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ dataset: dataset_id.split(':').last }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_bigquery_tables(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_bigquery_table(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Table_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/cloudfunctions_cloud_function.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_cloudfunctions_cloud_function resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_cloudfunctions_cloud_function-1.0' do\n  impact 1.0\n  title 'google_cloudfunctions_cloud_function resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_cloudfunctions_cloud_function')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_cloudfunctions_cloud_function.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ location: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_cloudfunctions_cloud_functions(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_cloudfunctions_cloud_function(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/CloudFunction_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_autoscaler.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_autoscaler resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_autoscaler-1.0' do\n  impact 1.0\n  title 'google_compute_autoscaler resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_autoscaler')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_autoscaler.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_autoscalers(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_autoscaler(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Autoscaler_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_backend_bucket.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_backend_bucket resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_backend_bucket-1.0' do\n  impact 1.0\n  title 'google_compute_backend_bucket resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_backend_bucket')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_backend_bucket.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_backend_buckets(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_backend_bucket(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/BackendBucket_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_backend_service.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_backend_service resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_backend_service-1.0' do\n  impact 1.0\n  title 'google_compute_backend_service resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_backend_service')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_backend_service.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_backend_services(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_backend_service(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/BackendService_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_disk.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_disk resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_disk-1.0' do\n  impact 1.0\n  title 'google_compute_disk resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_disk')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_disk.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_disks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_disk(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Disk_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_firewall.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_firewall resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_firewall-1.0' do\n  impact 1.0\n  title 'google_compute_firewall resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_firewall')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_firewall.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_firewalls(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_firewall(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Firewall_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_global_address.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_global_address resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_global_address-1.0' do\n  impact 1.0\n  title 'google_compute_global_address resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_global_address')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_global_address.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_global_addresses(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_global_address(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/GlobalAddress_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_global_forwarding_rule.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_global_forwarding_rule resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_global_forwarding_rule-1.0' do\n  impact 1.0\n  title 'google_compute_global_forwarding_rule resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_global_forwarding_rule')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_global_forwarding_rule.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_global_forwarding_rules(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_global_forwarding_rule(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/GlobalForwardingRule_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_health_check.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_health_check resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_health_check resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_health_check')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_health_check.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_health_checks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_health_check(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/HealthCheck_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_http_health_check.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_http_health_check resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_http_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_http_health_check resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_http_health_check')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_http_health_check.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_http_health_checks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_http_health_check(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/HttpHealthCheck_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_https_health_check.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_https_health_check resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_https_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_https_health_check resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_https_health_check')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_https_health_check.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_https_health_checks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_https_health_check(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/HttpsHealthCheck_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_instance.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_instance resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_instance-1.0' do\n  impact 1.0\n  title 'google_compute_instance resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_instance')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_instance.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_instances(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_instance(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Instance_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_instance_group_manager.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_instance_group_manager resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_instance_group_manager-1.0' do\n  impact 1.0\n  title 'google_compute_instance_group_manager resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_instance_group_manager')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_instance_group_manager.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_instance_group_managers(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_instance_group_manager(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/InstanceGroupManager_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_instance_template.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_instance_template resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_instance_template-1.0' do\n  impact 1.0\n  title 'google_compute_instance_template resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_instance_template')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_instance_template.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_instance_templates(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_instance_template(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/InstanceTemplate_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_network.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_network resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_network-1.0' do\n  impact 1.0\n  title 'google_compute_network resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_network')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_network.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_networks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_network(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Network_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_network_endpoint_group.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_network_endpoint_group resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_network_endpoint_group-1.0' do\n  impact 1.0\n  title 'google_compute_network_endpoint_group resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_network_endpoint_group')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_network_endpoint_group.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_network_endpoint_groups(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_network_endpoint_group(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/NetworkEndpointGroup_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_node_group.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_node_group resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_node_group-1.0' do\n  impact 1.0\n  title 'google_compute_node_group resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_node_group')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_node_group.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_node_groups(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_node_group(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/NodeGroup_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_node_template.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_node_template resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_node_template-1.0' do\n  impact 1.0\n  title 'google_compute_node_template resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_node_template')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_node_template.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_node_templates(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_node_template(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/NodeTemplate_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_region_backend_service.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_region_backend_service resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_region_backend_service-1.0' do\n  impact 1.0\n  title 'google_compute_region_backend_service resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_region_backend_service')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_region_backend_service.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_region_backend_services(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_region_backend_service(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/RegionBackendService_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_route.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_route resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_route-1.0' do\n  impact 1.0\n  title 'google_compute_route resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_route')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_route.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_routes(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_route(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Route_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_router.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_router resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_router-1.0' do\n  impact 1.0\n  title 'google_compute_router resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_router')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_router.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_routers(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_router(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Router_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_snapshot.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_snapshot resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_snapshot-1.0' do\n  impact 1.0\n  title 'google_compute_snapshot resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_snapshot')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_snapshot.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_snapshots(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_snapshot(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Snapshot_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_ssl_certificate.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_ssl_certificate resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_ssl_certificate-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_certificate resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_ssl_certificate')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_ssl_certificate.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_ssl_certificates(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_ssl_certificate(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/SslCertificate_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_ssl_policy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_ssl_policy resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_ssl_policy-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_policy resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_ssl_policy')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_ssl_policy.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_ssl_policies(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_ssl_policy(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/SslPolicy_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_subnetwork.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_subnetwork resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_subnetwork-1.0' do\n  impact 1.0\n  title 'google_compute_subnetwork resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_subnetwork')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_subnetwork.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_subnetworks(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_subnetwork(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Subnetwork_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_target_http_proxy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_target_http_proxy resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_target_http_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_http_proxy resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_target_http_proxy')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_target_http_proxy.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_target_http_proxies(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_target_http_proxy(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/TargetHttpProxy_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_target_https_proxy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_target_https_proxy resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_target_https_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_https_proxy resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_target_https_proxy')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_target_https_proxy.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_target_https_proxies(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_target_https_proxy(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/TargetHttpsProxy_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_target_pool.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_target_pool resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_target_pool-1.0' do\n  impact 1.0\n  title 'google_compute_target_pool resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_target_pool')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_target_pool.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_target_pools(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_target_pool(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/TargetPool_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_target_tcp_proxy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_target_tcp_proxy resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_target_tcp_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_tcp_proxy resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_target_tcp_proxy')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_target_tcp_proxy.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_target_tcp_proxies(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_target_tcp_proxy(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/TargetTcpProxy_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/compute_url_map.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_compute_url_map resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_compute_url_map-1.0' do\n  impact 1.0\n  title 'google_compute_url_map resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_compute_url_map')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_compute_url_map.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_compute_url_maps(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_compute_url_map(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/UrlMap_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/dataproc_cluster.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_dataproc_cluster resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_dataproc_cluster-1.0' do\n  impact 1.0\n  title 'google_dataproc_cluster resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_dataproc_cluster')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_dataproc_cluster.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_dataproc_clusters(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_dataproc_cluster(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Cluster_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/dns_resource_record_set.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_dns_resource_record_set resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_dns_resource_record_set-1.0' do\n  impact 1.0\n  title 'google_dns_resource_record_set resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_dns_resource_record_set')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_dns_resource_record_set.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  managed_zones = google_dns_managed_zones(project: project_name).zone_names\n  managed_zones.each do |managed_zone|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ managed_zone: managed_zone }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_dns_resource_record_sets(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_dns_resource_record_set(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/ResourceRecordSet_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/filestore_instance.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_filestore_instance resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_filestore_instance-1.0' do\n  impact 1.0\n  title 'google_filestore_instance resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_filestore_instance')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_filestore_instance.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  zone_names = google_compute_zones(project: project_name).zone_names\n  zone_names.each do |zone_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ zone: zone_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_filestore_instances(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_filestore_instance(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Instance_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/mlengine_model.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_ml_engine_model resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_ml_engine_model-1.0' do\n  impact 1.0\n  title 'google_ml_engine_model resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_ml_engine_model')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_ml_engine_model.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_ml_engine_models(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_ml_engine_model(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Model_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/pubsub_subscription.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_pubsub_subscription resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_pubsub_subscription-1.0' do\n  impact 1.0\n  title 'google_pubsub_subscription resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_pubsub_subscription')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_pubsub_subscription.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_pubsub_subscriptions(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_pubsub_subscription(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Subscription_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/pubsub_topic.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_pubsub_topic resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_pubsub_topic-1.0' do\n  impact 1.0\n  title 'google_pubsub_topic resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_pubsub_topic')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_pubsub_topic.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_pubsub_topics(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_pubsub_topic(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Topic_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/gen-controls/redis_instance.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'yaml'\nrequire 'logger'\n\ntitle 'Test GCP google_redis_instance resource.'\n# rubocop:disable Metrics/BlockLength\ncontrol 'google_redis_instance-1.0' do\n  impact 1.0\n  title 'google_redis_instance resource test'\n\n  logger = Logger.new(STDOUT)\n  logger.level = Logger::WARN\n  logger.warn('Generating tests for google_redis_instance')\n  filters = []\n  ignored_fields = []\n  output_folder = ENV['OUTPUT_PATH']\n\n  if output_folder.nil?\n    output_folder = File.join(File.dirname(__FILE__), '../../generated_tests')\n    logger.warn(\"Undefined output folder path at variable OUTPUT_PATH. Defaulting to #{File.expand_path(output_folder)}\")\n  end\n\n  Dir.mkdir(output_folder) unless File.exist?(output_folder)\n  template_path = File.join(File.dirname(__FILE__), '../../generated_test_template.erb')\n  config_folder = ENV['CNF_PATH']\n  logger.warn('Undefined configuration folder path at variable CNF_PATH. Ignoring configuration files')\n  unless config_folder.nil?\n    file_name = File.join(config_folder, 'google_redis_instance.yaml')\n    if File.file?(file_name)\n      config = YAML.load_file(file_name)\n      config_filters = config['filters']\n      config_filters.each do\n        # This is not currently implemented\n        logger.warn('Filters are not currently supported, ignoring')\n      end\n      config_ignored = config['ignore_fields']\n      ignored_fields += config_ignored\n    end\n  end\n  project_name = ENV['GCP_PROJECT_NAME']\n  raise 'Undefined project name, please set the GCP_PROJECT_NAME variable' if project_name.nil?\n  plural_identifiers = [{ project: project_name }]\n\n  next_identifiers = []\n  region_names = google_compute_regions(project: project_name).region_names\n  region_names.each do |region_name|\n    plural_identifiers.each do |plural_identifier|\n      next_identifiers.push(plural_identifier.merge({ region: region_name }))\n    end\n  end\n  plural_identifiers = next_identifiers\n\n  all_identifiers = []\n  i = 0\n  plural_identifiers.each do |plural_identifier|\n    plural = google_redis_instances(plural_identifier)\n    identifiers = plural.identifiers\n\n    identifiers.each do |identifier|\n      all_identifiers.push(identifier)\n      resource = google_redis_instance(identifier)\n\n      unless filters.all? { |filter| filter.call(resource) }\n        next\n      end\n      resource.dump(output_folder, template_path, i, ignored_fields)\n\n      output = \"Writing #{File.expand_path(output_folder)}/Instance_#{i}.rb\"\n      describe output do\n        # Prints pretty message when writing controls to files\n        its('length') { should be >= 0 }\n      end\n      i += 1\n    end\n  end\nend\n# rubocop:enable Metrics/BlockLength\n"
  },
  {
    "path": "generate/generate-profile/README.md",
    "content": "# Example InSpec Profile For GCP\n\nThis example shows the implementation of an InSpec profile for GCP that depends on the [InSpec GCP Resource Pack](https://github.com/inspec/inspec-gcp).  See the [README](https://github.com/inspec/inspec-gcp) for instructions on setting up appropriate GCP credentials.\n\n##  Create a profile \n\n```\n$ inspec init profile --platform gcp my-profile\nCreate new profile at /Users/spaterson/my-profile\n * Create directory libraries\n * Create file README.md\n * Create directory controls\n * Create file controls/example.rb\n * Create file inspec.yml\n * Create file attributes.yml\n * Create file libraries/.gitkeep \n \n```\n\n## Update `attributes.yml` to point to your project\n\n```\ngcp_project_id: 'my-gcp-project'\n```\n\n## Run the tests\n\n```\n$ cd gcp-profile/\n$ inspec exec . -t gcp:// --attrs attributes.yml\n\nProfile: GCP InSpec Profile (my-profile)\nVersion: 0.1.0\nTarget:  gcp://local-service-account@my-gcp-project.iam.gserviceaccount.com\n\n  ✔  gcp-single-region-1.0: Ensure single region has the correct properties.\n     ✔  Region europe-west2 zone_names should include \"europe-west2-a\"\n  ✔  gcp-regions-loop-1.0: Ensure regions have the correct properties in bulk.\n     ✔  Region asia-east1 should be up\n     ✔  Region asia-northeast1 should be up\n     ✔  Region asia-south1 should be up\n     ✔  Region asia-southeast1 should be up\n     ✔  Region australia-southeast1 should be up\n     ✔  Region europe-north1 should be up\n     ✔  Region europe-west1 should be up\n     ✔  Region europe-west2 should be up\n     ✔  Region europe-west3 should be up\n     ✔  Region europe-west4 should be up\n     ✔  Region northamerica-northeast1 should be up\n     ✔  Region southamerica-east1 should be up\n     ✔  Region us-central1 should be up\n     ✔  Region us-east1 should be up\n     ✔  Region us-east4 should be up\n     ✔  Region us-west1 should be up\n     ✔  Region us-west2 should be up\n\n\nProfile: Google Cloud Platform Resource Pack (inspec-gcp)\nVersion: 0.5.0\nTarget:  gcp://local-service-account@my-gcp-project.iam.gserviceaccount.com\n\n     No tests executed.\n\nProfile Summary: 2 successful controls, 0 control failures, 0 controls skipped\nTest Summary: 18 successful, 0 failures, 0 skipped\n```"
  },
  {
    "path": "generate/generate-profile/attributes.yml",
    "content": "# Below is to be uncommented and set with your GCP project ID:\n gcp_project_id: 'your-gcp-project'\n"
  },
  {
    "path": "generate/generate-profile/inspec.yml",
    "content": "name: generate-profile\ntitle: GCP InSpec Profile\nmaintainer: The Authors\ncopyright: The Authors\ncopyright_email: you@example.com\nlicense: Apache-2.0\nsummary: An InSpec Compliance Profile For GCP\nversion: 0.1.0\ninspec_version: '>= 3.0.25'\nattributes:\n- name: gcp_project_id\n  description: 'The GCP project identifier.'\n  type: string\ndepends:\n- name: inspec-gcp\n  path: ../\nsupports:\n- platform: gcp"
  },
  {
    "path": "generate/generate-profile/libraries/.gitkeep",
    "content": ""
  },
  {
    "path": "generate/generated_test_template.erb",
    "content": "title 'Test GCP <%= name %> resource.'\n\ncontrol '<%= name %>_<%= number %>' do\n  impact 1.0\n  title '<%= name %> resource test'\n\n  describe <%= type %>(<%= identifiers %>) do\n    it { should exist }\n<% arr.flatten.each do |a| %>\n    <%= a %><% end %>\n  end\nend"
  },
  {
    "path": "generate/inspec.yml",
    "content": "name: inspec-gcp-generate\ntitle: Google Cloud Platform Resource Generation\nmaintainer: slevenick@google.com\nsummary: For generation (TEST)\ncopyright: TEST\ncopyright_email: TEST\nversion: 0.1.0\nlicense: Apache-2.0\ninspec_version: '>= 3.0.25'\nsupports:\n  - platform: gcp"
  },
  {
    "path": "generate/libraries/gcp_backend.rb",
    "content": "# frozen_string_literal: true\n\n# GCP Inspec Backend Classes\n#\n# Based on the Azure Inspec classes by Russell Seymour\n#\n\nrequire 'json'\nrequire 'net/http'\nrequire 'googleauth'\n\n# Base class for GCP resources - depends on train GCP transport for connection\n#\n# module Inspec::Resources\nclass GcpResourceBase < Inspec.resource(1)\n  attr_reader :opts, :gcp\n\n  def initialize(opts)\n    @opts = opts\n    # ensure we have a GCP connection, resources can choose which of the clients to instantiate\n    @gcp = inspec.backend\n\n    # Magic Modules generated resources use an alternate transport method\n    # In the future this will be moved into the train-gcp plugin itself\n    @connection = GcpApiConnection.new if opts[:use_http_transport]\n  end\n\n  def failed_resource?\n    @failed_resource\n  end\n\n  # Intercept GCP exceptions\n  def catch_gcp_errors\n    yield\n    # create custom messages as needed\n  rescue Google::Apis::ClientError => e\n    error = JSON.parse(e.body)\n    fail_resource error['error']['message']\n    @failed_resource = true\n    nil\n  end\n\n  def create_resource_methods(object)\n    dm = GcpResourceDynamicMethods.new\n    dm.create_methods(self, object)\n  end\n\n  def name_from_self_link(property)\n    property&.split('/')&.last\n  end\nend\n# end\n\n# Class to create methods on the calling object at run time.  Heavily based on the Azure Inspec resources.\n#\nclass GcpResourceDynamicMethods\n  # Given the calling object and its data, create the methods on the object according\n  # to the data that has been retrieved. Various types of data can be returned so the method\n  # checks the type to ensure that the necessary methods are configured correctly\n  #\n  # @param GcpResourceProbe|GcpResource object The object on which the methods should be craeted\n  # @param variant data The data from which the methods should be created\n  def create_methods(object, data)\n    # Check the type of data as this affects the setup of the methods\n    # If it is an Gcp Generic Resource then setup methods for each of\n    # the instance variables\n    case data.class.to_s\n    when /Google::Apis::.*/\n      # iterate around the instance variables\n      data.instance_variables.each do |var|\n        create_method(object, var.to_s.delete('@'), data.instance_variable_get(var))\n      end\n      # When the data is a Hash object iterate around each of the key value pairs and\n      # craete a method for each one.\n    when 'Hash'\n      data.each do |key, value|\n        create_method(object, key, value)\n      end\n    end\n  end\n\n  private\n\n  # Method that is responsible for creating the method on the calling object. This is\n  # because some nesting maybe required. For example of the value is a Hash then it will\n  # need to have an GcpResourceProbe create for each key, whereas if it is a simple\n  # string then the value just needs to be returned\n  #\n  def create_method(object, name, value)\n    # Create the necessary method based on the var that has been passed\n    # Test the value for its type so that the method can be setup correctly\n    case value.class.to_s\n    when 'String', 'Integer', 'TrueClass', 'FalseClass', 'Fixnum'\n      object.define_singleton_method name do\n        value\n      end\n    when 'Hash'\n      value.count.zero? ? return_value = value : return_value = GcpResourceProbe.new(value)\n      object.define_singleton_method name do\n        return_value\n      end\n    # there are nested Google API classes throughout\n    when /Google::Apis::.*/\n      object.define_singleton_method name do\n        if value.respond_to? :to_h\n          value = value.to_h\n        end\n        GcpResourceProbe.new(value)\n      end\n    when 'Array'\n      # Some things are just string or integer arrays\n      # Check this by seeing if the first element is a string / integer / boolean or\n      # a hashtable\n      # This may not be the best method, but short of testing all elements in the array, this is\n      # the quickest test\n      # p value[0].class.to_s\n      case value[0].class.to_s\n      when 'String', 'Integer', 'TrueClass', 'FalseClass', 'Fixnum'\n        probes = value\n      else\n        probes = []\n        value.each do |value_item|\n          # p value_item\n          if value_item.respond_to? :to_h\n            value_item = value_item.to_h\n          end\n          probes << GcpResourceProbe.new(value_item)\n        end\n      end\n      object.define_singleton_method name do\n        probes\n      end\n    end\n  end\nend\n\n# Class object that is created for each element that is returned by GCP.\n# This is what is interogated by Inspec. If they are nested hashes, then this results\n# in nested GcpResourceProbe objects.\n#\n# The methods for each of the classes are dynamically defined at run time and will\n# match the items that are retrieved from GCP. See the 'test/integration/verify/controls' for\n# examples\n#\nclass GcpResourceProbe\n  attr_reader :name, :type, :location, :item, :count\n\n  # Initialize method for the class. Accepts an item, be it a scalar value, hash or GCP object\n  # It will then create the necessary dynamic methods so that they can be called in the tests\n  # This is accomplished by call the GcpResourceDynamicMethods\n  #\n  # @param varaint The item from which the class will be initialized\n  #\n  # @return GcpResourceProbe\n  def initialize(item)\n    dm = GcpResourceDynamicMethods.new\n    dm.create_methods(self, item)\n\n    # Set the item as a property on the class\n    # This is so that it is possible to interrogate what has been added to the class and isolate them from\n    # the standard methods that a Ruby class has.\n    # This used for checking Tags on a resource for example\n    # It also allows direct access if so required\n    @item = item\n\n    # Set how many items have been set\n    @count = item.length if item.respond_to? :length\n  end\n\n  # Allows resources to respond to the include test\n  # This means that things like tags can be checked for and then their value tested\n  #\n  # @param [String] key Name of the item to look for in the @item property\n  def include?(key)\n    @item.key?(key)\n  end\n\n  # Give a sting like `computer_name` return the camelCase version, e.g.\n  # computerName\n  #\n  # @param string data Data that needs to be converted from snake_case to camelCase\n  #\n  # @return string\n  def camel_case(data)\n    camel_case_data = data.split('_').inject([]) { |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join\n\n    # Ensure that gb (as in gigabytes) is uppercased\n    camel_case_data.gsub(/[gb]/, &:upcase)\n  end\nend\n\nclass GcpApiConnection\n  def initialize\n    @google_application_credentials = ENV['GOOGLE_APPLICATION_CREDENTIALS']\n  end\n\n  def fetch_auth\n    unless @service_account_file.nil?\n      return Network::Authorization.new.for!(\n        [\n          'https://www.googleapis.com/auth/cloud-platform',\n        ],\n      ).from_google_credentials_json!(\n        @google_application_credentials,\n      )\n    end\n    Network::Authorization.new.from_application_default!\n  end\n\n  def fetch(base_url, template, var_data, request_type = 'Get')\n    get_request = Network::Base.new(\n      build_uri(base_url, template, var_data),\n      fetch_auth,\n      request_type,\n    )\n    return_if_object get_request.send\n  end\n\n  def fetch_all(base_url, template, var_data, request_type = 'Get')\n    next_page(build_uri(base_url, template, var_data), request_type)\n  end\n\n  def next_page(uri, request_type, token = nil)\n    next_hash = {}\n    next_hash['pageToken'] = token unless token.nil?\n    current_params = Hash[URI.decode_www_form(uri.query || '')].merge(next_hash)\n    uri.query = URI.encode_www_form(current_params)\n    get_request = Network::Base.new(\n      uri,\n      fetch_auth,\n      request_type,\n    )\n    result = JSON.parse(get_request.send.body)\n    next_page_token = result['nextPageToken']\n    return [result] if next_page_token.nil?\n\n    [result] + next_page(uri, request_type, next_page_token)\n  end\n\n  def return_if_object(response)\n    raise \"Bad response: #{response.body}\" \\\n      if response.is_a?(Net::HTTPBadRequest)\n    raise \"Bad response: #{response}\" \\\n      unless response.is_a?(Net::HTTPResponse)\n    return if response.is_a?(Net::HTTPNotFound)\n    return if response.is_a?(Net::HTTPNoContent)\n    result = JSON.parse(response.body)\n    raise_if_errors result, %w{error errors}, 'message'\n    raise \"Bad response: #{response}\" unless response.is_a?(Net::HTTPOK)\n    result\n  end\n\n  def raise_if_errors(response, err_path, msg_field)\n    errors = self.class.navigate(response, err_path)\n    raise_error(errors, msg_field) unless errors.nil?\n  end\n\n  def raise_error(errors, msg_field)\n    raise IOError, ['Operation failed:',\n                    errors.map { |e| e[msg_field] }.join(', ')].join(' ')\n  end\n\n  def build_uri(base_url, template, var_data)\n    URI.join(\n      base_url,\n      expand_variables(template, var_data),\n    )\n  end\n\n  # Allows fetching objects within a tree path.\n  def self.navigate(source, path, default = nil)\n    key = path.take(1)[0]\n    path = path.drop(1)\n    return default unless source.key?(key)\n    result = source.fetch(key)\n    return navigate(result, path, default) unless path.empty?\n    result if path.empty?\n  end\n\n  def extract_variables(template)\n    template.scan(/{{[^}]*}}/).map { |v| v.gsub(/{{([^}]*)}}/, '\\1') }\n            .map(&:to_sym)\n  end\n\n  def expand_variables(template, var_data)\n    extract_variables(template).each do |v|\n      unless var_data.key?(v)\n        raise \"Missing variable :#{v} in #{var_data} on #{caller.join(\"\\n\")}}\"\n      end\n      template.gsub!(/{{#{v}}}/, var_data[v].to_s)\n    end\n    template\n  end\nend\n\n# A handler for authenticated network request\nmodule Network\n  class Base\n    def initialize(link, cred, request_type)\n      @link = link\n      @cred = cred\n      @request_type = request_type\n    end\n\n    def builder\n      Net::HTTP.const_get(@request_type)\n    end\n\n    def send\n      request = @cred.authorize(builder.new(@link))\n      request['User-Agent'] = generate_user_agent\n      response = transport(request).request(request)\n      unless ENV['GOOGLE_HTTP_VERBOSE'].nil?\n        puts [\"network(#{request}: [#{response.code}]\",\n              response.body.split(\"\\n\").map(&:strip).join(' ')].join(' ')\n      end\n      response\n    end\n\n    def transport(request)\n      uri = request.uri\n      puts \"network(#{request}: #{uri})\" \\\n        unless ENV['GOOGLE_HTTP_VERBOSE'].nil?\n      transport = Net::HTTP.new(uri.host, uri.port)\n      transport.use_ssl = uri.is_a?(URI::HTTPS)\n      transport.verify_mode = OpenSSL::SSL::VERIFY_PEER\n      transport.set_debug_output $stderr \\\n        unless ENV['GOOGLE_HTTP_DEBUG'].nil?\n      transport\n    end\n\n    private\n\n    def generate_user_agent\n      'inspec-google/1.0.0'\n    end\n  end\n\n  # A class to aquire credentials and authorize Google API calls.\n  class Authorization\n    def initialize\n      @authorization = nil\n      @scopes = []\n    end\n\n    def authorize(obj)\n      raise ArgumentError, 'A from_* method needs to be called before' \\\n        unless @authorization\n\n      if obj.class <= URI::HTTPS || obj.class <= URI::HTTP\n        authorize_uri obj\n      elsif obj.class < Net::HTTPRequest\n        authorize_http obj\n      else\n        obj.authorization = @authorization\n        obj\n      end\n    end\n\n    def for!(*scopes)\n      @scopes = scopes\n      self\n    end\n\n    def from_google_credentials_json!(credentials_file)\n      raise 'Missing argument for scopes' if @scopes.empty?\n      @authorization = ::Google::Auth::DefaultCredentials.make_creds(\n        json_key_io: File.open(credentials_file),\n        scope: @scopes,\n      )\n      self\n    end\n\n    def from_application_default!\n      @authorization = ::Google::Auth.get_application_default\n      self\n    end\n\n    private\n\n    def authorize_uri(obj)\n      http = Net::HTTP.new(obj.host, obj.port)\n      http.use_ssl = obj.instance_of?(URI::HTTPS)\n      http.verify_mode = OpenSSL::SSL::VERIFY_PEER\n      [http, authorize_http(Net::HTTP::Get.new(obj.request_uri))]\n    end\n\n    def authorize_http(req)\n      req.extend TokenProperty\n      auth = {}\n      @authorization.apply!(auth)\n      req['Authorization'] = auth[:authorization]\n      req.token = auth[:authorization].split(' ')[1]\n      req\n    end\n  end\n\n  # Extension methods to enable retrieving the authentication token.\n  module TokenProperty\n    attr_accessor :token\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/dataset_access.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/dataset_access_view'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetAccess\n        attr_reader :arguments\n\n        attr_reader :domain\n\n        attr_reader :group_by_email\n\n        attr_reader :role\n\n        attr_reader :special_group\n\n        attr_reader :user_by_email\n\n        attr_reader :view\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @domain = arguments['domain']\n          @group_by_email = arguments['groupByEmail']\n          @role = arguments['role']\n          @special_group = arguments['specialGroup']\n          @user_by_email = arguments['userByEmail']\n          @view = GoogleInSpec::BigQuery::Property::DatasetAccessView.new(arguments['view'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetAccess\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'domain' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.domain') { should cmp #{x.inspect} }\"] },\n            'group_by_email' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.group_by_email') { should cmp #{x.inspect} }\"] },\n            'role' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.role') { should cmp #{x.inspect} }\"] },\n            'special_group' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.special_group') { should cmp #{x.inspect} }\"] },\n            'user_by_email' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.user_by_email') { should cmp #{x.inspect} }\"] },\n            'view' => ->(x, path) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::DatasetAccessView.un_parse(x, \"#{path}.view\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class DatasetAccessArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatasetAccess.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatasetAccess.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| DatasetAccess.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/dataset_access_view.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetAccessView\n        attr_reader :arguments\n\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        attr_reader :table_id\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = arguments['datasetId']\n          @project_id = arguments['projectId']\n          @table_id = arguments['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetAccessView\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'dataset_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.dataset_id') { should cmp #{x.inspect} }\"] },\n            'project_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.project_id') { should cmp #{x.inspect} }\"] },\n            'table_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.table_id') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/dataset_dataset_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetDatasetReference\n        attr_reader :arguments\n\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = arguments['datasetId']\n          @project_id = arguments['projectId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetDatasetReference\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'dataset_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.dataset_id') { should cmp #{x.inspect} }\"] },\n            'project_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.project_id') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/dataset_default_encryption_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetDefaultEncryptionConfiguration\n        attr_reader :arguments\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetDefaultEncryptionConfiguration\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_encryption_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableEncryptionConfiguration\n        attr_reader :arguments\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableEncryptionConfiguration\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nrequire 'google/bigquery/property/table_external_data_configuration_csv_options'\nrequire 'google/bigquery/property/table_external_data_configuration_google_sheets_options'\nrequire 'google/bigquery/property/table_external_data_configuration_schema'\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfiguration\n        attr_reader :arguments\n\n        attr_reader :autodetect\n\n        attr_reader :compression\n\n        attr_reader :ignore_unknown_values\n\n        attr_reader :max_bad_records\n\n        attr_reader :source_format\n\n        attr_reader :source_uris\n\n        attr_reader :schema\n\n        attr_reader :google_sheets_options\n\n        attr_reader :csv_options\n\n        attr_reader :bigtable_options\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @autodetect = arguments['autodetect']\n          @compression = arguments['compression']\n          @ignore_unknown_values = arguments['ignoreUnknownValues']\n          @max_bad_records = arguments['maxBadRecords']\n          @source_format = arguments['sourceFormat']\n          @source_uris = arguments['sourceUris']\n          @schema = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationSchema.new(arguments['schema'], to_s)\n          @google_sheets_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationGoogleSheetsOptions.new(arguments['googleSheetsOptions'], to_s)\n          @csv_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationCsvOptions.new(arguments['csvOptions'], to_s)\n          @bigtable_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptions.new(arguments['bigtableOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfiguration\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'autodetect' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.autodetect') { should cmp #{x.inspect} }\"] },\n            'compression' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.compression') { should cmp #{x.inspect} }\"] },\n            'ignore_unknown_values' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ignore_unknown_values') { should cmp #{x.inspect} }\"] },\n            'max_bad_records' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_bad_records') { should cmp #{x.inspect} }\"] },\n            'source_format' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.source_format') { should cmp #{x.inspect} }\"] },\n            'source_uris' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.source_uris') { should include #{single.inspect} }\" } },\n            'schema' => ->(x, path) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationSchema.un_parse(x, \"#{path}.schema\") },\n            'google_sheets_options' => ->(x, path) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationGoogleSheetsOptions.un_parse(x, \"#{path}.google_sheets_options\") },\n            'csv_options' => ->(x, path) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationCsvOptions.un_parse(x, \"#{path}.csv_options\") },\n            'bigtable_options' => ->(x, path) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptions.un_parse(x, \"#{path}.bigtable_options\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_bigtable_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptions\n        attr_reader :arguments\n\n        attr_reader :ignore_unspecified_column_families\n\n        attr_reader :read_rowkey_as_string\n\n        attr_reader :column_families\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ignore_unspecified_column_families = arguments['ignoreUnspecifiedColumnFamilies']\n          @read_rowkey_as_string = arguments['readRowkeyAsString']\n          @column_families = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptionsColumnFamiliesArray.parse(arguments['columnFamilies'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ignore_unspecified_column_families' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ignore_unspecified_column_families') { should cmp #{x.inspect} }\"] },\n            'read_rowkey_as_string' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.read_rowkey_as_string') { should cmp #{x.inspect} }\"] },\n            'column_families' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.column_families') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_bigtable_options_column_families.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families_columns'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptionsColumnFamilies\n        attr_reader :arguments\n\n        attr_reader :columns\n\n        attr_reader :encoding\n\n        attr_reader :family_id\n\n        attr_reader :only_read_latest\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @columns = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumnsArray.parse(arguments['columns'], to_s)\n          @encoding = arguments['encoding']\n          @family_id = arguments['familyId']\n          @only_read_latest = arguments['onlyReadLatest']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptionsColumnFamilies\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'columns' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.columns') { should include '#{single.to_json}' }\" } },\n            'encoding' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.encoding') { should cmp #{x.inspect} }\"] },\n            'family_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.family_id') { should cmp #{x.inspect} }\"] },\n            'only_read_latest' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.only_read_latest') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationBigtableOptionsColumnFamilies.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamilies.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamilies.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_bigtable_options_column_families_columns.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns\n        attr_reader :arguments\n\n        attr_reader :encoding\n\n        attr_reader :field_name\n\n        attr_reader :only_read_latest\n\n        attr_reader :qualifier_string\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @encoding = arguments['encoding']\n          @field_name = arguments['fieldName']\n          @only_read_latest = arguments['onlyReadLatest']\n          @qualifier_string = arguments['qualifierString']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'encoding' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.encoding') { should cmp #{x.inspect} }\"] },\n            'field_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.field_name') { should cmp #{x.inspect} }\"] },\n            'only_read_latest' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.only_read_latest') { should cmp #{x.inspect} }\"] },\n            'qualifier_string' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.qualifier_string') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumnsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_csv_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationCsvOptions\n        attr_reader :arguments\n\n        attr_reader :allow_jagged_rows\n\n        attr_reader :allow_quoted_newlines\n\n        attr_reader :encoding\n\n        attr_reader :field_delimiter\n\n        attr_reader :quote\n\n        attr_reader :skip_leading_rows\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @allow_jagged_rows = arguments['allowJaggedRows']\n          @allow_quoted_newlines = arguments['allowQuotedNewlines']\n          @encoding = arguments['encoding']\n          @field_delimiter = arguments['fieldDelimiter']\n          @quote = arguments['quote']\n          @skip_leading_rows = arguments['skipLeadingRows']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationCsvOptions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'allow_jagged_rows' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.allow_jagged_rows') { should cmp #{x.inspect} }\"] },\n            'allow_quoted_newlines' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.allow_quoted_newlines') { should cmp #{x.inspect} }\"] },\n            'encoding' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.encoding') { should cmp #{x.inspect} }\"] },\n            'field_delimiter' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.field_delimiter') { should cmp #{x.inspect} }\"] },\n            'quote' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.quote') { should cmp #{x.inspect} }\"] },\n            'skip_leading_rows' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.skip_leading_rows') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_google_sheets_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationGoogleSheetsOptions\n        attr_reader :arguments\n\n        attr_reader :skip_leading_rows\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @skip_leading_rows = arguments['skipLeadingRows']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationGoogleSheetsOptions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'skip_leading_rows' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.skip_leading_rows') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_schema.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationSchema\n        attr_reader :arguments\n\n        attr_reader :fields\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @fields = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationSchemaFieldsArray.parse(arguments['fields'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationSchema\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'fields' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.fields') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_external_data_configuration_schema_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationSchemaFields\n        attr_reader :arguments\n\n        attr_reader :description\n\n        attr_reader :fields\n\n        attr_reader :mode\n\n        attr_reader :name\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @description = arguments['description']\n          @fields = arguments['fields']\n          @mode = arguments['mode']\n          @name = arguments['name']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationSchemaFields\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'fields' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.fields') { should include #{single.inspect} }\" } },\n            'mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.mode') { should cmp #{x.inspect} }\"] },\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TableExternalDataConfigurationSchemaFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationSchemaFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationSchemaFields.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TableExternalDataConfigurationSchemaFields.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_schema.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableSchema\n        attr_reader :arguments\n\n        attr_reader :fields\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @fields = GoogleInSpec::BigQuery::Property::TableSchemaFieldsArray.parse(arguments['fields'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableSchema\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'fields' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.fields') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_schema_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableSchemaFields\n        attr_reader :arguments\n\n        attr_reader :description\n\n        attr_reader :fields\n\n        attr_reader :mode\n\n        attr_reader :name\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @description = arguments['description']\n          @fields = arguments['fields']\n          @mode = arguments['mode']\n          @name = arguments['name']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableSchemaFields\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'fields' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.fields') { should include #{single.inspect} }\" } },\n            'mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.mode') { should cmp #{x.inspect} }\"] },\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TableSchemaFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableSchemaFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableSchemaFields.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TableSchemaFields.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_streaming_buffer.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableStreamingBuffer\n        attr_reader :arguments\n\n        attr_reader :estimated_bytes\n\n        attr_reader :estimated_rows\n\n        attr_reader :oldest_entry_time\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @estimated_bytes = arguments['estimatedBytes']\n          @estimated_rows = arguments['estimatedRows']\n          @oldest_entry_time = arguments['oldestEntryTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableStreamingBuffer\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'estimated_bytes' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.estimated_bytes') { should cmp #{x.inspect} }\"] },\n            'estimated_rows' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.estimated_rows') { should cmp #{x.inspect} }\"] },\n            'oldest_entry_time' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.oldest_entry_time') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_table_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableTableReference\n        attr_reader :arguments\n\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        attr_reader :table_id\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = arguments['datasetId']\n          @project_id = arguments['projectId']\n          @table_id = arguments['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableTableReference\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'dataset_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.dataset_id') { should cmp #{x.inspect} }\"] },\n            'project_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.project_id') { should cmp #{x.inspect} }\"] },\n            'table_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.table_id') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_time_partitioning.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableTimePartitioning\n        attr_reader :arguments\n\n        attr_reader :expiration_ms\n\n        attr_reader :field\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @expiration_ms = arguments['expirationMs']\n          @field = arguments['field']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableTimePartitioning\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'expiration_ms' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.expiration_ms') { should cmp #{x.inspect} }\"] },\n            'field' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.field') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_view.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_view_user_defined_function_resources'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableView\n        attr_reader :arguments\n\n        attr_reader :use_legacy_sql\n\n        attr_reader :user_defined_function_resources\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @use_legacy_sql = arguments['useLegacySql']\n          @user_defined_function_resources = GoogleInSpec::BigQuery::Property::TableViewUserDefinedFunctionResourcesArray.parse(arguments['userDefinedFunctionResources'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableView\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'use_legacy_sql' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.use_legacy_sql') { should cmp #{x.inspect} }\"] },\n            'user_defined_function_resources' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.user_defined_function_resources') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/bigquery/property/table_view_user_defined_function_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableViewUserDefinedFunctionResources\n        attr_reader :arguments\n\n        attr_reader :inline_code\n\n        attr_reader :resource_uri\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @inline_code = arguments['inlineCode']\n          @resource_uri = arguments['resourceUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableViewUserDefinedFunctionResources\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'inline_code' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.inline_code') { should cmp #{x.inspect} }\"] },\n            'resource_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.resource_uri') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TableViewUserDefinedFunctionResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableViewUserDefinedFunctionResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableViewUserDefinedFunctionResources.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TableViewUserDefinedFunctionResources.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudbuild/property/trigger_build.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_steps'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuild\n        attr_reader :arguments\n\n        attr_reader :tags\n\n        attr_reader :images\n\n        attr_reader :steps\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @tags = arguments['tags']\n          @images = arguments['images']\n          @steps = GoogleInSpec::CloudBuild::Property::TriggerBuildStepsArray.parse(arguments['steps'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuild\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'tags' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.tags') { should include #{single.inspect} }\" } },\n            'images' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.images') { should include #{single.inspect} }\" } },\n            'steps' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.steps') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudbuild/property/trigger_build_steps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_steps_volumes'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSteps\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :args\n\n        attr_reader :env\n\n        attr_reader :id\n\n        attr_reader :entrypoint\n\n        attr_reader :dir\n\n        attr_reader :secret_env\n\n        attr_reader :timeout\n\n        attr_reader :timing\n\n        attr_reader :volumes\n\n        attr_reader :wait_for\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @args = arguments['args']\n          @env = arguments['env']\n          @id = arguments['id']\n          @entrypoint = arguments['entrypoint']\n          @dir = arguments['dir']\n          @secret_env = arguments['secretEnv']\n          @timeout = arguments['timeout']\n          @timing = arguments['timing']\n          @volumes = GoogleInSpec::CloudBuild::Property::TriggerBuildStepsVolumesArray.parse(arguments['volumes'], to_s)\n          @wait_for = arguments['waitFor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSteps\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'args' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.args') { should include #{single.inspect} }\" } },\n            'env' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.env') { should include #{single.inspect} }\" } },\n            'id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.id') { should cmp #{x.inspect} }\"] },\n            'entrypoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.entrypoint') { should cmp #{x.inspect} }\"] },\n            'dir' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.dir') { should cmp #{x.inspect} }\"] },\n            'secret_env' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.secret_env') { should include #{single.inspect} }\" } },\n            'timeout' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.timeout') { should cmp #{x.inspect} }\"] },\n            'timing' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.timing') { should cmp #{x.inspect} }\"] },\n            'volumes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.volumes') { should include '#{single.to_json}' }\" } },\n            'wait_for' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.wait_for') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TriggerBuildStepsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildSteps.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildSteps.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TriggerBuildSteps.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudbuild/property/trigger_build_steps_volumes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildStepsVolumes\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :path\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @path = arguments['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildStepsVolumes\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'path' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.path') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class TriggerBuildStepsVolumesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildStepsVolumes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildStepsVolumes.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| TriggerBuildStepsVolumes.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudbuild/property/trigger_trigger_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerTriggerTemplate\n        attr_reader :arguments\n\n        attr_reader :project_id\n\n        attr_reader :repo_name\n\n        attr_reader :dir\n\n        attr_reader :branch_name\n\n        attr_reader :tag_name\n\n        attr_reader :commit_sha\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @project_id = arguments['projectId']\n          @repo_name = arguments['repoName']\n          @dir = arguments['dir']\n          @branch_name = arguments['branchName']\n          @tag_name = arguments['tagName']\n          @commit_sha = arguments['commitSha']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerTriggerTemplate\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'project_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.project_id') { should cmp #{x.inspect} }\"] },\n            'repo_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.repo_name') { should cmp #{x.inspect} }\"] },\n            'dir' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.dir') { should cmp #{x.inspect} }\"] },\n            'branch_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.branch_name') { should cmp #{x.inspect} }\"] },\n            'tag_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.tag_name') { should cmp #{x.inspect} }\"] },\n            'commit_sha' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.commit_sha') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudfunctions/property/cloudfunction_event_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionEventTrigger\n        attr_reader :arguments\n\n        attr_reader :event_type\n\n        attr_reader :resource\n\n        attr_reader :service\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @event_type = arguments['eventType']\n          @resource = arguments['resource']\n          @service = arguments['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionEventTrigger\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'event_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.event_type') { should cmp #{x.inspect} }\"] },\n            'resource' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.resource') { should cmp #{x.inspect} }\"] },\n            'service' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.service') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudfunctions/property/cloudfunction_https_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionHttpsTrigger\n        attr_reader :arguments\n\n        attr_reader :url\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @url = arguments['url']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionHttpsTrigger\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'url' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.url') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/cloudfunctions/property/cloudfunction_source_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionSourceRepository\n        attr_reader :arguments\n\n        attr_reader :url\n\n        attr_reader :deployed_url\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @url = arguments['url']\n          @deployed_url = arguments['deployedUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionSourceRepository\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'url' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.url') { should cmp #{x.inspect} }\"] },\n            'deployed_url' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.deployed_url') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/autoscaler_autoscaling_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/autoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicy\n        attr_reader :arguments\n\n        attr_reader :min_num_replicas\n\n        attr_reader :max_num_replicas\n\n        attr_reader :cool_down_period_sec\n\n        attr_reader :cpu_utilization\n\n        attr_reader :custom_metric_utilizations\n\n        attr_reader :load_balancing_utilization\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @min_num_replicas = arguments['minNumReplicas']\n          @max_num_replicas = arguments['maxNumReplicas']\n          @cool_down_period_sec = arguments['coolDownPeriodSec']\n          @cpu_utilization = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyCpuUtilization.new(arguments['cpuUtilization'], to_s)\n          @custom_metric_utilizations = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyCustomMetricUtilizationsArray.parse(arguments['customMetricUtilizations'], to_s)\n          @load_balancing_utilization = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyLoadBalancingUtilization.new(arguments['loadBalancingUtilization'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'min_num_replicas' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.min_num_replicas') { should cmp #{x.inspect} }\"] },\n            'max_num_replicas' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_num_replicas') { should cmp #{x.inspect} }\"] },\n            'cool_down_period_sec' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cool_down_period_sec') { should cmp #{x.inspect} }\"] },\n            'cpu_utilization' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyCpuUtilization.un_parse(x, \"#{path}.cpu_utilization\") },\n            'custom_metric_utilizations' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.custom_metric_utilizations') { should include '#{single.to_json}' }\" } },\n            'load_balancing_utilization' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyLoadBalancingUtilization.un_parse(x, \"#{path}.load_balancing_utilization\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/autoscaler_autoscaling_policy_cpu_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyCpuUtilization\n        attr_reader :arguments\n\n        attr_reader :utilization_target\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = arguments['utilizationTarget']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyCpuUtilization\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'utilization_target' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.utilization_target') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyCustomMetricUtilizations\n        attr_reader :arguments\n\n        attr_reader :metric\n\n        attr_reader :utilization_target\n\n        attr_reader :utilization_target_type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @metric = arguments['metric']\n          @utilization_target = arguments['utilizationTarget']\n          @utilization_target_type = arguments['utilizationTargetType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyCustomMetricUtilizations\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'metric' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.metric') { should cmp #{x.inspect} }\"] },\n            'utilization_target' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.utilization_target') { should cmp #{x.inspect} }\"] },\n            'utilization_target_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.utilization_target_type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class AutoscalerAutoscalingPolicyCustomMetricUtilizationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AutoscalerAutoscalingPolicyCustomMetricUtilizations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AutoscalerAutoscalingPolicyCustomMetricUtilizations.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| AutoscalerAutoscalingPolicyCustomMetricUtilizations.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyLoadBalancingUtilization\n        attr_reader :arguments\n\n        attr_reader :utilization_target\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = arguments['utilizationTarget']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyLoadBalancingUtilization\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'utilization_target' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.utilization_target') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendbucket_cdn_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendBucketCdnPolicy\n        attr_reader :arguments\n\n        attr_reader :signed_url_cache_max_age_sec\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @signed_url_cache_max_age_sec = arguments['signedUrlCacheMaxAgeSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendBucketCdnPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'signed_url_cache_max_age_sec' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.signed_url_cache_max_age_sec') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendservice_backends.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceBackends\n        attr_reader :arguments\n\n        attr_reader :balancing_mode\n\n        attr_reader :capacity_scaler\n\n        attr_reader :description\n\n        attr_reader :group\n\n        attr_reader :max_connections\n\n        attr_reader :max_connections_per_instance\n\n        attr_reader :max_connections_per_endpoint\n\n        attr_reader :max_rate\n\n        attr_reader :max_rate_per_instance\n\n        attr_reader :max_rate_per_endpoint\n\n        attr_reader :max_utilization\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @balancing_mode = arguments['balancingMode']\n          @capacity_scaler = arguments['capacityScaler']\n          @description = arguments['description']\n          @group = arguments['group']\n          @max_connections = arguments['maxConnections']\n          @max_connections_per_instance = arguments['maxConnectionsPerInstance']\n          @max_connections_per_endpoint = arguments['maxConnectionsPerEndpoint']\n          @max_rate = arguments['maxRate']\n          @max_rate_per_instance = arguments['maxRatePerInstance']\n          @max_rate_per_endpoint = arguments['maxRatePerEndpoint']\n          @max_utilization = arguments['maxUtilization']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceBackends\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'balancing_mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.balancing_mode') { should cmp #{x.inspect} }\"] },\n            'capacity_scaler' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.capacity_scaler') { should cmp #{x.inspect} }\"] },\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'group' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.group') { should cmp #{x.inspect} }\"] },\n            'max_connections' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_connections') { should cmp #{x.inspect} }\"] },\n            'max_connections_per_instance' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_connections_per_instance') { should cmp #{x.inspect} }\"] },\n            'max_connections_per_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_connections_per_endpoint') { should cmp #{x.inspect} }\"] },\n            'max_rate' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_rate') { should cmp #{x.inspect} }\"] },\n            'max_rate_per_instance' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_rate_per_instance') { should cmp #{x.inspect} }\"] },\n            'max_rate_per_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_rate_per_endpoint') { should cmp #{x.inspect} }\"] },\n            'max_utilization' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_utilization') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class BackendServiceBackendsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BackendServiceBackends.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BackendServiceBackends.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| BackendServiceBackends.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendservice_cdn_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_cdn_policy_cache_key_policy'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCdnPolicy\n        attr_reader :arguments\n\n        attr_reader :cache_key_policy\n\n        attr_reader :signed_url_cache_max_age_sec\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @cache_key_policy = GoogleInSpec::Compute::Property::BackendServiceCdnPolicyCacheKeyPolicy.new(arguments['cacheKeyPolicy'], to_s)\n          @signed_url_cache_max_age_sec = arguments['signedUrlCacheMaxAgeSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCdnPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'cache_key_policy' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::BackendServiceCdnPolicyCacheKeyPolicy.un_parse(x, \"#{path}.cache_key_policy\") },\n            'signed_url_cache_max_age_sec' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.signed_url_cache_max_age_sec') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendservice_cdn_policy_cache_key_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCdnPolicyCacheKeyPolicy\n        attr_reader :arguments\n\n        attr_reader :include_host\n\n        attr_reader :include_protocol\n\n        attr_reader :include_query_string\n\n        attr_reader :query_string_blacklist\n\n        attr_reader :query_string_whitelist\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @include_host = arguments['includeHost']\n          @include_protocol = arguments['includeProtocol']\n          @include_query_string = arguments['includeQueryString']\n          @query_string_blacklist = arguments['queryStringBlacklist']\n          @query_string_whitelist = arguments['queryStringWhitelist']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCdnPolicyCacheKeyPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'include_host' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.include_host') { should cmp #{x.inspect} }\"] },\n            'include_protocol' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.include_protocol') { should cmp #{x.inspect} }\"] },\n            'include_query_string' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.include_query_string') { should cmp #{x.inspect} }\"] },\n            'query_string_blacklist' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.query_string_blacklist') { should include #{single.inspect} }\" } },\n            'query_string_whitelist' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.query_string_whitelist') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendservice_connection_draining.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceConnectionDraining\n        attr_reader :arguments\n\n        attr_reader :draining_timeout_sec\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @draining_timeout_sec = arguments['drainingTimeoutSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceConnectionDraining\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'draining_timeout_sec' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.draining_timeout_sec') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/backendservice_iap.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceIap\n        attr_reader :arguments\n\n        attr_reader :enabled\n\n        attr_reader :oauth2_client_id\n\n        attr_reader :oauth2_client_secret\n\n        attr_reader :oauth2_client_secret_sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enabled = arguments['enabled']\n          @oauth2_client_id = arguments['oauth2ClientId']\n          @oauth2_client_secret = arguments['oauth2ClientSecret']\n          @oauth2_client_secret_sha256 = arguments['oauth2ClientSecretSha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceIap\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enabled') { should cmp #{x.inspect} }\"] },\n            'oauth2_client_id' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.oauth2_client_id') { should cmp #{x.inspect} }\"] },\n            'oauth2_client_secret' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.oauth2_client_secret') { should cmp #{x.inspect} }\"] },\n            'oauth2_client_secret_sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.oauth2_client_secret_sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/disk_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskDiskEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @sha256 = arguments['sha256']\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskDiskEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/disk_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskSourceImageEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @sha256 = arguments['sha256']\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskSourceImageEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/disk_source_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskSourceSnapshotEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @kms_key_name = arguments['kmsKeyName']\n          @sha256 = arguments['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskSourceSnapshotEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/firewall_allowed.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class FirewallAllowed\n        attr_reader :arguments\n\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = arguments['IPProtocol']\n          @ports = arguments['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FirewallAllowed\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ip_protocol' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ip_protocol') { should cmp #{x.inspect} }\"] },\n            'ports' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.ports') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class FirewallAllowedArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return FirewallAllowed.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| FirewallAllowed.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| FirewallAllowed.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/firewall_denied.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class FirewallDenied\n        attr_reader :arguments\n\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = arguments['IPProtocol']\n          @ports = arguments['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FirewallDenied\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ip_protocol' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ip_protocol') { should cmp #{x.inspect} }\"] },\n            'ports' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.ports') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class FirewallDeniedArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return FirewallDenied.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| FirewallDenied.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| FirewallDenied.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/globalforwardingrule_metadata_filters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/globalforwardingrule_metadata_filters_filter_labels'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalForwardingRuleMetadataFilters\n        attr_reader :arguments\n\n        attr_reader :filter_match_criteria\n\n        attr_reader :filter_labels\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @filter_match_criteria = arguments['filterMatchCriteria']\n          @filter_labels = GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersFilterLabelsArray.parse(arguments['filterLabels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalForwardingRuleMetadataFilters\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'filter_match_criteria' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.filter_match_criteria') { should cmp #{x.inspect} }\"] },\n            'filter_labels' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.filter_labels') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class GlobalForwardingRuleMetadataFiltersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return GlobalForwardingRuleMetadataFilters.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| GlobalForwardingRuleMetadataFilters.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| GlobalForwardingRuleMetadataFilters.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/globalforwardingrule_metadata_filters_filter_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalForwardingRuleMetadataFiltersFilterLabels\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @value = arguments['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalForwardingRuleMetadataFiltersFilterLabels\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'value' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.value') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class GlobalForwardingRuleMetadataFiltersFilterLabelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return GlobalForwardingRuleMetadataFiltersFilterLabels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| GlobalForwardingRuleMetadataFiltersFilterLabels.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| GlobalForwardingRuleMetadataFiltersFilterLabels.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/healthcheck_http2_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttp2HealthCheck\n        attr_reader :arguments\n\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @host = arguments['host']\n          @request_path = arguments['requestPath']\n          @response = arguments['response']\n          @port = arguments['port']\n          @port_name = arguments['portName']\n          @proxy_header = arguments['proxyHeader']\n          @port_specification = arguments['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttp2HealthCheck\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'host' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.host') { should cmp #{x.inspect} }\"] },\n            'request_path' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.request_path') { should cmp #{x.inspect} }\"] },\n            'response' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.response') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n            'port_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_name') { should cmp #{x.inspect} }\"] },\n            'proxy_header' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.proxy_header') { should cmp #{x.inspect} }\"] },\n            'port_specification' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_specification') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/healthcheck_http_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttpHealthCheck\n        attr_reader :arguments\n\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @host = arguments['host']\n          @request_path = arguments['requestPath']\n          @response = arguments['response']\n          @port = arguments['port']\n          @port_name = arguments['portName']\n          @proxy_header = arguments['proxyHeader']\n          @port_specification = arguments['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttpHealthCheck\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'host' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.host') { should cmp #{x.inspect} }\"] },\n            'request_path' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.request_path') { should cmp #{x.inspect} }\"] },\n            'response' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.response') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n            'port_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_name') { should cmp #{x.inspect} }\"] },\n            'proxy_header' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.proxy_header') { should cmp #{x.inspect} }\"] },\n            'port_specification' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_specification') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/healthcheck_https_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttpsHealthCheck\n        attr_reader :arguments\n\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @host = arguments['host']\n          @request_path = arguments['requestPath']\n          @response = arguments['response']\n          @port = arguments['port']\n          @port_name = arguments['portName']\n          @proxy_header = arguments['proxyHeader']\n          @port_specification = arguments['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttpsHealthCheck\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'host' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.host') { should cmp #{x.inspect} }\"] },\n            'request_path' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.request_path') { should cmp #{x.inspect} }\"] },\n            'response' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.response') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n            'port_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_name') { should cmp #{x.inspect} }\"] },\n            'proxy_header' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.proxy_header') { should cmp #{x.inspect} }\"] },\n            'port_specification' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_specification') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/healthcheck_ssl_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckSslHealthCheck\n        attr_reader :arguments\n\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @request = arguments['request']\n          @response = arguments['response']\n          @port = arguments['port']\n          @port_name = arguments['portName']\n          @proxy_header = arguments['proxyHeader']\n          @port_specification = arguments['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckSslHealthCheck\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'request' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.request') { should cmp #{x.inspect} }\"] },\n            'response' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.response') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n            'port_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_name') { should cmp #{x.inspect} }\"] },\n            'proxy_header' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.proxy_header') { should cmp #{x.inspect} }\"] },\n            'port_specification' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_specification') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/healthcheck_tcp_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckTcpHealthCheck\n        attr_reader :arguments\n\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @request = arguments['request']\n          @response = arguments['response']\n          @port = arguments['port']\n          @port_name = arguments['portName']\n          @proxy_header = arguments['proxyHeader']\n          @port_specification = arguments['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckTcpHealthCheck\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'request' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.request') { should cmp #{x.inspect} }\"] },\n            'response' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.response') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n            'port_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_name') { should cmp #{x.inspect} }\"] },\n            'proxy_header' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.proxy_header') { should cmp #{x.inspect} }\"] },\n            'port_specification' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port_specification') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_disks_disk_encryption_key'\nrequire 'google/compute/property/instance_disks_initialize_params'\nrequire 'google/compute/property/instance_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisks\n        attr_reader :arguments\n\n        attr_reader :auto_delete\n\n        attr_reader :boot\n\n        attr_reader :device_name\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :index\n\n        attr_reader :initialize_params\n\n        attr_reader :interface\n\n        attr_reader :mode\n\n        attr_reader :source\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @auto_delete = arguments['autoDelete']\n          @boot = arguments['boot']\n          @device_name = arguments['deviceName']\n          @disk_encryption_key = GoogleInSpec::Compute::Property::InstanceDisksDiskEncryptionKey.new(arguments['diskEncryptionKey'], to_s)\n          @index = arguments['index']\n          @initialize_params = GoogleInSpec::Compute::Property::InstanceDisksInitializeParams.new(arguments['initializeParams'], to_s)\n          @interface = arguments['interface']\n          @mode = arguments['mode']\n          @source = arguments['source']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisks\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'auto_delete' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.auto_delete') { should cmp #{x.inspect} }\"] },\n            'boot' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot') { should cmp #{x.inspect} }\"] },\n            'device_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.device_name') { should cmp #{x.inspect} }\"] },\n            'disk_encryption_key' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceDisksDiskEncryptionKey.un_parse(x, \"#{path}.disk_encryption_key\") },\n            'index' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.index') { should cmp #{x.inspect} }\"] },\n            'initialize_params' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceDisksInitializeParams.un_parse(x, \"#{path}.initialize_params\") },\n            'interface' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.interface') { should cmp #{x.inspect} }\"] },\n            'mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.mode') { should cmp #{x.inspect} }\"] },\n            'source' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.source') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceDisks.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceDisks.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksDiskEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @rsa_encrypted_key = arguments['rsaEncryptedKey']\n          @sha256 = arguments['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksDiskEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'rsa_encrypted_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.rsa_encrypted_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_disks_initialize_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksInitializeParams\n        attr_reader :arguments\n\n        attr_reader :disk_name\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :source_image\n\n        attr_reader :source_image_encryption_key\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disk_name = arguments['diskName']\n          @disk_size_gb = arguments['diskSizeGb']\n          @disk_type = arguments['diskType']\n          @source_image = arguments['sourceImage']\n          @source_image_encryption_key = GoogleInSpec::Compute::Property::InstanceDisksInitializeParamsSourceImageEncryptionKey.new(arguments['sourceImageEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksInitializeParams\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disk_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_name') { should cmp #{x.inspect} }\"] },\n            'disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_type') { should cmp #{x.inspect} }\"] },\n            'source_image' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.source_image') { should cmp #{x.inspect} }\"] },\n            'source_image_encryption_key' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceDisksInitializeParamsSourceImageEncryptionKey.un_parse(x, \"#{path}.source_image_encryption_key\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_disks_initialize_params_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksInitializeParamsSourceImageEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @sha256 = arguments['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksInitializeParamsSourceImageEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGuestAccelerators\n        attr_reader :arguments\n\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = arguments['acceleratorCount']\n          @accelerator_type = arguments['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGuestAccelerators\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'accelerator_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_count') { should cmp #{x.inspect} }\"] },\n            'accelerator_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceGuestAccelerators.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceGuestAccelerators.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_network_interfaces_access_configs'\nrequire 'google/compute/property/instance_network_interfaces_alias_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfaces\n        attr_reader :arguments\n\n        attr_reader :access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :name\n\n        attr_reader :network\n\n        attr_reader :network_ip\n\n        attr_reader :subnetwork\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @access_configs = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesAccessConfigsArray.parse(arguments['accessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesAliasIpRangesArray.parse(arguments['aliasIpRanges'], to_s)\n          @name = arguments['name']\n          @network = arguments['network']\n          @network_ip = arguments['networkIP']\n          @subnetwork = arguments['subnetwork']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfaces\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'access_configs' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.access_configs') { should include '#{single.to_json}' }\" } },\n            'alias_ip_ranges' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.alias_ip_ranges') { should include '#{single.to_json}' }\" } },\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'network' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network') { should cmp #{x.inspect} }\"] },\n            'network_ip' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network_ip') { should cmp #{x.inspect} }\"] },\n            'subnetwork' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfaces.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceNetworkInterfaces.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfacesAccessConfigs\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @nat_ip = arguments['natIP']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfacesAccessConfigs\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'nat_ip' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.nat_ip') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceNetworkInterfacesAccessConfigs.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfacesAliasIpRanges\n        attr_reader :arguments\n\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = arguments['ipCidrRange']\n          @subnetwork_range_name = arguments['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfacesAliasIpRanges\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ip_cidr_range' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ip_cidr_range') { should cmp #{x.inspect} }\"] },\n            'subnetwork_range_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork_range_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceNetworkInterfacesAliasIpRanges.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceScheduling\n        attr_reader :arguments\n\n        attr_reader :automatic_restart\n\n        attr_reader :on_host_maintenance\n\n        attr_reader :preemptible\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @automatic_restart = arguments['automaticRestart']\n          @on_host_maintenance = arguments['onHostMaintenance']\n          @preemptible = arguments['preemptible']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceScheduling\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'automatic_restart' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.automatic_restart') { should cmp #{x.inspect} }\"] },\n            'on_host_maintenance' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.on_host_maintenance') { should cmp #{x.inspect} }\"] },\n            'preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.preemptible') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceServiceAccounts\n        attr_reader :arguments\n\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @email = arguments['email']\n          @scopes = arguments['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceServiceAccounts\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'email' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.email') { should cmp #{x.inspect} }\"] },\n            'scopes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.scopes') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceServiceAccounts.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceServiceAccounts.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceShieldedInstanceConfig\n        attr_reader :arguments\n\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_vtpm\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = arguments['enableSecureBoot']\n          @enable_vtpm = arguments['enableVtpm']\n          @enable_integrity_monitoring = arguments['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceShieldedInstanceConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enable_secure_boot' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_secure_boot') { should cmp #{x.inspect} }\"] },\n            'enable_vtpm' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_vtpm') { should cmp #{x.inspect} }\"] },\n            'enable_integrity_monitoring' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_integrity_monitoring') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instance_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTags\n        attr_reader :arguments\n\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @fingerprint = arguments['fingerprint']\n          @items = arguments['items']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTags\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'fingerprint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.fingerprint') { should cmp #{x.inspect} }\"] },\n            'items' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.items') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancegroupmanager_current_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGroupManagerCurrentActions\n        attr_reader :arguments\n\n        attr_reader :abandoning\n\n        attr_reader :creating\n\n        attr_reader :creating_without_retries\n\n        attr_reader :deleting\n\n        attr_reader :none\n\n        attr_reader :recreating\n\n        attr_reader :refreshing\n\n        attr_reader :restarting\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @abandoning = arguments['abandoning']\n          @creating = arguments['creating']\n          @creating_without_retries = arguments['creatingWithoutRetries']\n          @deleting = arguments['deleting']\n          @none = arguments['none']\n          @recreating = arguments['recreating']\n          @refreshing = arguments['refreshing']\n          @restarting = arguments['restarting']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGroupManagerCurrentActions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'abandoning' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.abandoning') { should cmp #{x.inspect} }\"] },\n            'creating' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.creating') { should cmp #{x.inspect} }\"] },\n            'creating_without_retries' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.creating_without_retries') { should cmp #{x.inspect} }\"] },\n            'deleting' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.deleting') { should cmp #{x.inspect} }\"] },\n            'none' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.none') { should cmp #{x.inspect} }\"] },\n            'recreating' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.recreating') { should cmp #{x.inspect} }\"] },\n            'refreshing' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.refreshing') { should cmp #{x.inspect} }\"] },\n            'restarting' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.restarting') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancegroupmanager_named_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGroupManagerNamedPorts\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :port\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @port = arguments['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGroupManagerNamedPorts\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'port' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.port') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceGroupManagerNamedPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceGroupManagerNamedPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceGroupManagerNamedPorts.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceGroupManagerNamedPorts.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks'\nrequire 'google/compute/property/instancetemplate_properties_guest_accelerators'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces'\nrequire 'google/compute/property/instancetemplate_properties_scheduling'\nrequire 'google/compute/property/instancetemplate_properties_service_accounts'\nrequire 'google/compute/property/instancetemplate_properties_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplateProperties\n        attr_reader :arguments\n\n        attr_reader :can_ip_forward\n\n        attr_reader :description\n\n        attr_reader :disks\n\n        attr_reader :labels\n\n        attr_reader :machine_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :metadata\n\n        attr_reader :guest_accelerators\n\n        attr_reader :network_interfaces\n\n        attr_reader :scheduling\n\n        attr_reader :service_accounts\n\n        attr_reader :tags\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @can_ip_forward = arguments['canIpForward']\n          @description = arguments['description']\n          @disks = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksArray.parse(arguments['disks'], to_s)\n          @labels = arguments['labels']\n          @machine_type = arguments['machineType']\n          @min_cpu_platform = arguments['minCpuPlatform']\n          @metadata = arguments['metadata']\n          @guest_accelerators = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesGuestAcceleratorsArray.parse(arguments['guestAccelerators'], to_s)\n          @network_interfaces = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesArray.parse(arguments['networkInterfaces'], to_s)\n          @scheduling = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesScheduling.new(arguments['scheduling'], to_s)\n          @service_accounts = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesServiceAccountsArray.parse(arguments['serviceAccounts'], to_s)\n          @tags = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesTags.new(arguments['tags'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplateProperties\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'can_ip_forward' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.can_ip_forward') { should cmp #{x.inspect} }\"] },\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'disks' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.disks') { should include '#{single.to_json}' }\" } },\n            'labels' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'machine_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type') { should cmp #{x.inspect} }\"] },\n            'min_cpu_platform' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.min_cpu_platform') { should cmp #{x.inspect} }\"] },\n            'metadata' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.metadata') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'guest_accelerators' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.guest_accelerators') { should include '#{single.to_json}' }\" } },\n            'network_interfaces' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.network_interfaces') { should include '#{single.to_json}' }\" } },\n            'scheduling' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplatePropertiesScheduling.un_parse(x, \"#{path}.scheduling\") },\n            'service_accounts' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.service_accounts') { should include '#{single.to_json}' }\" } },\n            'tags' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplatePropertiesTags.un_parse(x, \"#{path}.tags\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks_disk_encryption_key'\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params'\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisks\n        attr_reader :arguments\n\n        attr_reader :auto_delete\n\n        attr_reader :boot\n\n        attr_reader :device_name\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :index\n\n        attr_reader :initialize_params\n\n        attr_reader :interface\n\n        attr_reader :mode\n\n        attr_reader :source\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @auto_delete = arguments['autoDelete']\n          @boot = arguments['boot']\n          @device_name = arguments['deviceName']\n          @disk_encryption_key = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksDiskEncryptionKey.new(arguments['diskEncryptionKey'], to_s)\n          @index = arguments['index']\n          @initialize_params = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParams.new(arguments['initializeParams'], to_s)\n          @interface = arguments['interface']\n          @mode = arguments['mode']\n          @source = arguments['source']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisks\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'auto_delete' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.auto_delete') { should cmp #{x.inspect} }\"] },\n            'boot' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot') { should cmp #{x.inspect} }\"] },\n            'device_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.device_name') { should cmp #{x.inspect} }\"] },\n            'disk_encryption_key' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksDiskEncryptionKey.un_parse(x, \"#{path}.disk_encryption_key\") },\n            'index' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.index') { should cmp #{x.inspect} }\"] },\n            'initialize_params' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParams.un_parse(x, \"#{path}.initialize_params\") },\n            'interface' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.interface') { should cmp #{x.inspect} }\"] },\n            'mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.mode') { should cmp #{x.inspect} }\"] },\n            'source' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.source') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesDisks.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesDisks.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksDiskEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @rsa_encrypted_key = arguments['rsaEncryptedKey']\n          @sha256 = arguments['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksDiskEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'rsa_encrypted_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.rsa_encrypted_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_disks_initialize_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksInitializeParams\n        attr_reader :arguments\n\n        attr_reader :disk_name\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :source_image\n\n        attr_reader :source_image_encryption_key\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disk_name = arguments['diskName']\n          @disk_size_gb = arguments['diskSizeGb']\n          @disk_type = arguments['diskType']\n          @source_image = arguments['sourceImage']\n          @source_image_encryption_key = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey.new(arguments['sourceImageEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksInitializeParams\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disk_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_name') { should cmp #{x.inspect} }\"] },\n            'disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_type') { should cmp #{x.inspect} }\"] },\n            'source_image' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.source_image') { should cmp #{x.inspect} }\"] },\n            'source_image_encryption_key' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey.un_parse(x, \"#{path}.source_image_encryption_key\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @sha256 = arguments['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesGuestAccelerators\n        attr_reader :arguments\n\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = arguments['acceleratorCount']\n          @accelerator_type = arguments['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesGuestAccelerators\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'accelerator_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_count') { should cmp #{x.inspect} }\"] },\n            'accelerator_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesGuestAccelerators.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces_access_configs'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces_alias_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfaces\n        attr_reader :arguments\n\n        attr_reader :access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :name\n\n        attr_reader :network\n\n        attr_reader :network_ip\n\n        attr_reader :subnetwork\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @access_configs = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesAccessConfigsArray.parse(arguments['accessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesAliasIpRangesArray.parse(arguments['aliasIpRanges'], to_s)\n          @name = arguments['name']\n          @network = arguments['network']\n          @network_ip = arguments['networkIP']\n          @subnetwork = arguments['subnetwork']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfaces\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'access_configs' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.access_configs') { should include '#{single.to_json}' }\" } },\n            'alias_ip_ranges' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.alias_ip_ranges') { should include '#{single.to_json}' }\" } },\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'network' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network') { should cmp #{x.inspect} }\"] },\n            'network_ip' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network_ip') { should cmp #{x.inspect} }\"] },\n            'subnetwork' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfaces.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfaces.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfacesAccessConfigs\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @nat_ip = arguments['natIP']\n          @type = arguments['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfacesAccessConfigs\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'nat_ip' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.nat_ip') { should cmp #{x.inspect} }\"] },\n            'type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAccessConfigs.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges\n        attr_reader :arguments\n\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = arguments['ipCidrRange']\n          @subnetwork_range_name = arguments['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ip_cidr_range' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ip_cidr_range') { should cmp #{x.inspect} }\"] },\n            'subnetwork_range_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork_range_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesScheduling\n        attr_reader :arguments\n\n        attr_reader :automatic_restart\n\n        attr_reader :on_host_maintenance\n\n        attr_reader :preemptible\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @automatic_restart = arguments['automaticRestart']\n          @on_host_maintenance = arguments['onHostMaintenance']\n          @preemptible = arguments['preemptible']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesScheduling\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'automatic_restart' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.automatic_restart') { should cmp #{x.inspect} }\"] },\n            'on_host_maintenance' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.on_host_maintenance') { should cmp #{x.inspect} }\"] },\n            'preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.preemptible') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesServiceAccounts\n        attr_reader :arguments\n\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @email = arguments['email']\n          @scopes = arguments['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesServiceAccounts\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'email' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.email') { should cmp #{x.inspect} }\"] },\n            'scopes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.scopes') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceTemplatePropertiesServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesServiceAccounts.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceTemplatePropertiesServiceAccounts.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/instancetemplate_properties_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesTags\n        attr_reader :arguments\n\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @fingerprint = arguments['fingerprint']\n          @items = arguments['items']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesTags\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'fingerprint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.fingerprint') { should cmp #{x.inspect} }\"] },\n            'items' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.items') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/nodetemplate_node_type_flexibility.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NodeTemplateNodeTypeFlexibility\n        attr_reader :arguments\n\n        attr_reader :cpus\n\n        attr_reader :memory\n\n        attr_reader :local_ssd\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @cpus = arguments['cpus']\n          @memory = arguments['memory']\n          @local_ssd = arguments['localSsd']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodeTemplateNodeTypeFlexibility\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'cpus' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cpus') { should cmp #{x.inspect} }\"] },\n            'memory' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.memory') { should cmp #{x.inspect} }\"] },\n            'local_ssd' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.local_ssd') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/region_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionDeprecated\n        attr_reader :arguments\n\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(arguments['deleted'])\n          @deprecated = parse_time_string(arguments['deprecated'])\n          @obsolete = parse_time_string(arguments['obsolete'])\n          @replacement = arguments['replacement']\n          @state = arguments['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionDeprecated\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'deleted' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.deleted.to_s') { should cmp '#{x.inspect}' }\"] },\n            'deprecated' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.deprecated.to_s') { should cmp '#{x.inspect}' }\"] },\n            'obsolete' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.obsolete.to_s') { should cmp '#{x.inspect}' }\"] },\n            'replacement' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.replacement') { should cmp #{x.inspect} }\"] },\n            'state' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.state') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/region_quotas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionQuotas\n        attr_reader :arguments\n\n        attr_reader :metric\n\n        attr_reader :limit\n\n        attr_reader :usage\n\n        attr_reader :owner\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @metric = arguments['metric']\n          @limit = arguments['limit']\n          @usage = arguments['usage']\n          @owner = arguments['owner']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionQuotas\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'metric' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.metric') { should cmp #{x.inspect} }\"] },\n            'limit' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.limit') { should cmp #{x.inspect} }\"] },\n            'usage' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.usage') { should cmp #{x.inspect} }\"] },\n            'owner' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.owner') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionQuotasArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionQuotas.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionQuotas.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionQuotas.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/regionbackendservice_backends.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceBackends\n        attr_reader :arguments\n\n        attr_reader :description\n\n        attr_reader :group\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @description = arguments['description']\n          @group = arguments['group']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceBackends\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'group' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.group') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionBackendServiceBackendsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionBackendServiceBackends.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionBackendServiceBackends.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionBackendServiceBackends.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/regionbackendservice_connection_draining.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceConnectionDraining\n        attr_reader :arguments\n\n        attr_reader :draining_timeout_sec\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @draining_timeout_sec = arguments['drainingTimeoutSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceConnectionDraining\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'draining_timeout_sec' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.draining_timeout_sec') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/router_bgp.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/router_bgp_advertised_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterBgp\n        attr_reader :arguments\n\n        attr_reader :asn\n\n        attr_reader :advertise_mode\n\n        attr_reader :advertised_groups\n\n        attr_reader :advertised_ip_ranges\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @asn = arguments['asn']\n          @advertise_mode = arguments['advertiseMode']\n          @advertised_groups = arguments['advertisedGroups']\n          @advertised_ip_ranges = GoogleInSpec::Compute::Property::RouterBgpAdvertisedIpRangesArray.parse(arguments['advertisedIpRanges'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterBgp\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'asn' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.asn') { should cmp #{x.inspect} }\"] },\n            'advertise_mode' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.advertise_mode') { should cmp #{x.inspect} }\"] },\n            'advertised_groups' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.advertised_groups') { should include #{single.inspect} }\" } },\n            'advertised_ip_ranges' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.advertised_ip_ranges') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/router_bgp_advertised_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterBgpAdvertisedIpRanges\n        attr_reader :arguments\n\n        attr_reader :range\n\n        attr_reader :description\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @range = arguments['range']\n          @description = arguments['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterBgpAdvertisedIpRanges\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'range' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.range') { should cmp #{x.inspect} }\"] },\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RouterBgpAdvertisedIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RouterBgpAdvertisedIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RouterBgpAdvertisedIpRanges.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RouterBgpAdvertisedIpRanges.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/snapshot_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SnapshotSnapshotEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @sha256 = arguments['sha256']\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SnapshotSnapshotEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'sha256' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.sha256') { should cmp #{x.inspect} }\"] },\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/snapshot_source_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SnapshotSourceDiskEncryptionKey\n        attr_reader :arguments\n\n        attr_reader :raw_key\n\n        attr_reader :kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = arguments['rawKey']\n          @kms_key_name = arguments['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SnapshotSourceDiskEncryptionKey\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'raw_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.raw_key') { should cmp #{x.inspect} }\"] },\n            'kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/sslpolicy_warnings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SslPolicyWarnings\n        attr_reader :arguments\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @code = arguments['code']\n          @message = arguments['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SslPolicyWarnings\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'code' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.code') { should cmp #{x.inspect} }\"] },\n            'message' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.message') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class SslPolicyWarningsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SslPolicyWarnings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SslPolicyWarnings.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| SslPolicyWarnings.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/urlmap_host_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapHostRules\n        attr_reader :arguments\n\n        attr_reader :description\n\n        attr_reader :hosts\n\n        attr_reader :path_matcher\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @description = arguments['description']\n          @hosts = arguments['hosts']\n          @path_matcher = arguments['pathMatcher']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapHostRules\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'hosts' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.hosts') { should include #{single.inspect} }\" } },\n            'path_matcher' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.path_matcher') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class UrlMapHostRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapHostRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapHostRules.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| UrlMapHostRules.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/urlmap_path_matchers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_path_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchers\n        attr_reader :arguments\n\n        attr_reader :default_service\n\n        attr_reader :description\n\n        attr_reader :name\n\n        attr_reader :path_rules\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @default_service = arguments['defaultService']\n          @description = arguments['description']\n          @name = arguments['name']\n          @path_rules = GoogleInSpec::Compute::Property::UrlMapPathMatchersPathRulesArray.parse(arguments['pathRules'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchers\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'default_service' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.default_service') { should cmp #{x.inspect} }\"] },\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'path_rules' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.path_rules') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class UrlMapPathMatchersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapPathMatchers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapPathMatchers.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| UrlMapPathMatchers.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/urlmap_path_matchers_path_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersPathRules\n        attr_reader :arguments\n\n        attr_reader :paths\n\n        attr_reader :service\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @paths = arguments['paths']\n          @service = arguments['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersPathRules\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'paths' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.paths') { should include #{single.inspect} }\" } },\n            'service' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.service') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class UrlMapPathMatchersPathRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapPathMatchersPathRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapPathMatchersPathRules.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| UrlMapPathMatchersPathRules.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/compute/property/urlmap_tests.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapTests\n        attr_reader :arguments\n\n        attr_reader :description\n\n        attr_reader :host\n\n        attr_reader :path\n\n        attr_reader :service\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @description = arguments['description']\n          @host = arguments['host']\n          @path = arguments['path']\n          @service = arguments['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapTests\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n            'host' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.host') { should cmp #{x.inspect} }\"] },\n            'path' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.path') { should cmp #{x.inspect} }\"] },\n            'service' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.service') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class UrlMapTestsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapTests.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapTests.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| UrlMapTests.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_addons_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalcluster_addons_config_horizontal_pod_autoscaling'\nrequire 'google/container/property/regionalcluster_addons_config_http_load_balancing'\nrequire 'google/container/property/regionalcluster_addons_config_kubernetes_dashboard'\nrequire 'google/container/property/regionalcluster_addons_config_network_policy_config'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterAddonsConfig\n        attr_reader :arguments\n\n        attr_reader :http_load_balancing\n\n        attr_reader :horizontal_pod_autoscaling\n\n        attr_reader :kubernetes_dashboard\n\n        attr_reader :network_policy_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @http_load_balancing = GoogleInSpec::Container::Property::RegionalClusterAddonsConfigHttpLoadBalancing.new(arguments['httpLoadBalancing'], to_s)\n          @horizontal_pod_autoscaling = GoogleInSpec::Container::Property::RegionalClusterAddonsConfigHorizontalPodAutoscaling.new(arguments['horizontalPodAutoscaling'], to_s)\n          @kubernetes_dashboard = GoogleInSpec::Container::Property::RegionalClusterAddonsConfigKubernetesDashboard.new(arguments['kubernetesDashboard'], to_s)\n          @network_policy_config = GoogleInSpec::Container::Property::RegionalClusterAddonsConfigNetworkPolicyConfig.new(arguments['networkPolicyConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterAddonsConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'http_load_balancing' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterAddonsConfigHttpLoadBalancing.un_parse(x, \"#{path}.http_load_balancing\") },\n            'horizontal_pod_autoscaling' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterAddonsConfigHorizontalPodAutoscaling.un_parse(x, \"#{path}.horizontal_pod_autoscaling\") },\n            'kubernetes_dashboard' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterAddonsConfigKubernetesDashboard.un_parse(x, \"#{path}.kubernetes_dashboard\") },\n            'network_policy_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterAddonsConfigNetworkPolicyConfig.un_parse(x, \"#{path}.network_policy_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_addons_config_horizontal_pod_autoscaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterAddonsConfigHorizontalPodAutoscaling\n        attr_reader :arguments\n\n        attr_reader :disabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disabled = arguments['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterAddonsConfigHorizontalPodAutoscaling\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_addons_config_http_load_balancing.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterAddonsConfigHttpLoadBalancing\n        attr_reader :arguments\n\n        attr_reader :disabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disabled = arguments['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterAddonsConfigHttpLoadBalancing\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_addons_config_kubernetes_dashboard.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterAddonsConfigKubernetesDashboard\n        attr_reader :arguments\n\n        attr_reader :disabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disabled = arguments['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterAddonsConfigKubernetesDashboard\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_addons_config_network_policy_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterAddonsConfigNetworkPolicyConfig\n        attr_reader :arguments\n\n        attr_reader :disabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @disabled = arguments['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterAddonsConfigNetworkPolicyConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'disabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterConditions\n        attr_reader :arguments\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @code = arguments['code']\n          @message = arguments['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterConditions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'code' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.code') { should cmp #{x.inspect} }\"] },\n            'message' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.message') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalClusterConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalClusterConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalClusterConditions.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalClusterConditions.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_default_max_pods_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterDefaultMaxPodsConstraint\n        attr_reader :arguments\n\n        attr_reader :max_pods_per_node\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @max_pods_per_node = arguments['maxPodsPerNode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterDefaultMaxPodsConstraint\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'max_pods_per_node' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_pods_per_node') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_ip_allocation_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterIpAllocationPolicy\n        attr_reader :arguments\n\n        attr_reader :use_ip_aliases\n\n        attr_reader :create_subnetwork\n\n        attr_reader :subnetwork_name\n\n        attr_reader :cluster_secondary_range_name\n\n        attr_reader :services_secondary_range_name\n\n        attr_reader :cluster_ipv4_cidr_block\n\n        attr_reader :node_ipv4_cidr_block\n\n        attr_reader :services_ipv4_cidr_block\n\n        attr_reader :tpu_ipv4_cidr_block\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @use_ip_aliases = arguments['useIpAliases']\n          @create_subnetwork = arguments['createSubnetwork']\n          @subnetwork_name = arguments['subnetworkName']\n          @cluster_secondary_range_name = arguments['clusterSecondaryRangeName']\n          @services_secondary_range_name = arguments['servicesSecondaryRangeName']\n          @cluster_ipv4_cidr_block = arguments['clusterIpv4CidrBlock']\n          @node_ipv4_cidr_block = arguments['nodeIpv4CidrBlock']\n          @services_ipv4_cidr_block = arguments['servicesIpv4CidrBlock']\n          @tpu_ipv4_cidr_block = arguments['tpuIpv4CidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterIpAllocationPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'use_ip_aliases' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.use_ip_aliases') { should cmp #{x.inspect} }\"] },\n            'create_subnetwork' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.create_subnetwork') { should cmp #{x.inspect} }\"] },\n            'subnetwork_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork_name') { should cmp #{x.inspect} }\"] },\n            'cluster_secondary_range_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cluster_secondary_range_name') { should cmp #{x.inspect} }\"] },\n            'services_secondary_range_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.services_secondary_range_name') { should cmp #{x.inspect} }\"] },\n            'cluster_ipv4_cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cluster_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n            'node_ipv4_cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.node_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n            'services_ipv4_cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.services_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n            'tpu_ipv4_cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.tpu_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_legacy_abac.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterLegacyAbac\n        attr_reader :arguments\n\n        attr_reader :enabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enabled = arguments['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterLegacyAbac\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_master_auth.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalcluster_master_auth_client_certificate_config'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterMasterAuth\n        attr_reader :arguments\n\n        attr_reader :username\n\n        attr_reader :password\n\n        attr_reader :client_certificate_config\n\n        attr_reader :cluster_ca_certificate\n\n        attr_reader :client_certificate\n\n        attr_reader :client_key\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @username = arguments['username']\n          @password = arguments['password']\n          @client_certificate_config = GoogleInSpec::Container::Property::RegionalClusterMasterAuthClientCertificateConfig.new(arguments['clientCertificateConfig'], to_s)\n          @cluster_ca_certificate = arguments['clusterCaCertificate']\n          @client_certificate = arguments['clientCertificate']\n          @client_key = arguments['clientKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterMasterAuth\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'username' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.username') { should cmp #{x.inspect} }\"] },\n            'password' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.password') { should cmp #{x.inspect} }\"] },\n            'client_certificate_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterMasterAuthClientCertificateConfig.un_parse(x, \"#{path}.client_certificate_config\") },\n            'cluster_ca_certificate' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cluster_ca_certificate') { should cmp #{x.inspect} }\"] },\n            'client_certificate' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.client_certificate') { should cmp #{x.inspect} }\"] },\n            'client_key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.client_key') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_master_auth_client_certificate_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterMasterAuthClientCertificateConfig\n        attr_reader :arguments\n\n        attr_reader :issue_client_certificate\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @issue_client_certificate = arguments['issueClientCertificate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterMasterAuthClientCertificateConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'issue_client_certificate' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.issue_client_certificate') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_master_authorized_networks_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalcluster_master_authorized_networks_config_cidr_blocks'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterMasterAuthorizedNetworksConfig\n        attr_reader :arguments\n\n        attr_reader :enabled\n\n        attr_reader :cidr_blocks\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enabled = arguments['enabled']\n          @cidr_blocks = GoogleInSpec::Container::Property::RegionalClusterMasterAuthorizedNetworksConfigCidrBlocksArray.parse(arguments['cidrBlocks'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterMasterAuthorizedNetworksConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enabled') { should cmp #{x.inspect} }\"] },\n            'cidr_blocks' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.cidr_blocks') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_master_authorized_networks_config_cidr_blocks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterMasterAuthorizedNetworksConfigCidrBlocks\n        attr_reader :arguments\n\n        attr_reader :display_name\n\n        attr_reader :cidr_block\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @display_name = arguments['displayName']\n          @cidr_block = arguments['cidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterMasterAuthorizedNetworksConfigCidrBlocks\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'display_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.display_name') { should cmp #{x.inspect} }\"] },\n            'cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cidr_block') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalClusterMasterAuthorizedNetworksConfigCidrBlocksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalClusterMasterAuthorizedNetworksConfigCidrBlocks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalClusterMasterAuthorizedNetworksConfigCidrBlocks.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalClusterMasterAuthorizedNetworksConfigCidrBlocks.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_network_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterNetworkPolicy\n        attr_reader :arguments\n\n        attr_reader :provider\n\n        attr_reader :enabled\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @provider = arguments['provider']\n          @enabled = arguments['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterNetworkPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'provider' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.provider') { should cmp #{x.inspect} }\"] },\n            'enabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enabled') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_node_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalcluster_node_config_accelerators'\nrequire 'google/container/property/regionalcluster_node_config_taints'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterNodeConfig\n        attr_reader :arguments\n\n        attr_reader :machine_type\n\n        attr_reader :disk_size_gb\n\n        attr_reader :oauth_scopes\n\n        attr_reader :service_account\n\n        attr_reader :metadata\n\n        attr_reader :image_type\n\n        attr_reader :labels\n\n        attr_reader :local_ssd_count\n\n        attr_reader :tags\n\n        attr_reader :preemptible\n\n        attr_reader :accelerators\n\n        attr_reader :disk_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :taints\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = arguments['machineType']\n          @disk_size_gb = arguments['diskSizeGb']\n          @oauth_scopes = arguments['oauthScopes']\n          @service_account = arguments['serviceAccount']\n          @metadata = arguments['metadata']\n          @image_type = arguments['imageType']\n          @labels = arguments['labels']\n          @local_ssd_count = arguments['localSsdCount']\n          @tags = arguments['tags']\n          @preemptible = arguments['preemptible']\n          @accelerators = GoogleInSpec::Container::Property::RegionalClusterNodeConfigAcceleratorsArray.parse(arguments['accelerators'], to_s)\n          @disk_type = arguments['diskType']\n          @min_cpu_platform = arguments['minCpuPlatform']\n          @taints = GoogleInSpec::Container::Property::RegionalClusterNodeConfigTaintsArray.parse(arguments['taints'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterNodeConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'machine_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type') { should cmp #{x.inspect} }\"] },\n            'disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'oauth_scopes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.oauth_scopes') { should include #{single.inspect} }\" } },\n            'service_account' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.service_account') { should cmp #{x.inspect} }\"] },\n            'metadata' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.metadata') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'image_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_type') { should cmp #{x.inspect} }\"] },\n            'labels' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'local_ssd_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.local_ssd_count') { should cmp #{x.inspect} }\"] },\n            'tags' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.tags') { should include #{single.inspect} }\" } },\n            'preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.preemptible') { should cmp #{x.inspect} }\"] },\n            'accelerators' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.accelerators') { should include '#{single.to_json}' }\" } },\n            'disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_type') { should cmp #{x.inspect} }\"] },\n            'min_cpu_platform' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.min_cpu_platform') { should cmp #{x.inspect} }\"] },\n            'taints' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.taints') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_node_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterNodeConfigAccelerators\n        attr_reader :arguments\n\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = arguments['acceleratorCount']\n          @accelerator_type = arguments['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterNodeConfigAccelerators\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'accelerator_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_count') { should cmp #{x.inspect} }\"] },\n            'accelerator_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalClusterNodeConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalClusterNodeConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalClusterNodeConfigAccelerators.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalClusterNodeConfigAccelerators.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_node_config_taints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterNodeConfigTaints\n        attr_reader :arguments\n\n        attr_reader :key\n\n        attr_reader :value\n\n        attr_reader :effect\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @key = arguments['key']\n          @value = arguments['value']\n          @effect = arguments['effect']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterNodeConfigTaints\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.key') { should cmp #{x.inspect} }\"] },\n            'value' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.value') { should cmp #{x.inspect} }\"] },\n            'effect' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.effect') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalClusterNodeConfigTaintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalClusterNodeConfigTaints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalClusterNodeConfigTaints.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalClusterNodeConfigTaints.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalcluster_private_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalClusterPrivateClusterConfig\n        attr_reader :arguments\n\n        attr_reader :enable_private_nodes\n\n        attr_reader :enable_private_endpoint\n\n        attr_reader :master_ipv4_cidr_block\n\n        attr_reader :private_endpoint\n\n        attr_reader :public_endpoint\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enable_private_nodes = arguments['enablePrivateNodes']\n          @enable_private_endpoint = arguments['enablePrivateEndpoint']\n          @master_ipv4_cidr_block = arguments['masterIpv4CidrBlock']\n          @private_endpoint = arguments['privateEndpoint']\n          @public_endpoint = arguments['publicEndpoint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalClusterPrivateClusterConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enable_private_nodes' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_private_nodes') { should cmp #{x.inspect} }\"] },\n            'enable_private_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_private_endpoint') { should cmp #{x.inspect} }\"] },\n            'master_ipv4_cidr_block' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.master_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n            'private_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.private_endpoint') { should cmp #{x.inspect} }\"] },\n            'public_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.public_endpoint') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_autoscaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolAutoscaling\n        attr_reader :arguments\n\n        attr_reader :enabled\n\n        attr_reader :min_node_count\n\n        attr_reader :max_node_count\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enabled = arguments['enabled']\n          @min_node_count = arguments['minNodeCount']\n          @max_node_count = arguments['maxNodeCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolAutoscaling\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enabled' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enabled') { should cmp #{x.inspect} }\"] },\n            'min_node_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.min_node_count') { should cmp #{x.inspect} }\"] },\n            'max_node_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_node_count') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolConditions\n        attr_reader :arguments\n\n        attr_reader :code\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @code = arguments['code']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolConditions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'code' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.code') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalNodePoolConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalNodePoolConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalNodePoolConditions.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalNodePoolConditions.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalnodepool_config_accelerators'\nrequire 'google/container/property/regionalnodepool_config_taints'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolConfig\n        attr_reader :arguments\n\n        attr_reader :machine_type\n\n        attr_reader :disk_size_gb\n\n        attr_reader :oauth_scopes\n\n        attr_reader :service_account\n\n        attr_reader :metadata\n\n        attr_reader :image_type\n\n        attr_reader :labels\n\n        attr_reader :local_ssd_count\n\n        attr_reader :tags\n\n        attr_reader :preemptible\n\n        attr_reader :accelerators\n\n        attr_reader :disk_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :taints\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = arguments['machineType']\n          @disk_size_gb = arguments['diskSizeGb']\n          @oauth_scopes = arguments['oauthScopes']\n          @service_account = arguments['serviceAccount']\n          @metadata = arguments['metadata']\n          @image_type = arguments['imageType']\n          @labels = arguments['labels']\n          @local_ssd_count = arguments['localSsdCount']\n          @tags = arguments['tags']\n          @preemptible = arguments['preemptible']\n          @accelerators = GoogleInSpec::Container::Property::RegionalNodePoolConfigAcceleratorsArray.parse(arguments['accelerators'], to_s)\n          @disk_type = arguments['diskType']\n          @min_cpu_platform = arguments['minCpuPlatform']\n          @taints = GoogleInSpec::Container::Property::RegionalNodePoolConfigTaintsArray.parse(arguments['taints'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'machine_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type') { should cmp #{x.inspect} }\"] },\n            'disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'oauth_scopes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.oauth_scopes') { should include #{single.inspect} }\" } },\n            'service_account' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.service_account') { should cmp #{x.inspect} }\"] },\n            'metadata' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.metadata') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'image_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_type') { should cmp #{x.inspect} }\"] },\n            'labels' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'local_ssd_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.local_ssd_count') { should cmp #{x.inspect} }\"] },\n            'tags' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.tags') { should include #{single.inspect} }\" } },\n            'preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.preemptible') { should cmp #{x.inspect} }\"] },\n            'accelerators' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.accelerators') { should include '#{single.to_json}' }\" } },\n            'disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.disk_type') { should cmp #{x.inspect} }\"] },\n            'min_cpu_platform' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.min_cpu_platform') { should cmp #{x.inspect} }\"] },\n            'taints' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.taints') { should include '#{single.to_json}' }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolConfigAccelerators\n        attr_reader :arguments\n\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = arguments['acceleratorCount']\n          @accelerator_type = arguments['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolConfigAccelerators\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'accelerator_count' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_count') { should cmp #{x.inspect} }\"] },\n            'accelerator_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.accelerator_type') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalNodePoolConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalNodePoolConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalNodePoolConfigAccelerators.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalNodePoolConfigAccelerators.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_config_taints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolConfigTaints\n        attr_reader :arguments\n\n        attr_reader :key\n\n        attr_reader :value\n\n        attr_reader :effect\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @key = arguments['key']\n          @value = arguments['value']\n          @effect = arguments['effect']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolConfigTaints\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'key' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.key') { should cmp #{x.inspect} }\"] },\n            'value' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.value') { should cmp #{x.inspect} }\"] },\n            'effect' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.effect') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class RegionalNodePoolConfigTaintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionalNodePoolConfigTaints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionalNodePoolConfigTaints.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| RegionalNodePoolConfigTaints.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_management.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/regionalnodepool_management_upgrade_options'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolManagement\n        attr_reader :arguments\n\n        attr_reader :auto_upgrade\n\n        attr_reader :auto_repair\n\n        attr_reader :upgrade_options\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @auto_upgrade = arguments['autoUpgrade']\n          @auto_repair = arguments['autoRepair']\n          @upgrade_options = GoogleInSpec::Container::Property::RegionalNodePoolManagementUpgradeOptions.new(arguments['upgradeOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolManagement\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'auto_upgrade' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.auto_upgrade') { should cmp #{x.inspect} }\"] },\n            'auto_repair' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.auto_repair') { should cmp #{x.inspect} }\"] },\n            'upgrade_options' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalNodePoolManagementUpgradeOptions.un_parse(x, \"#{path}.upgrade_options\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_management_upgrade_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolManagementUpgradeOptions\n        attr_reader :arguments\n\n        attr_reader :auto_upgrade_start_time\n\n        attr_reader :description\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @auto_upgrade_start_time = parse_time_string(arguments['autoUpgradeStartTime'])\n          @description = arguments['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolManagementUpgradeOptions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'auto_upgrade_start_time' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.auto_upgrade_start_time.to_s') { should cmp '#{x.inspect}' }\"] },\n            'description' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.description') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/container/property/regionalnodepool_max_pods_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class RegionalNodePoolMaxPodsConstraint\n        attr_reader :arguments\n\n        attr_reader :max_pods_per_node\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @max_pods_per_node = arguments['maxPodsPerNode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionalNodePoolMaxPodsConstraint\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'max_pods_per_node' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.max_pods_per_node') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_encryption_config'\nrequire 'google/dataproc/property/cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/cluster_config_initialization_actions'\nrequire 'google/dataproc/property/cluster_config_master_config'\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_security_config'\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/cluster_config_software_config'\nrequire 'google/dataproc/property/cluster_config_worker_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfig\n        attr_reader :arguments\n\n        attr_reader :config_bucket\n\n        attr_reader :gce_cluster_config\n\n        attr_reader :master_config\n\n        attr_reader :worker_config\n\n        attr_reader :secondary_worker_config\n\n        attr_reader :software_config\n\n        attr_reader :initialization_actions\n\n        attr_reader :encryption_config\n\n        attr_reader :security_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @config_bucket = arguments['configBucket']\n          @gce_cluster_config = GoogleInSpec::Dataproc::Property::ClusterConfigGceClusterConfig.new(arguments['gceClusterConfig'], to_s)\n          @master_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfig.new(arguments['masterConfig'], to_s)\n          @worker_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfig.new(arguments['workerConfig'], to_s)\n          @secondary_worker_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfig.new(arguments['secondaryWorkerConfig'], to_s)\n          @software_config = GoogleInSpec::Dataproc::Property::ClusterConfigSoftwareConfig.new(arguments['softwareConfig'], to_s)\n          @initialization_actions = GoogleInSpec::Dataproc::Property::ClusterConfigInitializationActionsArray.parse(arguments['initializationActions'], to_s)\n          @encryption_config = GoogleInSpec::Dataproc::Property::ClusterConfigEncryptionConfig.new(arguments['encryptionConfig'], to_s)\n          @security_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfig.new(arguments['securityConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'config_bucket' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.config_bucket') { should cmp #{x.inspect} }\"] },\n            'gce_cluster_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigGceClusterConfig.un_parse(x, \"#{path}.gce_cluster_config\") },\n            'master_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfig.un_parse(x, \"#{path}.master_config\") },\n            'worker_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfig.un_parse(x, \"#{path}.worker_config\") },\n            'secondary_worker_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfig.un_parse(x, \"#{path}.secondary_worker_config\") },\n            'software_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSoftwareConfig.un_parse(x, \"#{path}.software_config\") },\n            'initialization_actions' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.initialization_actions') { should include '#{single.to_json}' }\" } },\n            'encryption_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigEncryptionConfig.un_parse(x, \"#{path}.encryption_config\") },\n            'security_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfig.un_parse(x, \"#{path}.security_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigEncryptionConfig\n        attr_reader :arguments\n\n        attr_reader :gce_pd_kms_key_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @gce_pd_kms_key_name = arguments['gcePdKmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigEncryptionConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'gce_pd_kms_key_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.gce_pd_kms_key_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_gce_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigGceClusterConfig\n        attr_reader :arguments\n\n        attr_reader :zone_uri\n\n        attr_reader :network_uri\n\n        attr_reader :subnetwork_uri\n\n        attr_reader :internal_ip_only\n\n        attr_reader :service_account_scopes\n\n        attr_reader :tags\n\n        attr_reader :metadata\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @zone_uri = arguments['zoneUri']\n          @network_uri = arguments['networkUri']\n          @subnetwork_uri = arguments['subnetworkUri']\n          @internal_ip_only = arguments['internalIpOnly']\n          @service_account_scopes = arguments['serviceAccountScopes']\n          @tags = arguments['tags']\n          @metadata = arguments['metadata']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigGceClusterConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'zone_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.zone_uri') { should cmp #{x.inspect} }\"] },\n            'network_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network_uri') { should cmp #{x.inspect} }\"] },\n            'subnetwork_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.subnetwork_uri') { should cmp #{x.inspect} }\"] },\n            'internal_ip_only' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.internal_ip_only') { should cmp #{x.inspect} }\"] },\n            'service_account_scopes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.service_account_scopes') { should include #{single.inspect} }\" } },\n            'tags' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.tags') { should include #{single.inspect} }\" } },\n            'metadata' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.metadata') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_initialization_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigInitializationActions\n        attr_reader :arguments\n\n        attr_reader :executable_file\n\n        attr_reader :execution_timeout\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @executable_file = arguments['executableFile']\n          @execution_timeout = arguments['executionTimeout']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigInitializationActions\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'executable_file' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.executable_file') { should cmp #{x.inspect} }\"] },\n            'execution_timeout' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.execution_timeout') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class ClusterConfigInitializationActionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterConfigInitializationActions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterConfigInitializationActions.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| ClusterConfigInitializationActions.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_master_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfig\n        attr_reader :arguments\n\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = arguments['numInstances']\n          @instance_names = arguments['instanceNames']\n          @image_uri = arguments['imageUri']\n          @machine_type_uri = arguments['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigDiskConfig.new(arguments['diskConfig'], to_s)\n          @is_preemptible = arguments['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigManagedGroupConfig.new(arguments['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'num_instances' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_instances') { should cmp #{x.inspect} }\"] },\n            'instance_names' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.instance_names') { should include #{single.inspect} }\" } },\n            'image_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_uri') { should cmp #{x.inspect} }\"] },\n            'machine_type_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type_uri') { should cmp #{x.inspect} }\"] },\n            'disk_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigDiskConfig.un_parse(x, \"#{path}.disk_config\") },\n            'is_preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.is_preemptible') { should cmp #{x.inspect} }\"] },\n            'managed_group_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigManagedGroupConfig.un_parse(x, \"#{path}.managed_group_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_master_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfigDiskConfig\n        attr_reader :arguments\n\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = arguments['bootDiskType']\n          @boot_disk_size_gb = arguments['bootDiskSizeGb']\n          @num_local_ssds = arguments['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfigDiskConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'boot_disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_type') { should cmp #{x.inspect} }\"] },\n            'boot_disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'num_local_ssds' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_local_ssds') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_master_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfigManagedGroupConfig\n        attr_reader :arguments\n\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = arguments['instanceTemplateName']\n          @instance_group_manager_name = arguments['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfigManagedGroupConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'instance_template_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_template_name') { should cmp #{x.inspect} }\"] },\n            'instance_group_manager_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_group_manager_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_secondary_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfig\n        attr_reader :arguments\n\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = arguments['numInstances']\n          @instance_names = arguments['instanceNames']\n          @image_uri = arguments['imageUri']\n          @machine_type_uri = arguments['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigDiskConfig.new(arguments['diskConfig'], to_s)\n          @is_preemptible = arguments['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigManagedGroupConfig.new(arguments['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'num_instances' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_instances') { should cmp #{x.inspect} }\"] },\n            'instance_names' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.instance_names') { should include #{single.inspect} }\" } },\n            'image_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_uri') { should cmp #{x.inspect} }\"] },\n            'machine_type_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type_uri') { should cmp #{x.inspect} }\"] },\n            'disk_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigDiskConfig.un_parse(x, \"#{path}.disk_config\") },\n            'is_preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.is_preemptible') { should cmp #{x.inspect} }\"] },\n            'managed_group_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigManagedGroupConfig.un_parse(x, \"#{path}.managed_group_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_secondary_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfigDiskConfig\n        attr_reader :arguments\n\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = arguments['bootDiskType']\n          @boot_disk_size_gb = arguments['bootDiskSizeGb']\n          @num_local_ssds = arguments['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfigDiskConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'boot_disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_type') { should cmp #{x.inspect} }\"] },\n            'boot_disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'num_local_ssds' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_local_ssds') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfigManagedGroupConfig\n        attr_reader :arguments\n\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = arguments['instanceTemplateName']\n          @instance_group_manager_name = arguments['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfigManagedGroupConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'instance_template_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_template_name') { should cmp #{x.inspect} }\"] },\n            'instance_group_manager_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_group_manager_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_security_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecurityConfig\n        attr_reader :arguments\n\n        attr_reader :kerberos_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @kerberos_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfigKerberosConfig.new(arguments['kerberosConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecurityConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'kerberos_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfigKerberosConfig.un_parse(x, \"#{path}.kerberos_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_security_config_kerberos_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecurityConfigKerberosConfig\n        attr_reader :arguments\n\n        attr_reader :enable_kerberos\n\n        attr_reader :rootprincipal_password_uri\n\n        attr_reader :kms_key_uri\n\n        attr_reader :keystore_uri\n\n        attr_reader :truststore_uri\n\n        attr_reader :key_password_uri\n\n        attr_reader :truststore_password_uri\n\n        attr_reader :cross_realm_trust_realm\n\n        attr_reader :cross_realm_trust_admin_server\n\n        attr_reader :cross_realm_trust_shared_password_uri\n\n        attr_reader :kdc_db_key_uri\n\n        attr_reader :tgt_lifetime_hours\n\n        attr_reader :realm\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @enable_kerberos = arguments['enableKerberos']\n          @rootprincipal_password_uri = arguments['rootprincipalPasswordUri']\n          @kms_key_uri = arguments['kmsKeyUri']\n          @keystore_uri = arguments['keystoreUri']\n          @truststore_uri = arguments['truststoreUri']\n          @key_password_uri = arguments['keyPasswordUri']\n          @truststore_password_uri = arguments['truststorePasswordUri']\n          @cross_realm_trust_realm = arguments['crossRealmTrustRealm']\n          @cross_realm_trust_admin_server = arguments['crossRealmTrustAdminServer']\n          @cross_realm_trust_shared_password_uri = arguments['crossRealmTrustSharedPasswordUri']\n          @kdc_db_key_uri = arguments['kdcDbKeyUri']\n          @tgt_lifetime_hours = arguments['tgtLifetimeHours']\n          @realm = arguments['realm']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecurityConfigKerberosConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'enable_kerberos' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.enable_kerberos') { should cmp #{x.inspect} }\"] },\n            'rootprincipal_password_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.rootprincipal_password_uri') { should cmp #{x.inspect} }\"] },\n            'kms_key_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kms_key_uri') { should cmp #{x.inspect} }\"] },\n            'keystore_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.keystore_uri') { should cmp #{x.inspect} }\"] },\n            'truststore_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.truststore_uri') { should cmp #{x.inspect} }\"] },\n            'key_password_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.key_password_uri') { should cmp #{x.inspect} }\"] },\n            'truststore_password_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.truststore_password_uri') { should cmp #{x.inspect} }\"] },\n            'cross_realm_trust_realm' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cross_realm_trust_realm') { should cmp #{x.inspect} }\"] },\n            'cross_realm_trust_admin_server' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cross_realm_trust_admin_server') { should cmp #{x.inspect} }\"] },\n            'cross_realm_trust_shared_password_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.cross_realm_trust_shared_password_uri') { should cmp #{x.inspect} }\"] },\n            'kdc_db_key_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.kdc_db_key_uri') { should cmp #{x.inspect} }\"] },\n            'tgt_lifetime_hours' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.tgt_lifetime_hours') { should cmp #{x.inspect} }\"] },\n            'realm' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.realm') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_software_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSoftwareConfig\n        attr_reader :arguments\n\n        attr_reader :image_version\n\n        attr_reader :properties\n\n        attr_reader :optional_components\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @image_version = arguments['imageVersion']\n          @properties = arguments['properties']\n          @optional_components = arguments['optionalComponents']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSoftwareConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'image_version' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_version') { should cmp #{x.inspect} }\"] },\n            'properties' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.properties') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n            'optional_components' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.optional_components') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfig\n        attr_reader :arguments\n\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = arguments['numInstances']\n          @instance_names = arguments['instanceNames']\n          @image_uri = arguments['imageUri']\n          @machine_type_uri = arguments['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigDiskConfig.new(arguments['diskConfig'], to_s)\n          @is_preemptible = arguments['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigManagedGroupConfig.new(arguments['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'num_instances' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_instances') { should cmp #{x.inspect} }\"] },\n            'instance_names' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.instance_names') { should include #{single.inspect} }\" } },\n            'image_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.image_uri') { should cmp #{x.inspect} }\"] },\n            'machine_type_uri' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.machine_type_uri') { should cmp #{x.inspect} }\"] },\n            'disk_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigDiskConfig.un_parse(x, \"#{path}.disk_config\") },\n            'is_preemptible' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.is_preemptible') { should cmp #{x.inspect} }\"] },\n            'managed_group_config' => ->(x, path) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigManagedGroupConfig.un_parse(x, \"#{path}.managed_group_config\") },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfigDiskConfig\n        attr_reader :arguments\n\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = arguments['bootDiskType']\n          @boot_disk_size_gb = arguments['bootDiskSizeGb']\n          @num_local_ssds = arguments['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfigDiskConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'boot_disk_type' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_type') { should cmp #{x.inspect} }\"] },\n            'boot_disk_size_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.boot_disk_size_gb') { should cmp #{x.inspect} }\"] },\n            'num_local_ssds' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.num_local_ssds') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/dataproc/property/cluster_config_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfigManagedGroupConfig\n        attr_reader :arguments\n\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = arguments['instanceTemplateName']\n          @instance_group_manager_name = arguments['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfigManagedGroupConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'instance_template_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_template_name') { should cmp #{x.inspect} }\"] },\n            'instance_group_manager_name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.instance_group_manager_name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/filestore/property/instance_file_shares.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Filestore\n    module Property\n      class InstanceFileShares\n        attr_reader :arguments\n\n        attr_reader :name\n\n        attr_reader :capacity_gb\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n          @capacity_gb = arguments['capacityGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceFileShares\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n            'capacity_gb' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.capacity_gb') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceFileSharesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceFileShares.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceFileShares.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceFileShares.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/filestore/property/instance_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Filestore\n    module Property\n      class InstanceNetworks\n        attr_reader :arguments\n\n        attr_reader :network\n\n        attr_reader :modes\n\n        attr_reader :reserved_ip_range\n\n        attr_reader :ip_addresses\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @network = arguments['network']\n          @modes = arguments['modes']\n          @reserved_ip_range = arguments['reservedIpRange']\n          @ip_addresses = arguments['ipAddresses']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworks\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'network' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.network') { should cmp #{x.inspect} }\"] },\n            'modes' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.modes') { should include #{single.inspect} }\" } },\n            'reserved_ip_range' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.reserved_ip_range') { should cmp #{x.inspect} }\"] },\n            'ip_addresses' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.ip_addresses') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n\n      class InstanceNetworksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworks.new(v, parent_identifier) }\n        end\n\n        def self.un_parse(arr, path)\n          return if arr.nil?\n          value.map { |v| InstanceNetworks.un_parse(v, path) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/iam/property/iam_policy_audit_configs.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nrequire 'google/iam/property/iam_policy_audit_configs_audit_log_configs'\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyAuditConfigs\n        attr_reader :service\n\n        attr_reader :audit_log_configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @audit_log_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsAuditLogConfigsArray.parse(args['auditLogConfigs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyAuditConfigs\"\n        end\n      end\n\n      class IamPolicyAuditConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyAuditConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyAuditConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/iam/property/iam_policy_audit_configs_audit_log_configs.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyAuditConfigsAuditLogConfigs\n        attr_reader :log_type\n\n        attr_reader :exempted_members\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_type = args['logType']\n          @exempted_members = args['exemptedMembers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyAuditConfigsAuditLogConfigs\"\n        end\n      end\n\n      class IamPolicyAuditConfigsAuditLogConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyAuditConfigsAuditLogConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyAuditConfigsAuditLogConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/iam/property/iam_policy_bindings.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyBindings\n        attr_reader :role\n\n        attr_reader :members\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @role = args['role']\n          @members = args['members']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyBindings\"\n        end\n      end\n\n      class IamPolicyBindingsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyBindings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyBindings.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/mlengine/property/model_default_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module MLEngine\n    module Property\n      class ModelDefaultVersion\n        attr_reader :arguments\n\n        attr_reader :name\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @name = arguments['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDefaultVersion\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'name' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.name') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/pubsub/property/subscription_expiration_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionExpirationPolicy\n        attr_reader :arguments\n\n        attr_reader :ttl\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @ttl = arguments['ttl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionExpirationPolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'ttl' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.ttl') { should cmp #{x.inspect} }\"] },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/pubsub/property/subscription_push_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionPushConfig\n        attr_reader :arguments\n\n        attr_reader :push_endpoint\n\n        attr_reader :attributes\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @push_endpoint = arguments['pushEndpoint']\n          @attributes = arguments['attributes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionPushConfig\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'push_endpoint' => ->(x, path) { x.nil? ? [] : [\"its('#{path}.push_endpoint') { should cmp #{x.inspect} }\"] },\n            'attributes' => ->(x, path) { x.nil? ? [] : x.map { |k, v| \"its('#{path}.attributes') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/pubsub/property/topic_message_storage_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class TopicMessageStoragePolicy\n        attr_reader :arguments\n\n        attr_reader :allowed_persistence_regions\n\n        def initialize(arguments = nil, parent_identifier = nil)\n          @arguments = arguments\n          return if arguments.nil?\n          @parent_identifier = parent_identifier\n          @allowed_persistence_regions = arguments['allowedPersistenceRegions']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TopicMessageStoragePolicy\"\n        end\n\n        def self.un_parse(item, current_path)\n          return if item.nil?\n          way_to_parse = {\n            'allowed_persistence_regions' => ->(x, path) { x.nil? ? [] : x.map { |single| \"its('#{path}.allowed_persistence_regions') { should include #{single.inspect} }\" } },\n          }\n          way_to_parse.map do |k, v|\n            v.call(item.method(k).call, current_path)\n          end\n        end\n\n        def to_json(*_args)\n          @arguments.to_json\n        end\n\n        # other is a string representation of this object\n        def ==(other)\n          @arguments == JSON.parse(other)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/resourcemanager/property/organizationpolicy_boolean_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module ResourceManager\n    module Property\n      class OrganizationPolicyBooleanPolicy\n        attr_reader :enforced\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enforced = args['enforced']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationPolicyBooleanPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google/resourcemanager/property/organizationpolicy_list_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module ResourceManager\n    module Property\n      class OrganizationPolicyListPolicy\n        attr_reader :allowed_values\n\n        attr_reader :denied_values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allowed_values = args['allowedValues']\n          @denied_values = args['deniedValues']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationPolicyListPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_appengine_standard_app_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage App Engine resources.\nclass AppEngineStandardAppVersion < GcpResourceBase\n  name 'google_appengine_standard_app_version'\n  desc 'StandardAppVersion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :version_id\n  attr_reader :runtime\n  attr_reader :threadsafe\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @version_id = @fetched['id']\n    @runtime = @fetched['runtime']\n    @threadsafe = @fetched['threadsafe']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"StandardAppVersion #{@params[:version_id]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'version_id' => ->(x, _) { x.nil? ? [] : [\"its('version_id') { should cmp #{x.inspect} }\"] },\n      'runtime' => ->(x, _) { x.nil? ? [] : [\"its('runtime') { should cmp #{x.inspect} }\"] },\n      'threadsafe' => ->(x, _) { x.nil? ? [] : [\"its('threadsafe') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'StandardAppVersion'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_appengine_standard_app_version',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://appengine.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'apps/{{project}}/services/{{service}}/versions/{{version_id}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_appengine_standard_app_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass AppEngineStandardAppVersions < GcpResourceBase\n  name 'google_appengine_standard_app_versions'\n  desc 'StandardAppVersion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:version_ids, field: :version_id)\n  filter_table_config.add(:runtimes, field: :runtime)\n  filter_table_config.add(:threadsaves, field: :threadsafe)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('versions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'id' => ->(obj) { [:version_id, obj['id']] },\n      'runtime' => ->(obj) { [:runtime, obj['runtime']] },\n      'threadsafe' => ->(obj) { [:threadsafe, obj['threadsafe']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project service version_id}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://appengine.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'apps/{{project}}/services/{{service}}/versions'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_bigquery_dataset.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigquery/property/dataset_access'\nrequire 'google/bigquery/property/dataset_dataset_reference'\nrequire 'google/bigquery/property/dataset_default_encryption_configuration'\n\n# A provider to manage BigQuery resources.\nclass BigQueryDataset < GcpResourceBase\n  name 'google_bigquery_dataset'\n  desc 'Dataset'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :access\n  attr_reader :creation_time\n  attr_reader :dataset_reference\n  attr_reader :default_table_expiration_ms\n  attr_reader :default_partition_expiration_ms\n  attr_reader :description\n  attr_reader :etag\n  attr_reader :friendly_name\n  attr_reader :id\n  attr_reader :labels\n  attr_reader :last_modified_time\n  attr_reader :location\n  attr_reader :default_encryption_configuration\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @access = GoogleInSpec::BigQuery::Property::DatasetAccessArray.parse(@fetched['access'], to_s)\n    @creation_time = @fetched['creationTime']\n    @dataset_reference = GoogleInSpec::BigQuery::Property::DatasetDatasetReference.new(@fetched['datasetReference'], to_s)\n    @default_table_expiration_ms = @fetched['defaultTableExpirationMs']\n    @default_partition_expiration_ms = @fetched['defaultPartitionExpirationMs']\n    @description = @fetched['description']\n    @etag = @fetched['etag']\n    @friendly_name = @fetched['friendlyName']\n    @id = @fetched['id']\n    @labels = @fetched['labels']\n    @last_modified_time = @fetched['lastModifiedTime']\n    @location = @fetched['location']\n    @default_encryption_configuration = GoogleInSpec::BigQuery::Property::DatasetDefaultEncryptionConfiguration.new(@fetched['defaultEncryptionConfiguration'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Dataset #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'access' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('access') { should include '#{single.to_json}' }\" } },\n      'creation_time' => ->(x, _) { x.nil? ? [] : [\"its('creation_time') { should cmp #{x.inspect} }\"] },\n      'dataset_reference' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::DatasetDatasetReference.un_parse(x, 'dataset_reference') },\n      'default_table_expiration_ms' => ->(x, _) { x.nil? ? [] : [\"its('default_table_expiration_ms') { should cmp #{x.inspect} }\"] },\n      'default_partition_expiration_ms' => ->(x, _) { x.nil? ? [] : [\"its('default_partition_expiration_ms') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'etag' => ->(x, _) { x.nil? ? [] : [\"its('etag') { should cmp #{x.inspect} }\"] },\n      'friendly_name' => ->(x, _) { x.nil? ? [] : [\"its('friendly_name') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'last_modified_time' => ->(x, _) { x.nil? ? [] : [\"its('last_modified_time') { should cmp #{x.inspect} }\"] },\n      'location' => ->(x, _) { x.nil? ? [] : [\"its('location') { should cmp #{x.inspect} }\"] },\n      'default_encryption_configuration' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::DatasetDefaultEncryptionConfiguration.un_parse(x, 'default_encryption_configuration') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Dataset'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_bigquery_dataset',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  def name\n    dataset_reference&.dataset_id\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_bigquery_datasets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigQueryDatasets < GcpResourceBase\n  name 'google_bigquery_datasets'\n  desc 'Dataset plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dataset_references, field: :dataset_reference)\n  filter_table_config.add(:default_partition_expiration_ms, field: :default_partition_expiration_ms)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:friendly_names, field: :friendly_name)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:default_encryption_configurations, field: :default_encryption_configuration)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('datasets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'datasetReference' => ->(obj) { [:dataset_reference, GoogleInSpec::BigQuery::Property::DatasetDatasetReference.new(obj['datasetReference'], to_s)] },\n      'defaultPartitionExpirationMs' => ->(obj) { [:default_partition_expiration_ms, obj['defaultPartitionExpirationMs']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'friendlyName' => ->(obj) { [:friendly_name, obj['friendlyName']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'defaultEncryptionConfiguration' => ->(obj) { [:default_encryption_configuration, GoogleInSpec::BigQuery::Property::DatasetDefaultEncryptionConfiguration.new(obj['defaultEncryptionConfiguration'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        if param == 'name'\n          item_identifiers[param.to_sym] = item[:dataset_reference].dataset_id\n        else\n          item_identifiers[param.to_sym] = combo[param.to_sym]\n        end\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_bigquery_table.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigquery/property/table_encryption_configuration'\nrequire 'google/bigquery/property/table_external_data_configuration'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nrequire 'google/bigquery/property/table_external_data_configuration_csv_options'\nrequire 'google/bigquery/property/table_external_data_configuration_google_sheets_options'\nrequire 'google/bigquery/property/table_external_data_configuration_schema'\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nrequire 'google/bigquery/property/table_schema'\nrequire 'google/bigquery/property/table_schema_fields'\nrequire 'google/bigquery/property/table_streaming_buffer'\nrequire 'google/bigquery/property/table_table_reference'\nrequire 'google/bigquery/property/table_time_partitioning'\nrequire 'google/bigquery/property/table_view'\nrequire 'google/bigquery/property/table_view_user_defined_function_resources'\n\n# A provider to manage BigQuery resources.\nclass BigQueryTable < GcpResourceBase\n  name 'google_bigquery_table'\n  desc 'Table'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :table_reference\n  attr_reader :clustering\n  attr_reader :creation_time\n  attr_reader :description\n  attr_reader :friendly_name\n  attr_reader :id\n  attr_reader :labels\n  attr_reader :last_modified_time\n  attr_reader :location\n  attr_reader :name\n  attr_reader :num_bytes\n  attr_reader :num_long_term_bytes\n  attr_reader :num_rows\n  attr_reader :require_partition_filter\n  attr_reader :type\n  attr_reader :view\n  attr_reader :time_partitioning\n  attr_reader :streaming_buffer\n  attr_reader :schema\n  attr_reader :encryption_configuration\n  attr_reader :expiration_time\n  attr_reader :external_data_configuration\n  attr_reader :dataset\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @table_reference = GoogleInSpec::BigQuery::Property::TableTableReference.new(@fetched['tableReference'], to_s)\n    @clustering = @fetched['clustering']\n    @creation_time = @fetched['creationTime']\n    @description = @fetched['description']\n    @friendly_name = @fetched['friendlyName']\n    @id = @fetched['id']\n    @labels = @fetched['labels']\n    @last_modified_time = @fetched['lastModifiedTime']\n    @location = @fetched['location']\n    @name = @fetched['name']\n    @num_bytes = @fetched['numBytes']\n    @num_long_term_bytes = @fetched['numLongTermBytes']\n    @num_rows = @fetched['numRows']\n    @require_partition_filter = @fetched['requirePartitionFilter']\n    @type = @fetched['type']\n    @view = GoogleInSpec::BigQuery::Property::TableView.new(@fetched['view'], to_s)\n    @time_partitioning = GoogleInSpec::BigQuery::Property::TableTimePartitioning.new(@fetched['timePartitioning'], to_s)\n    @streaming_buffer = GoogleInSpec::BigQuery::Property::TableStreamingBuffer.new(@fetched['streamingBuffer'], to_s)\n    @schema = GoogleInSpec::BigQuery::Property::TableSchema.new(@fetched['schema'], to_s)\n    @encryption_configuration = GoogleInSpec::BigQuery::Property::TableEncryptionConfiguration.new(@fetched['encryptionConfiguration'], to_s)\n    @expiration_time = @fetched['expirationTime']\n    @external_data_configuration = GoogleInSpec::BigQuery::Property::TableExternalDataConfiguration.new(@fetched['externalDataConfiguration'], to_s)\n    @dataset = @fetched['dataset']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Table #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'table_reference' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableTableReference.un_parse(x, 'table_reference') },\n      'clustering' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('clustering') { should include #{single.inspect} }\" } },\n      'creation_time' => ->(x, _) { x.nil? ? [] : [\"its('creation_time') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'friendly_name' => ->(x, _) { x.nil? ? [] : [\"its('friendly_name') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'last_modified_time' => ->(x, _) { x.nil? ? [] : [\"its('last_modified_time') { should cmp #{x.inspect} }\"] },\n      'location' => ->(x, _) { x.nil? ? [] : [\"its('location') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'num_bytes' => ->(x, _) { x.nil? ? [] : [\"its('num_bytes') { should cmp #{x.inspect} }\"] },\n      'num_long_term_bytes' => ->(x, _) { x.nil? ? [] : [\"its('num_long_term_bytes') { should cmp #{x.inspect} }\"] },\n      'num_rows' => ->(x, _) { x.nil? ? [] : [\"its('num_rows') { should cmp #{x.inspect} }\"] },\n      'require_partition_filter' => ->(x, _) { x.nil? ? [] : [\"its('require_partition_filter') { should cmp #{x.inspect} }\"] },\n      'type' => ->(x, _) { x.nil? ? [] : [\"its('type') { should cmp #{x.inspect} }\"] },\n      'view' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableView.un_parse(x, 'view') },\n      'time_partitioning' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableTimePartitioning.un_parse(x, 'time_partitioning') },\n      'streaming_buffer' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableStreamingBuffer.un_parse(x, 'streaming_buffer') },\n      'schema' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableSchema.un_parse(x, 'schema') },\n      'encryption_configuration' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableEncryptionConfiguration.un_parse(x, 'encryption_configuration') },\n      'expiration_time' => ->(x, _) { x.nil? ? [] : [\"its('expiration_time') { should cmp #{x.inspect} }\"] },\n      'external_data_configuration' => ->(x, _) { x.nil? ? [] : GoogleInSpec::BigQuery::Property::TableExternalDataConfiguration.un_parse(x, 'external_data_configuration') },\n      'dataset' => ->(x, _) { x.nil? ? [] : [\"its('dataset') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Table'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_bigquery_table',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{dataset}}/tables/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_bigquery_tables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigQueryTables < GcpResourceBase\n  name 'google_bigquery_tables'\n  desc 'Table plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:table_references, field: :table_reference)\n  filter_table_config.add(:clusterings, field: :clustering)\n  filter_table_config.add(:creation_times, field: :creation_time)\n  filter_table_config.add(:friendly_names, field: :friendly_name)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:last_modified_times, field: :last_modified_time)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:num_bytes, field: :num_bytes)\n  filter_table_config.add(:num_long_term_bytes, field: :num_long_term_bytes)\n  filter_table_config.add(:num_rows, field: :num_rows)\n  filter_table_config.add(:require_partition_filters, field: :require_partition_filter)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:views, field: :view)\n  filter_table_config.add(:time_partitionings, field: :time_partitioning)\n  filter_table_config.add(:streaming_buffers, field: :streaming_buffer)\n  filter_table_config.add(:schemas, field: :schema)\n  filter_table_config.add(:encryption_configurations, field: :encryption_configuration)\n  filter_table_config.add(:expiration_times, field: :expiration_time)\n  filter_table_config.add(:external_data_configurations, field: :external_data_configuration)\n  filter_table_config.add(:datasets, field: :dataset)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tables')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'tableReference' => ->(obj) { [:table_reference, GoogleInSpec::BigQuery::Property::TableTableReference.new(obj['tableReference'], to_s)] },\n      'clustering' => ->(obj) { [:clustering, obj['clustering']] },\n      'creationTime' => ->(obj) { [:creation_time, obj['creationTime']] },\n      'friendlyName' => ->(obj) { [:friendly_name, obj['friendlyName']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'lastModifiedTime' => ->(obj) { [:last_modified_time, obj['lastModifiedTime']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'numBytes' => ->(obj) { [:num_bytes, obj['numBytes']] },\n      'numLongTermBytes' => ->(obj) { [:num_long_term_bytes, obj['numLongTermBytes']] },\n      'numRows' => ->(obj) { [:num_rows, obj['numRows']] },\n      'requirePartitionFilter' => ->(obj) { [:require_partition_filter, obj['requirePartitionFilter']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'view' => ->(obj) { [:view, GoogleInSpec::BigQuery::Property::TableView.new(obj['view'], to_s)] },\n      'timePartitioning' => ->(obj) { [:time_partitioning, GoogleInSpec::BigQuery::Property::TableTimePartitioning.new(obj['timePartitioning'], to_s)] },\n      'streamingBuffer' => ->(obj) { [:streaming_buffer, GoogleInSpec::BigQuery::Property::TableStreamingBuffer.new(obj['streamingBuffer'], to_s)] },\n      'schema' => ->(obj) { [:schema, GoogleInSpec::BigQuery::Property::TableSchema.new(obj['schema'], to_s)] },\n      'encryptionConfiguration' => ->(obj) { [:encryption_configuration, GoogleInSpec::BigQuery::Property::TableEncryptionConfiguration.new(obj['encryptionConfiguration'], to_s)] },\n      'expirationTime' => ->(obj) { [:expiration_time, obj['expirationTime']] },\n      'externalDataConfiguration' => ->(obj) { [:external_data_configuration, GoogleInSpec::BigQuery::Property::TableExternalDataConfiguration.new(obj['externalDataConfiguration'], to_s)] },\n      'dataset' => ->(obj) { [:dataset, obj['dataset']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project dataset name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        if param == 'name'\n          item_identifiers[param.to_sym] = item[:table_reference].table_id\n        else\n          item_identifiers[param.to_sym] = combo[param.to_sym]\n        end\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{dataset}}/tables'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_cloudbuild_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/cloudbuild/property/trigger_build'\nrequire 'google/cloudbuild/property/trigger_build_steps'\nrequire 'google/cloudbuild/property/trigger_trigger_template'\n\n# A provider to manage Cloud Build resources.\nclass CloudBuildTrigger < GcpResourceBase\n  name 'google_cloudbuild_trigger'\n  desc 'Trigger'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :description\n  attr_reader :disabled\n  attr_reader :create_time\n  attr_reader :substitutions\n  attr_reader :filename\n  attr_reader :ignored_files\n  attr_reader :included_files\n  attr_reader :trigger_template\n  attr_reader :build\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @id = @fetched['id']\n    @description = @fetched['description']\n    @disabled = @fetched['disabled']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @substitutions = @fetched['substitutions']\n    @filename = @fetched['filename']\n    @ignored_files = @fetched['ignoredFiles']\n    @included_files = @fetched['includedFiles']\n    @trigger_template = GoogleInSpec::CloudBuild::Property::TriggerTriggerTemplate.new(@fetched['triggerTemplate'], to_s)\n    @build = GoogleInSpec::CloudBuild::Property::TriggerBuild.new(@fetched['build'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Trigger #{@params[:id]}\"\n  end\n\n  def un_parse\n    {\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'disabled' => ->(x, _) { x.nil? ? [] : [\"its('disabled') { should cmp #{x.inspect} }\"] },\n      'create_time' => ->(x, _) { x.nil? ? [] : [\"its('create_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'substitutions' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('substitutions') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'filename' => ->(x, _) { x.nil? ? [] : [\"its('filename') { should cmp #{x.inspect} }\"] },\n      'ignored_files' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('ignored_files') { should include #{single.inspect} }\" } },\n      'included_files' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('included_files') { should include #{single.inspect} }\" } },\n      'trigger_template' => ->(x, _) { x.nil? ? [] : GoogleInSpec::CloudBuild::Property::TriggerTriggerTemplate.un_parse(x, 'trigger_template') },\n      'build' => ->(x, _) { x.nil? ? [] : GoogleInSpec::CloudBuild::Property::TriggerBuild.un_parse(x, 'build') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Trigger'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_cloudbuild_trigger',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://cloudbuild.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/triggers/{{id}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_cloudbuild_triggers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass CloudBuildTriggers < GcpResourceBase\n  name 'google_cloudbuild_triggers'\n  desc 'Trigger plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:disableds, field: :disabled)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:substitutions, field: :substitutions)\n  filter_table_config.add(:filenames, field: :filename)\n  filter_table_config.add(:ignored_files, field: :ignored_files)\n  filter_table_config.add(:included_files, field: :included_files)\n  filter_table_config.add(:trigger_templates, field: :trigger_template)\n  filter_table_config.add(:builds, field: :build)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('triggers')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'substitutions' => ->(obj) { [:substitutions, obj['substitutions']] },\n      'filename' => ->(obj) { [:filename, obj['filename']] },\n      'ignoredFiles' => ->(obj) { [:ignored_files, obj['ignoredFiles']] },\n      'includedFiles' => ->(obj) { [:included_files, obj['includedFiles']] },\n      'triggerTemplate' => ->(obj) { [:trigger_template, GoogleInSpec::CloudBuild::Property::TriggerTriggerTemplate.new(obj['triggerTemplate'], to_s)] },\n      'build' => ->(obj) { [:build, GoogleInSpec::CloudBuild::Property::TriggerBuild.new(obj['build'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project id}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://cloudbuild.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/triggers'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_cloudfunctions_cloud_function.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/cloudfunctions/property/cloudfunction_event_trigger'\nrequire 'google/cloudfunctions/property/cloudfunction_https_trigger'\nrequire 'google/cloudfunctions/property/cloudfunction_source_repository'\n\n# A provider to manage Cloud Functions resources.\nclass CloudFunctionsCloudFunction < GcpResourceBase\n  name 'google_cloudfunctions_cloud_function'\n  desc 'CloudFunction'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :status\n  attr_reader :entry_point\n  attr_reader :runtime\n  attr_reader :timeout\n  attr_reader :available_memory_mb\n  attr_reader :service_account_email\n  attr_reader :update_time\n  attr_reader :version_id\n  attr_reader :labels\n  attr_reader :environment_variables\n  attr_reader :source_archive_url\n  attr_reader :source_upload_url\n  attr_reader :source_repository\n  attr_reader :https_trigger\n  attr_reader :event_trigger\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @status = @fetched['status']\n    @entry_point = @fetched['entryPoint']\n    @runtime = @fetched['runtime']\n    @timeout = @fetched['timeout']\n    @available_memory_mb = @fetched['availableMemoryMb']\n    @service_account_email = @fetched['serviceAccountEmail']\n    @update_time = @fetched['updateTime']\n    @version_id = @fetched['versionId']\n    @labels = @fetched['labels']\n    @environment_variables = @fetched['environmentVariables']\n    @source_archive_url = @fetched['sourceArchiveUrl']\n    @source_upload_url = @fetched['sourceUploadUrl']\n    @source_repository = GoogleInSpec::CloudFunctions::Property::CloudFunctionSourceRepository.new(@fetched['sourceRepository'], to_s)\n    @https_trigger = GoogleInSpec::CloudFunctions::Property::CloudFunctionHttpsTrigger.new(@fetched['httpsTrigger'], to_s)\n    @event_trigger = GoogleInSpec::CloudFunctions::Property::CloudFunctionEventTrigger.new(@fetched['eventTrigger'], to_s)\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CloudFunction #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'status' => ->(x, _) { x.nil? ? [] : [\"its('status') { should cmp #{x.inspect} }\"] },\n      'entry_point' => ->(x, _) { x.nil? ? [] : [\"its('entry_point') { should cmp #{x.inspect} }\"] },\n      'runtime' => ->(x, _) { x.nil? ? [] : [\"its('runtime') { should cmp #{x.inspect} }\"] },\n      'timeout' => ->(x, _) { x.nil? ? [] : [\"its('timeout') { should cmp #{x.inspect} }\"] },\n      'available_memory_mb' => ->(x, _) { x.nil? ? [] : [\"its('available_memory_mb') { should cmp #{x.inspect} }\"] },\n      'service_account_email' => ->(x, _) { x.nil? ? [] : [\"its('service_account_email') { should cmp #{x.inspect} }\"] },\n      'update_time' => ->(x, _) { x.nil? ? [] : [\"its('update_time') { should cmp #{x.inspect} }\"] },\n      'version_id' => ->(x, _) { x.nil? ? [] : [\"its('version_id') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'environment_variables' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('environment_variables') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'source_archive_url' => ->(x, _) { x.nil? ? [] : [\"its('source_archive_url') { should cmp #{x.inspect} }\"] },\n      'source_upload_url' => ->(x, _) { x.nil? ? [] : [\"its('source_upload_url') { should cmp #{x.inspect} }\"] },\n      'source_repository' => ->(x, _) { x.nil? ? [] : GoogleInSpec::CloudFunctions::Property::CloudFunctionSourceRepository.un_parse(x, 'source_repository') },\n      'https_trigger' => ->(x, _) { x.nil? ? [] : GoogleInSpec::CloudFunctions::Property::CloudFunctionHttpsTrigger.un_parse(x, 'https_trigger') },\n      'event_trigger' => ->(x, _) { x.nil? ? [] : GoogleInSpec::CloudFunctions::Property::CloudFunctionEventTrigger.un_parse(x, 'event_trigger') },\n      'location' => ->(x, _) { x.nil? ? [] : [\"its('location') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'CloudFunction'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_cloudfunctions_cloud_function',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://cloudfunctions.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/functions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_cloudfunctions_cloud_functions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass CloudFunctionsCloudFunctions < GcpResourceBase\n  name 'google_cloudfunctions_cloud_functions'\n  desc 'CloudFunction plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:entry_points, field: :entry_point)\n  filter_table_config.add(:runtimes, field: :runtime)\n  filter_table_config.add(:timeouts, field: :timeout)\n  filter_table_config.add(:available_memory_mbs, field: :available_memory_mb)\n  filter_table_config.add(:service_account_emails, field: :service_account_email)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:version_ids, field: :version_id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:environment_variables, field: :environment_variables)\n  filter_table_config.add(:source_archive_urls, field: :source_archive_url)\n  filter_table_config.add(:source_upload_urls, field: :source_upload_url)\n  filter_table_config.add(:source_repositories, field: :source_repository)\n  filter_table_config.add(:https_triggers, field: :https_trigger)\n  filter_table_config.add(:event_triggers, field: :event_trigger)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('functions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'entryPoint' => ->(obj) { [:entry_point, obj['entryPoint']] },\n      'runtime' => ->(obj) { [:runtime, obj['runtime']] },\n      'timeout' => ->(obj) { [:timeout, obj['timeout']] },\n      'availableMemoryMb' => ->(obj) { [:available_memory_mb, obj['availableMemoryMb']] },\n      'serviceAccountEmail' => ->(obj) { [:service_account_email, obj['serviceAccountEmail']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'versionId' => ->(obj) { [:version_id, obj['versionId']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'environmentVariables' => ->(obj) { [:environment_variables, obj['environmentVariables']] },\n      'sourceArchiveUrl' => ->(obj) { [:source_archive_url, obj['sourceArchiveUrl']] },\n      'sourceUploadUrl' => ->(obj) { [:source_upload_url, obj['sourceUploadUrl']] },\n      'sourceRepository' => ->(obj) { [:source_repository, GoogleInSpec::CloudFunctions::Property::CloudFunctionSourceRepository.new(obj['sourceRepository'], to_s)] },\n      'httpsTrigger' => ->(obj) { [:https_trigger, GoogleInSpec::CloudFunctions::Property::CloudFunctionHttpsTrigger.new(obj['httpsTrigger'], to_s)] },\n      'eventTrigger' => ->(obj) { [:event_trigger, GoogleInSpec::CloudFunctions::Property::CloudFunctionEventTrigger.new(obj['eventTrigger'], to_s)] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project location name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://cloudfunctions.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/functions'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_address.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeAddress < GcpResourceBase\n    name 'google_compute_address'\n    desc 'Verifies settings for a compute address'\n\n    example \"\n      describe google_compute_address(project: 'chef-inspec-gcp', location: 'us-west2', name: 'gcp-inspec-test') do\n        it { should exist }\n        its('name') { should eq 'inspec-test' }\n        its('status') { should eq 'in_use' }\n        ...\n      end\n    \"\n\n    supports platform: 'gcp'\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @address = @gcp.gcp_compute_client.get_address(opts[:project], opts[:location], opts[:name])\n        create_resource_methods(@address)\n      end\n    end\n\n    def address_ip_exists\n      !address.nil?\n    end\n\n    def exists?\n      !address.nil?\n    end\n\n    # How many users are there for the address\n    def user_count\n      users.count\n    end\n\n    # Return the first user resource base name\n    def user_resource_name\n      users.first.split('/').last\n    end\n\n    def to_s\n      \"Address #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_autoscaler.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/autoscaler_autoscaling_policy'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization'\n\n# A provider to manage Compute Engine resources.\nclass ComputeAutoscaler < GcpResourceBase\n  name 'google_compute_autoscaler'\n  desc 'Autoscaler'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :autoscaling_policy\n  attr_reader :target\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @autoscaling_policy = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicy.new(@fetched['autoscalingPolicy'], to_s)\n    @target = @fetched['target']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Autoscaler #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'autoscaling_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicy.un_parse(x, 'autoscaling_policy') },\n      'target' => ->(x, _) { x.nil? ? [] : [\"its('target') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Autoscaler'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_autoscaler',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/autoscalers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_autoscalers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeAutoscalers < GcpResourceBase\n  name 'google_compute_autoscalers'\n  desc 'Autoscaler plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:autoscaling_policies, field: :autoscaling_policy)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'autoscalingPolicy' => ->(obj) { [:autoscaling_policy, GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicy.new(obj['autoscalingPolicy'], to_s)] },\n      'target' => ->(obj) { [:target, obj['target']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/autoscalers'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_backend_bucket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/backendbucket_cdn_policy'\n\n# A provider to manage Compute Engine resources.\nclass ComputeBackendBucket < GcpResourceBase\n  name 'google_compute_backend_bucket'\n  desc 'BackendBucket'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bucket_name\n  attr_reader :cdn_policy\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :enable_cdn\n  attr_reader :id\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @bucket_name = @fetched['bucketName']\n    @cdn_policy = GoogleInSpec::Compute::Property::BackendBucketCdnPolicy.new(@fetched['cdnPolicy'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @enable_cdn = @fetched['enableCdn']\n    @id = @fetched['id']\n    @name = @fetched['name']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BackendBucket #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'bucket_name' => ->(x, _) { x.nil? ? [] : [\"its('bucket_name') { should cmp #{x.inspect} }\"] },\n      'cdn_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::BackendBucketCdnPolicy.un_parse(x, 'cdn_policy') },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'enable_cdn' => ->(x, _) { x.nil? ? [] : [\"its('enable_cdn') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'BackendBucket'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_backend_bucket',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendBuckets/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_backend_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeBackendBuckets < GcpResourceBase\n  name 'google_compute_backend_buckets'\n  desc 'BackendBucket plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:bucket_names, field: :bucket_name)\n  filter_table_config.add(:cdn_policies, field: :cdn_policy)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:enable_cdns, field: :enable_cdn)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'bucketName' => ->(obj) { [:bucket_name, obj['bucketName']] },\n      'cdnPolicy' => ->(obj) { [:cdn_policy, GoogleInSpec::Compute::Property::BackendBucketCdnPolicy.new(obj['cdnPolicy'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'enableCdn' => ->(obj) { [:enable_cdn, obj['enableCdn']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendBuckets'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_backend_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/backendservice_backends'\nrequire 'google/compute/property/backendservice_cdn_policy'\nrequire 'google/compute/property/backendservice_cdn_policy_cache_key_policy'\nrequire 'google/compute/property/backendservice_connection_draining'\nrequire 'google/compute/property/backendservice_iap'\n\n# A provider to manage Compute Engine resources.\nclass ComputeBackendService < GcpResourceBase\n  name 'google_compute_backend_service'\n  desc 'BackendService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :affinity_cookie_ttl_sec\n  attr_reader :backends\n  attr_reader :cdn_policy\n  attr_reader :connection_draining\n  attr_reader :creation_timestamp\n  attr_reader :fingerprint\n  attr_reader :description\n  attr_reader :enable_cdn\n  attr_reader :health_checks\n  attr_reader :id\n  attr_reader :iap\n  attr_reader :load_balancing_scheme\n  attr_reader :name\n  attr_reader :port_name\n  attr_reader :protocol\n  attr_reader :security_policy\n  attr_reader :session_affinity\n  attr_reader :timeout_sec\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @affinity_cookie_ttl_sec = @fetched['affinityCookieTtlSec']\n    @backends = GoogleInSpec::Compute::Property::BackendServiceBackendsArray.parse(@fetched['backends'], to_s)\n    @cdn_policy = GoogleInSpec::Compute::Property::BackendServiceCdnPolicy.new(@fetched['cdnPolicy'], to_s)\n    @connection_draining = GoogleInSpec::Compute::Property::BackendServiceConnectionDraining.new(@fetched['connectionDraining'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @fingerprint = @fetched['fingerprint']\n    @description = @fetched['description']\n    @enable_cdn = @fetched['enableCDN']\n    @health_checks = @fetched['healthChecks']\n    @id = @fetched['id']\n    @iap = GoogleInSpec::Compute::Property::BackendServiceIap.new(@fetched['iap'], to_s)\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @name = @fetched['name']\n    @port_name = @fetched['portName']\n    @protocol = @fetched['protocol']\n    @security_policy = @fetched['securityPolicy']\n    @session_affinity = @fetched['sessionAffinity']\n    @timeout_sec = @fetched['timeoutSec']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BackendService #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'affinity_cookie_ttl_sec' => ->(x, _) { x.nil? ? [] : [\"its('affinity_cookie_ttl_sec') { should cmp #{x.inspect} }\"] },\n      'backends' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('backends') { should include '#{single.to_json}' }\" } },\n      'cdn_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::BackendServiceCdnPolicy.un_parse(x, 'cdn_policy') },\n      'connection_draining' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::BackendServiceConnectionDraining.un_parse(x, 'connection_draining') },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('fingerprint') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'enable_cdn' => ->(x, _) { x.nil? ? [] : [\"its('enable_cdn') { should cmp #{x.inspect} }\"] },\n      'health_checks' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('health_checks') { should include #{single.inspect} }\" } },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'iap' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::BackendServiceIap.un_parse(x, 'iap') },\n      'load_balancing_scheme' => ->(x, _) { x.nil? ? [] : [\"its('load_balancing_scheme') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'port_name' => ->(x, _) { x.nil? ? [] : [\"its('port_name') { should cmp #{x.inspect} }\"] },\n      'protocol' => ->(x, _) { x.nil? ? [] : [\"its('protocol') { should cmp #{x.inspect} }\"] },\n      'security_policy' => ->(x, _) { x.nil? ? [] : [\"its('security_policy') { should cmp #{x.inspect} }\"] },\n      'session_affinity' => ->(x, _) { x.nil? ? [] : [\"its('session_affinity') { should cmp #{x.inspect} }\"] },\n      'timeout_sec' => ->(x, _) { x.nil? ? [] : [\"its('timeout_sec') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'BackendService'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_backend_service',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeBackendServices < GcpResourceBase\n  name 'google_compute_backend_services'\n  desc 'BackendService plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:affinity_cookie_ttl_secs, field: :affinity_cookie_ttl_sec)\n  filter_table_config.add(:backends, field: :backends)\n  filter_table_config.add(:cdn_policies, field: :cdn_policy)\n  filter_table_config.add(:connection_drainings, field: :connection_draining)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:enable_cdns, field: :enable_cdn)\n  filter_table_config.add(:health_checks, field: :health_checks)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:iaps, field: :iap)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:port_names, field: :port_name)\n  filter_table_config.add(:protocols, field: :protocol)\n  filter_table_config.add(:security_policies, field: :security_policy)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'affinityCookieTtlSec' => ->(obj) { [:affinity_cookie_ttl_sec, obj['affinityCookieTtlSec']] },\n      'backends' => ->(obj) { [:backends, GoogleInSpec::Compute::Property::BackendServiceBackendsArray.parse(obj['backends'], to_s)] },\n      'cdnPolicy' => ->(obj) { [:cdn_policy, GoogleInSpec::Compute::Property::BackendServiceCdnPolicy.new(obj['cdnPolicy'], to_s)] },\n      'connectionDraining' => ->(obj) { [:connection_draining, GoogleInSpec::Compute::Property::BackendServiceConnectionDraining.new(obj['connectionDraining'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'enableCDN' => ->(obj) { [:enable_cdn, obj['enableCDN']] },\n      'healthChecks' => ->(obj) { [:health_checks, obj['healthChecks']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'iap' => ->(obj) { [:iap, GoogleInSpec::Compute::Property::BackendServiceIap.new(obj['iap'], to_s)] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'portName' => ->(obj) { [:port_name, obj['portName']] },\n      'protocol' => ->(obj) { [:protocol, obj['protocol']] },\n      'securityPolicy' => ->(obj) { [:security_policy, obj['securityPolicy']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendServices'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_disk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/disk_disk_encryption_key'\nrequire 'google/compute/property/disk_source_image_encryption_key'\nrequire 'google/compute/property/disk_source_snapshot_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass ComputeDisk < GcpResourceBase\n  name 'google_compute_disk'\n  desc 'Disk'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :label_fingerprint\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :last_attach_timestamp\n  attr_reader :last_detach_timestamp\n  attr_reader :labels\n  attr_reader :licenses\n  attr_reader :name\n  attr_reader :size_gb\n  attr_reader :users\n  attr_reader :physical_block_size_bytes\n  attr_reader :type\n  attr_reader :source_image\n  attr_reader :zone\n  attr_reader :source_image_encryption_key\n  attr_reader :source_image_id\n  attr_reader :disk_encryption_key\n  attr_reader :source_snapshot\n  attr_reader :source_snapshot_encryption_key\n  attr_reader :source_snapshot_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @label_fingerprint = @fetched['labelFingerprint']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @last_attach_timestamp = parse_time_string(@fetched['lastAttachTimestamp'])\n    @last_detach_timestamp = parse_time_string(@fetched['lastDetachTimestamp'])\n    @labels = @fetched['labels']\n    @licenses = @fetched['licenses']\n    @name = @fetched['name']\n    @size_gb = @fetched['sizeGb']\n    @users = @fetched['users']\n    @physical_block_size_bytes = @fetched['physicalBlockSizeBytes']\n    @type = @fetched['type']\n    @source_image = @fetched['sourceImage']\n    @zone = @fetched['zone']\n    @source_image_encryption_key = GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(@fetched['sourceImageEncryptionKey'], to_s)\n    @source_image_id = @fetched['sourceImageId']\n    @disk_encryption_key = GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(@fetched['diskEncryptionKey'], to_s)\n    @source_snapshot = @fetched['sourceSnapshot']\n    @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(@fetched['sourceSnapshotEncryptionKey'], to_s)\n    @source_snapshot_id = @fetched['sourceSnapshotId']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Disk #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'label_fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('label_fingerprint') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'last_attach_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('last_attach_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'last_detach_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('last_detach_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'licenses' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('licenses') { should include #{single.inspect} }\" } },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'size_gb' => ->(x, _) { x.nil? ? [] : [\"its('size_gb') { should cmp #{x.inspect} }\"] },\n      'users' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('users') { should include #{single.inspect} }\" } },\n      'physical_block_size_bytes' => ->(x, _) { x.nil? ? [] : [\"its('physical_block_size_bytes') { should cmp #{x.inspect} }\"] },\n      'type' => ->(x, _) { x.nil? ? [] : [\"its('type') { should cmp #{x.inspect} }\"] },\n      'source_image' => ->(x, _) { x.nil? ? [] : [\"its('source_image') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n      'source_image_encryption_key' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.un_parse(x, 'source_image_encryption_key') },\n      'source_image_id' => ->(x, _) { x.nil? ? [] : [\"its('source_image_id') { should cmp #{x.inspect} }\"] },\n      'disk_encryption_key' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.un_parse(x, 'disk_encryption_key') },\n      'source_snapshot' => ->(x, _) { x.nil? ? [] : [\"its('source_snapshot') { should cmp #{x.inspect} }\"] },\n      'source_snapshot_encryption_key' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.un_parse(x, 'source_snapshot_encryption_key') },\n      'source_snapshot_id' => ->(x, _) { x.nil? ? [] : [\"its('source_snapshot_id') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Disk'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_disk',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/disks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeDisks < GcpResourceBase\n  name 'google_compute_disks'\n  desc 'Disk plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:last_attach_timestamps, field: :last_attach_timestamp)\n  filter_table_config.add(:last_detach_timestamps, field: :last_detach_timestamp)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:licenses, field: :licenses)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:size_gbs, field: :size_gb)\n  filter_table_config.add(:users, field: :users)\n  filter_table_config.add(:physical_block_size_bytes, field: :physical_block_size_bytes)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:source_images, field: :source_image)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:source_image_encryption_keys, field: :source_image_encryption_key)\n  filter_table_config.add(:source_image_ids, field: :source_image_id)\n  filter_table_config.add(:disk_encryption_keys, field: :disk_encryption_key)\n  filter_table_config.add(:source_snapshots, field: :source_snapshot)\n  filter_table_config.add(:source_snapshot_encryption_keys, field: :source_snapshot_encryption_key)\n  filter_table_config.add(:source_snapshot_ids, field: :source_snapshot_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'lastAttachTimestamp' => ->(obj) { [:last_attach_timestamp, parse_time_string(obj['lastAttachTimestamp'])] },\n      'lastDetachTimestamp' => ->(obj) { [:last_detach_timestamp, parse_time_string(obj['lastDetachTimestamp'])] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'licenses' => ->(obj) { [:licenses, obj['licenses']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'sizeGb' => ->(obj) { [:size_gb, obj['sizeGb']] },\n      'users' => ->(obj) { [:users, obj['users']] },\n      'physicalBlockSizeBytes' => ->(obj) { [:physical_block_size_bytes, obj['physicalBlockSizeBytes']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'sourceImage' => ->(obj) { [:source_image, obj['sourceImage']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'sourceImageEncryptionKey' => ->(obj) { [:source_image_encryption_key, GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(obj['sourceImageEncryptionKey'], to_s)] },\n      'sourceImageId' => ->(obj) { [:source_image_id, obj['sourceImageId']] },\n      'diskEncryptionKey' => ->(obj) { [:disk_encryption_key, GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(obj['diskEncryptionKey'], to_s)] },\n      'sourceSnapshot' => ->(obj) { [:source_snapshot, obj['sourceSnapshot']] },\n      'sourceSnapshotEncryptionKey' => ->(obj) { [:source_snapshot_encryption_key, GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(obj['sourceSnapshotEncryptionKey'], to_s)] },\n      'sourceSnapshotId' => ->(obj) { [:source_snapshot_id, obj['sourceSnapshotId']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/disks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_firewall.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/firewall_allowed'\nrequire 'google/compute/property/firewall_denied'\n\n# A provider to manage Compute Engine resources.\nclass ComputeFirewall < GcpResourceBase\n  name 'google_compute_firewall'\n  desc 'Firewall'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :allowed\n  attr_reader :creation_timestamp\n  attr_reader :denied\n  attr_reader :description\n  attr_reader :destination_ranges\n  attr_reader :direction\n  attr_reader :disabled\n  attr_reader :id\n  attr_reader :name\n  attr_reader :network\n  attr_reader :priority\n  attr_reader :source_ranges\n  attr_reader :source_service_accounts\n  attr_reader :source_tags\n  attr_reader :target_service_accounts\n  attr_reader :target_tags\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @allowed = GoogleInSpec::Compute::Property::FirewallAllowedArray.parse(@fetched['allowed'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @denied = GoogleInSpec::Compute::Property::FirewallDeniedArray.parse(@fetched['denied'], to_s)\n    @description = @fetched['description']\n    @destination_ranges = @fetched['destinationRanges']\n    @direction = @fetched['direction']\n    @disabled = @fetched['disabled']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @priority = @fetched['priority']\n    @source_ranges = @fetched['sourceRanges']\n    @source_service_accounts = @fetched['sourceServiceAccounts']\n    @source_tags = @fetched['sourceTags']\n    @target_service_accounts = @fetched['targetServiceAccounts']\n    @target_tags = @fetched['targetTags']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Firewall #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'allowed' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('allowed') { should include '#{single.to_json}' }\" } },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'denied' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('denied') { should include '#{single.to_json}' }\" } },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'destination_ranges' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('destination_ranges') { should include #{single.inspect} }\" } },\n      'direction' => ->(x, _) { x.nil? ? [] : [\"its('direction') { should cmp #{x.inspect} }\"] },\n      'disabled' => ->(x, _) { x.nil? ? [] : [\"its('disabled') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'priority' => ->(x, _) { x.nil? ? [] : [\"its('priority') { should cmp #{x.inspect} }\"] },\n      'source_ranges' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('source_ranges') { should include #{single.inspect} }\" } },\n      'source_service_accounts' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('source_service_accounts') { should include #{single.inspect} }\" } },\n      'source_tags' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('source_tags') { should include #{single.inspect} }\" } },\n      'target_service_accounts' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('target_service_accounts') { should include #{single.inspect} }\" } },\n      'target_tags' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('target_tags') { should include #{single.inspect} }\" } },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Firewall'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_firewall',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewalls/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_firewalls.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeFirewalls < GcpResourceBase\n  name 'google_compute_firewalls'\n  desc 'Firewall plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:alloweds, field: :allowed)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:denieds, field: :denied)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:destination_ranges, field: :destination_ranges)\n  filter_table_config.add(:directions, field: :direction)\n  filter_table_config.add(:disableds, field: :disabled)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:source_ranges, field: :source_ranges)\n  filter_table_config.add(:source_service_accounts, field: :source_service_accounts)\n  filter_table_config.add(:source_tags, field: :source_tags)\n  filter_table_config.add(:target_service_accounts, field: :target_service_accounts)\n  filter_table_config.add(:target_tags, field: :target_tags)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'allowed' => ->(obj) { [:allowed, GoogleInSpec::Compute::Property::FirewallAllowedArray.parse(obj['allowed'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'denied' => ->(obj) { [:denied, GoogleInSpec::Compute::Property::FirewallDeniedArray.parse(obj['denied'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'destinationRanges' => ->(obj) { [:destination_ranges, obj['destinationRanges']] },\n      'direction' => ->(obj) { [:direction, obj['direction']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'sourceRanges' => ->(obj) { [:source_ranges, obj['sourceRanges']] },\n      'sourceServiceAccounts' => ->(obj) { [:source_service_accounts, obj['sourceServiceAccounts']] },\n      'sourceTags' => ->(obj) { [:source_tags, obj['sourceTags']] },\n      'targetServiceAccounts' => ->(obj) { [:target_service_accounts, obj['targetServiceAccounts']] },\n      'targetTags' => ->(obj) { [:target_tags, obj['targetTags']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewalls'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_forwarding_rule.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeForwardingRule < GcpResourceBase\n    name 'google_compute_forwarding_rule'\n    desc 'Verifies settings for a compute forwarding_rule'\n\n    example \"\n      describe google_compute_forwarding_rule(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-forwarding-rule') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @forwarding_rule = @gcp.gcp_compute_client.get_forwarding_rule(opts[:project], opts[:region], opts[:name])\n        create_resource_methods(@forwarding_rule)\n      end\n    end\n\n    def creation_timestamp_date\n      return false if !defined?(creation_timestamp) || creation_timestamp.nil?\n      Time.parse(creation_timestamp.to_s)\n    end\n\n    def exists?\n      !@forwarding_rule.nil?\n    end\n\n    def to_s\n      \"ForwardingRule #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_forwarding_rules.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeForwardingRules < GcpResourceBase\n    name 'google_compute_forwarding_rules'\n    desc 'Verifies settings for GCP compute forwarding_rules in bulk'\n\n    example \"\n      describe google_compute_forwarding_rules(project: 'chef-inspec-gcp', region: 'europe-west1') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      @project = opts[:project]\n      @region = opts[:region]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:forwarding_rule_ids, field: :forwarding_rule_id)\n    filter_table_config.add(:forwarding_rule_names, field: :forwarding_rule_name)\n    filter_table_config.add(:forwarding_rule_networks, field: :forwarding_rule_network)\n    filter_table_config.add(:forwarding_rule_load_balancing_schemes, field: :forwarding_rule_load_balancing_scheme)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      forwarding_rule_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @forwarding_rules = @gcp.gcp_compute_client.list_forwarding_rules(@project, @region, page_token: next_page)\n        end\n        return [] if !@forwarding_rules || !@forwarding_rules.items\n        @forwarding_rules.items.map do |forwarding_rule|\n          forwarding_rule_network = forwarding_rule.network.split('/').last if !forwarding_rule.network.nil?\n          forwarding_rule_rows+=[{ forwarding_rule_id: forwarding_rule.id,\n                        forwarding_rule_name: forwarding_rule.name,\n                        forwarding_rule_network: forwarding_rule_network,\n                        forwarding_rule_load_balancing_scheme: forwarding_rule.load_balancing_scheme }]\n        end\n        next_page = @forwarding_rules.next_page_token\n        break unless next_page\n      end\n      @table = forwarding_rule_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_global_address.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalAddress < GcpResourceBase\n  name 'google_compute_global_address'\n  desc 'GlobalAddress'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :address\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :ip_version\n  attr_reader :region\n  attr_reader :prefix_length\n  attr_reader :address_type\n  attr_reader :purpose\n  attr_reader :network\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @address = @fetched['address']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @ip_version = @fetched['ipVersion']\n    @region = @fetched['region']\n    @prefix_length = @fetched['prefixLength']\n    @address_type = @fetched['addressType']\n    @purpose = @fetched['purpose']\n    @network = @fetched['network']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalAddress #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'address' => ->(x, _) { x.nil? ? [] : [\"its('address') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'ip_version' => ->(x, _) { x.nil? ? [] : [\"its('ip_version') { should cmp #{x.inspect} }\"] },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n      'prefix_length' => ->(x, _) { x.nil? ? [] : [\"its('prefix_length') { should cmp #{x.inspect} }\"] },\n      'address_type' => ->(x, _) { x.nil? ? [] : [\"its('address_type') { should cmp #{x.inspect} }\"] },\n      'purpose' => ->(x, _) { x.nil? ? [] : [\"its('purpose') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'GlobalAddress'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_global_address',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/addresses/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_global_addresses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalAddresss < GcpResourceBase\n  name 'google_compute_global_addresses'\n  desc 'GlobalAddress plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:addresses, field: :address)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ip_versions, field: :ip_version)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:prefix_lengths, field: :prefix_length)\n  filter_table_config.add(:address_types, field: :address_type)\n  filter_table_config.add(:purposes, field: :purpose)\n  filter_table_config.add(:networks, field: :network)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'address' => ->(obj) { [:address, obj['address']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'ipVersion' => ->(obj) { [:ip_version, obj['ipVersion']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'prefixLength' => ->(obj) { [:prefix_length, obj['prefixLength']] },\n      'addressType' => ->(obj) { [:address_type, obj['addressType']] },\n      'purpose' => ->(obj) { [:purpose, obj['purpose']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/addresses'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_global_forwarding_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/globalforwardingrule_metadata_filters'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalForwardingRule < GcpResourceBase\n  name 'google_compute_global_forwarding_rule'\n  desc 'GlobalForwardingRule'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :ip_address\n  attr_reader :ip_protocol\n  attr_reader :ip_version\n  attr_reader :load_balancing_scheme\n  attr_reader :metadata_filters\n  attr_reader :name\n  attr_reader :network\n  attr_reader :port_range\n  attr_reader :target\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @ip_address = @fetched['IPAddress']\n    @ip_protocol = @fetched['IPProtocol']\n    @ip_version = @fetched['ipVersion']\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @metadata_filters = GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersArray.parse(@fetched['metadataFilters'], to_s)\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @port_range = @fetched['portRange']\n    @target = @fetched['target']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalForwardingRule #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'ip_address' => ->(x, _) { x.nil? ? [] : [\"its('ip_address') { should cmp #{x.inspect} }\"] },\n      'ip_protocol' => ->(x, _) { x.nil? ? [] : [\"its('ip_protocol') { should cmp #{x.inspect} }\"] },\n      'ip_version' => ->(x, _) { x.nil? ? [] : [\"its('ip_version') { should cmp #{x.inspect} }\"] },\n      'load_balancing_scheme' => ->(x, _) { x.nil? ? [] : [\"its('load_balancing_scheme') { should cmp #{x.inspect} }\"] },\n      'metadata_filters' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('metadata_filters') { should include '#{single.to_json}' }\" } },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'port_range' => ->(x, _) { x.nil? ? [] : [\"its('port_range') { should cmp #{x.inspect} }\"] },\n      'target' => ->(x, _) { x.nil? ? [] : [\"its('target') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'GlobalForwardingRule'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_global_forwarding_rule',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/forwardingRules/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_global_forwarding_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalForwardingRules < GcpResourceBase\n  name 'google_compute_global_forwarding_rules'\n  desc 'GlobalForwardingRule plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:ip_addresses, field: :ip_address)\n  filter_table_config.add(:ip_protocols, field: :ip_protocol)\n  filter_table_config.add(:ip_versions, field: :ip_version)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n  filter_table_config.add(:metadata_filters, field: :metadata_filters)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:port_ranges, field: :port_range)\n  filter_table_config.add(:targets, field: :target)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'IPAddress' => ->(obj) { [:ip_address, obj['IPAddress']] },\n      'IPProtocol' => ->(obj) { [:ip_protocol, obj['IPProtocol']] },\n      'ipVersion' => ->(obj) { [:ip_version, obj['ipVersion']] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n      'metadataFilters' => ->(obj) { [:metadata_filters, GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersArray.parse(obj['metadataFilters'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'portRange' => ->(obj) { [:port_range, obj['portRange']] },\n      'target' => ->(obj) { [:target, obj['target']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/forwardingRules'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/healthcheck_http2_health_check'\nrequire 'google/compute/property/healthcheck_http_health_check'\nrequire 'google/compute/property/healthcheck_https_health_check'\nrequire 'google/compute/property/healthcheck_ssl_health_check'\nrequire 'google/compute/property/healthcheck_tcp_health_check'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHealthCheck < GcpResourceBase\n  name 'google_compute_health_check'\n  desc 'HealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :id\n  attr_reader :name\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n  attr_reader :type\n  attr_reader :http_health_check\n  attr_reader :https_health_check\n  attr_reader :tcp_health_check\n  attr_reader :ssl_health_check\n  attr_reader :http2_health_check\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n    @type = @fetched['type']\n    @http_health_check = GoogleInSpec::Compute::Property::HealthCheckHttpHealthCheck.new(@fetched['httpHealthCheck'], to_s)\n    @https_health_check = GoogleInSpec::Compute::Property::HealthCheckHttpsHealthCheck.new(@fetched['httpsHealthCheck'], to_s)\n    @tcp_health_check = GoogleInSpec::Compute::Property::HealthCheckTcpHealthCheck.new(@fetched['tcpHealthCheck'], to_s)\n    @ssl_health_check = GoogleInSpec::Compute::Property::HealthCheckSslHealthCheck.new(@fetched['sslHealthCheck'], to_s)\n    @http2_health_check = GoogleInSpec::Compute::Property::HealthCheckHttp2HealthCheck.new(@fetched['http2HealthCheck'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HealthCheck #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'check_interval_sec' => ->(x, _) { x.nil? ? [] : [\"its('check_interval_sec') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'healthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('healthy_threshold') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'timeout_sec' => ->(x, _) { x.nil? ? [] : [\"its('timeout_sec') { should cmp #{x.inspect} }\"] },\n      'unhealthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('unhealthy_threshold') { should cmp #{x.inspect} }\"] },\n      'type' => ->(x, _) { x.nil? ? [] : [\"its('type') { should cmp #{x.inspect} }\"] },\n      'http_health_check' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::HealthCheckHttpHealthCheck.un_parse(x, 'http_health_check') },\n      'https_health_check' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::HealthCheckHttpsHealthCheck.un_parse(x, 'https_health_check') },\n      'tcp_health_check' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::HealthCheckTcpHealthCheck.un_parse(x, 'tcp_health_check') },\n      'ssl_health_check' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::HealthCheckSslHealthCheck.un_parse(x, 'ssl_health_check') },\n      'http2_health_check' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::HealthCheckHttp2HealthCheck.un_parse(x, 'http2_health_check') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'HealthCheck'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_health_check',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/healthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHealthChecks < GcpResourceBase\n  name 'google_compute_health_checks'\n  desc 'HealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:http_health_checks, field: :http_health_check)\n  filter_table_config.add(:https_health_checks, field: :https_health_check)\n  filter_table_config.add(:tcp_health_checks, field: :tcp_health_check)\n  filter_table_config.add(:ssl_health_checks, field: :ssl_health_check)\n  filter_table_config.add(:http2_health_checks, field: :http2_health_check)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'httpHealthCheck' => ->(obj) { [:http_health_check, GoogleInSpec::Compute::Property::HealthCheckHttpHealthCheck.new(obj['httpHealthCheck'], to_s)] },\n      'httpsHealthCheck' => ->(obj) { [:https_health_check, GoogleInSpec::Compute::Property::HealthCheckHttpsHealthCheck.new(obj['httpsHealthCheck'], to_s)] },\n      'tcpHealthCheck' => ->(obj) { [:tcp_health_check, GoogleInSpec::Compute::Property::HealthCheckTcpHealthCheck.new(obj['tcpHealthCheck'], to_s)] },\n      'sslHealthCheck' => ->(obj) { [:ssl_health_check, GoogleInSpec::Compute::Property::HealthCheckSslHealthCheck.new(obj['sslHealthCheck'], to_s)] },\n      'http2HealthCheck' => ->(obj) { [:http2_health_check, GoogleInSpec::Compute::Property::HealthCheckHttp2HealthCheck.new(obj['http2HealthCheck'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/healthChecks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_http_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHttpHealthCheck < GcpResourceBase\n  name 'google_compute_http_health_check'\n  desc 'HttpHealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :host\n  attr_reader :id\n  attr_reader :name\n  attr_reader :port\n  attr_reader :request_path\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @host = @fetched['host']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @port = @fetched['port']\n    @request_path = @fetched['requestPath']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HttpHealthCheck #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'check_interval_sec' => ->(x, _) { x.nil? ? [] : [\"its('check_interval_sec') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'healthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('healthy_threshold') { should cmp #{x.inspect} }\"] },\n      'host' => ->(x, _) { x.nil? ? [] : [\"its('host') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'port' => ->(x, _) { x.nil? ? [] : [\"its('port') { should cmp #{x.inspect} }\"] },\n      'request_path' => ->(x, _) { x.nil? ? [] : [\"its('request_path') { should cmp #{x.inspect} }\"] },\n      'timeout_sec' => ->(x, _) { x.nil? ? [] : [\"its('timeout_sec') { should cmp #{x.inspect} }\"] },\n      'unhealthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('unhealthy_threshold') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'HttpHealthCheck'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_http_health_check',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpHealthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_http_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHttpHealthChecks < GcpResourceBase\n  name 'google_compute_http_health_checks'\n  desc 'HttpHealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:request_paths, field: :request_path)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'requestPath' => ->(obj) { [:request_path, obj['requestPath']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpHealthChecks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_https_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHttpsHealthCheck < GcpResourceBase\n  name 'google_compute_https_health_check'\n  desc 'HttpsHealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :host\n  attr_reader :id\n  attr_reader :name\n  attr_reader :port\n  attr_reader :request_path\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @host = @fetched['host']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @port = @fetched['port']\n    @request_path = @fetched['requestPath']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HttpsHealthCheck #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'check_interval_sec' => ->(x, _) { x.nil? ? [] : [\"its('check_interval_sec') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'healthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('healthy_threshold') { should cmp #{x.inspect} }\"] },\n      'host' => ->(x, _) { x.nil? ? [] : [\"its('host') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'port' => ->(x, _) { x.nil? ? [] : [\"its('port') { should cmp #{x.inspect} }\"] },\n      'request_path' => ->(x, _) { x.nil? ? [] : [\"its('request_path') { should cmp #{x.inspect} }\"] },\n      'timeout_sec' => ->(x, _) { x.nil? ? [] : [\"its('timeout_sec') { should cmp #{x.inspect} }\"] },\n      'unhealthy_threshold' => ->(x, _) { x.nil? ? [] : [\"its('unhealthy_threshold') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'HttpsHealthCheck'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_https_health_check',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpsHealthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_https_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHttpsHealthChecks < GcpResourceBase\n  name 'google_compute_https_health_checks'\n  desc 'HttpsHealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:request_paths, field: :request_path)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'requestPath' => ->(obj) { [:request_path, obj['requestPath']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpsHealthChecks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_image.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeImage < GcpResourceBase\n    name 'google_compute_image'\n    desc 'Verifies settings for an image'\n\n    example \"\n      describe google_compute_image(project: 'chef-inspec-gcp', name: 'image-1') do\n        it { should exist }\n        its('name') { should eq 'image-1' }\n        its('source_type') { should eq 'RAW' }\n        its('family') { should eq 'inspec-test-family' }\n        its('status') { should eq 'ready' }\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      # there's a little extra complication here because we might want to retrieve a project custom image, or\n      # the latest image that is part of an image family\n      begin\n        @image = @gcp.gcp_compute_client.get_image(opts[:project], opts[:name])\n        create_resource_methods(@image)\n      rescue Google::Apis::ClientError\n        # if the above is not successful try to get the image from an image family before giving up\n        # Note: this will swallow the previous exception but allows to preserve parity with the single\n        # google_compute_image tf resource\n        catch_gcp_errors do\n          @image = @gcp.gcp_compute_client.get_image_from_family(opts[:project], opts[:name])\n          create_resource_methods(@image)\n        end\n      end\n    end\n\n    def exists?\n      !@image.nil?\n    end\n\n    def to_s\n      \"Image #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instance_disks'\nrequire 'google/compute/property/instance_guest_accelerators'\nrequire 'google/compute/property/instance_network_interfaces'\nrequire 'google/compute/property/instance_scheduling'\nrequire 'google/compute/property/instance_service_accounts'\nrequire 'google/compute/property/instance_shielded_instance_config'\nrequire 'google/compute/property/instance_tags'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstance < GcpResourceBase\n  name 'google_compute_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :can_ip_forward\n  attr_reader :cpu_platform\n  attr_reader :creation_timestamp\n  attr_reader :deletion_protection\n  attr_reader :disks\n  attr_reader :guest_accelerators\n  attr_reader :hostname\n  attr_reader :id\n  attr_reader :label_fingerprint\n  attr_reader :labels\n  attr_reader :metadata\n  attr_reader :machine_type\n  attr_reader :min_cpu_platform\n  attr_reader :name\n  attr_reader :network_interfaces\n  attr_reader :scheduling\n  attr_reader :service_accounts\n  attr_reader :shielded_instance_config\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :tags\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @can_ip_forward = @fetched['canIpForward']\n    @cpu_platform = @fetched['cpuPlatform']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @deletion_protection = @fetched['deletionProtection']\n    @disks = GoogleInSpec::Compute::Property::InstanceDisksArray.parse(@fetched['disks'], to_s)\n    @guest_accelerators = GoogleInSpec::Compute::Property::InstanceGuestAcceleratorsArray.parse(@fetched['guestAccelerators'], to_s)\n    @hostname = @fetched['hostname']\n    @id = @fetched['id']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @labels = @fetched['labels']\n    @metadata = @fetched['metadata']\n    @machine_type = @fetched['machineType']\n    @min_cpu_platform = @fetched['minCpuPlatform']\n    @name = @fetched['name']\n    @network_interfaces = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesArray.parse(@fetched['networkInterfaces'], to_s)\n    @scheduling = GoogleInSpec::Compute::Property::InstanceScheduling.new(@fetched['scheduling'], to_s)\n    @service_accounts = GoogleInSpec::Compute::Property::InstanceServiceAccountsArray.parse(@fetched['serviceAccounts'], to_s)\n    @shielded_instance_config = GoogleInSpec::Compute::Property::InstanceShieldedInstanceConfig.new(@fetched['shieldedInstanceConfig'], to_s)\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @tags = GoogleInSpec::Compute::Property::InstanceTags.new(@fetched['tags'], to_s)\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'can_ip_forward' => ->(x, _) { x.nil? ? [] : [\"its('can_ip_forward') { should cmp #{x.inspect} }\"] },\n      'cpu_platform' => ->(x, _) { x.nil? ? [] : [\"its('cpu_platform') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp') { should cmp #{x.inspect} }\"] },\n      'deletion_protection' => ->(x, _) { x.nil? ? [] : [\"its('deletion_protection') { should cmp #{x.inspect} }\"] },\n      'disks' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('disks') { should include '#{single.to_json}' }\" } },\n      'guest_accelerators' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('guest_accelerators') { should include '#{single.to_json}' }\" } },\n      'hostname' => ->(x, _) { x.nil? ? [] : [\"its('hostname') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'label_fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('label_fingerprint') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'metadata' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('metadata') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'machine_type' => ->(x, _) { x.nil? ? [] : [\"its('machine_type') { should cmp #{x.inspect} }\"] },\n      'min_cpu_platform' => ->(x, _) { x.nil? ? [] : [\"its('min_cpu_platform') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'network_interfaces' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('network_interfaces') { should include '#{single.to_json}' }\" } },\n      'scheduling' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceScheduling.un_parse(x, 'scheduling') },\n      'service_accounts' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('service_accounts') { should include '#{single.to_json}' }\" } },\n      'shielded_instance_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceShieldedInstanceConfig.un_parse(x, 'shielded_instance_config') },\n      'status' => ->(x, _) { x.nil? ? [] : [\"its('status') { should cmp #{x.inspect} }\"] },\n      'status_message' => ->(x, _) { x.nil? ? [] : [\"its('status_message') { should cmp #{x.inspect} }\"] },\n      'tags' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTags.un_parse(x, 'tags') },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Instance'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_instance',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_group.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeInstanceGroup < GcpResourceBase\n    name 'google_compute_instance_group'\n    desc 'Verifies settings for a compute instance group'\n\n    example \"\n      describe google_compute_instance_group(project: 'chef-inspec-gcp', zone: 'europe-west2-a', name: 'gcp-inspec-test') do\n        it { should exist }\n        its('name') { should eq 'inspec-test' }\n        its('status') { should eq 'in_use' }\n        ...\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @instance_group = @gcp.gcp_compute_client.get_instance_group(opts[:project], opts[:zone], opts[:name])\n        create_resource_methods(@instance_group)\n      end\n    end\n\n    def port_name\n      find_named_ports(:name)\n    end\n    RSpec::Matchers.alias_matcher :has_port_name, :be_allow_port_name\n\n    def port_value\n      find_named_ports(:port)\n    end\n    RSpec::Matchers.alias_matcher :has_port_value, :be_allow_port_value\n\n    def find_named_ports(key = :name)\n      # check all name/port values for a match\n      return false if !defined?(named_ports) || named_ports.nil?\n      named_ports.each do |named_port|\n        next if !defined?(named_port.item[key]) || named_port.item[key].nil?\n        return named_port.item[key]\n      end\n      false\n    end\n\n    def exists?\n      !@instance_group.nil?\n    end\n\n    def to_s\n      \"Instance Group #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_group_manager.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instancegroupmanager_current_actions'\nrequire 'google/compute/property/instancegroupmanager_named_ports'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstanceGroupManager < GcpResourceBase\n  name 'google_compute_instance_group_manager'\n  desc 'InstanceGroupManager'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :base_instance_name\n  attr_reader :creation_timestamp\n  attr_reader :current_actions\n  attr_reader :description\n  attr_reader :id\n  attr_reader :instance_group\n  attr_reader :instance_template\n  attr_reader :name\n  attr_reader :named_ports\n  attr_reader :region\n  attr_reader :target_pools\n  attr_reader :target_size\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @base_instance_name = @fetched['baseInstanceName']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @current_actions = GoogleInSpec::Compute::Property::InstanceGroupManagerCurrentActions.new(@fetched['currentActions'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @instance_group = @fetched['instanceGroup']\n    @instance_template = @fetched['instanceTemplate']\n    @name = @fetched['name']\n    @named_ports = GoogleInSpec::Compute::Property::InstanceGroupManagerNamedPortsArray.parse(@fetched['namedPorts'], to_s)\n    @region = @fetched['region']\n    @target_pools = @fetched['targetPools']\n    @target_size = @fetched['targetSize']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceGroupManager #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'base_instance_name' => ->(x, _) { x.nil? ? [] : [\"its('base_instance_name') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'current_actions' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceGroupManagerCurrentActions.un_parse(x, 'current_actions') },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'instance_group' => ->(x, _) { x.nil? ? [] : [\"its('instance_group') { should cmp #{x.inspect} }\"] },\n      'instance_template' => ->(x, _) { x.nil? ? [] : [\"its('instance_template') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'named_ports' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('named_ports') { should include '#{single.to_json}' }\" } },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n      'target_pools' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('target_pools') { should include #{single.inspect} }\" } },\n      'target_size' => ->(x, _) { x.nil? ? [] : [\"its('target_size') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'InstanceGroupManager'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_instance_group_manager',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_group_managers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstanceGroupManagers < GcpResourceBase\n  name 'google_compute_instance_group_managers'\n  desc 'InstanceGroupManager plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:base_instance_names, field: :base_instance_name)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:current_actions, field: :current_actions)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:instance_groups, field: :instance_group)\n  filter_table_config.add(:instance_templates, field: :instance_template)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:named_ports, field: :named_ports)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:target_pools, field: :target_pools)\n  filter_table_config.add(:target_sizes, field: :target_size)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'baseInstanceName' => ->(obj) { [:base_instance_name, obj['baseInstanceName']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'currentActions' => ->(obj) { [:current_actions, GoogleInSpec::Compute::Property::InstanceGroupManagerCurrentActions.new(obj['currentActions'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'instanceGroup' => ->(obj) { [:instance_group, obj['instanceGroup']] },\n      'instanceTemplate' => ->(obj) { [:instance_template, obj['instanceTemplate']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'namedPorts' => ->(obj) { [:named_ports, GoogleInSpec::Compute::Property::InstanceGroupManagerNamedPortsArray.parse(obj['namedPorts'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'targetPools' => ->(obj) { [:target_pools, obj['targetPools']] },\n      'targetSize' => ->(obj) { [:target_size, obj['targetSize']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroupManagers'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_groups.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeInstanceGroups < GcpResourceBase\n    name 'google_compute_instance_groups'\n    desc 'Verifies settings for GCP compute instance_groups in bulk'\n\n    example \"\n      describe google_compute_instance_groups(project: 'chef-inspec-gcp', zone: 'europe-west2-a') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @zone = opts[:zone]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:instance_group_ids, field: :instance_group_id)\n    filter_table_config.add(:instance_group_names, field: :instance_group_name)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      instance_group_rows = []\n      catch_gcp_errors do\n        @instance_groups = @gcp.gcp_compute_client.list_instance_groups(@project, @zone)\n      end\n      return [] if !@instance_groups || !@instance_groups.items\n      @instance_groups.items.map do |instance_group|\n        instance_group_rows+=[{ instance_group_id: instance_group.id,\n                                instance_group_name: instance_group.name }]\n      end\n      @table = instance_group_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instancetemplate_properties'\nrequire 'google/compute/property/instancetemplate_properties_disks'\nrequire 'google/compute/property/instancetemplate_properties_guest_accelerators'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces'\nrequire 'google/compute/property/instancetemplate_properties_scheduling'\nrequire 'google/compute/property/instancetemplate_properties_service_accounts'\nrequire 'google/compute/property/instancetemplate_properties_tags'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstanceTemplate < GcpResourceBase\n  name 'google_compute_instance_template'\n  desc 'InstanceTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :properties\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @properties = GoogleInSpec::Compute::Property::InstanceTemplateProperties.new(@fetched['properties'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceTemplate #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'properties' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::InstanceTemplateProperties.un_parse(x, 'properties') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'InstanceTemplate'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_instance_template',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/instanceTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instance_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstanceTemplates < GcpResourceBase\n  name 'google_compute_instance_templates'\n  desc 'InstanceTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:properties, field: :properties)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'properties' => ->(obj) { [:properties, GoogleInSpec::Compute::Property::InstanceTemplateProperties.new(obj['properties'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/instanceTemplates'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstances < GcpResourceBase\n  name 'google_compute_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:can_ip_forwards, field: :can_ip_forward)\n  filter_table_config.add(:cpu_platforms, field: :cpu_platform)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deletion_protections, field: :deletion_protection)\n  filter_table_config.add(:disks, field: :disks)\n  filter_table_config.add(:guest_accelerators, field: :guest_accelerators)\n  filter_table_config.add(:hostnames, field: :hostname)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:machine_types, field: :machine_type)\n  filter_table_config.add(:min_cpu_platforms, field: :min_cpu_platform)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:network_interfaces, field: :network_interfaces)\n  filter_table_config.add(:schedulings, field: :scheduling)\n  filter_table_config.add(:service_accounts, field: :service_accounts)\n  filter_table_config.add(:shielded_instance_configs, field: :shielded_instance_config)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:tags, field: :tags)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'canIpForward' => ->(obj) { [:can_ip_forward, obj['canIpForward']] },\n      'cpuPlatform' => ->(obj) { [:cpu_platform, obj['cpuPlatform']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'deletionProtection' => ->(obj) { [:deletion_protection, obj['deletionProtection']] },\n      'disks' => ->(obj) { [:disks, GoogleInSpec::Compute::Property::InstanceDisksArray.parse(obj['disks'], to_s)] },\n      'guestAccelerators' => ->(obj) { [:guest_accelerators, GoogleInSpec::Compute::Property::InstanceGuestAcceleratorsArray.parse(obj['guestAccelerators'], to_s)] },\n      'hostname' => ->(obj) { [:hostname, obj['hostname']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'machineType' => ->(obj) { [:machine_type, obj['machineType']] },\n      'minCpuPlatform' => ->(obj) { [:min_cpu_platform, obj['minCpuPlatform']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'networkInterfaces' => ->(obj) { [:network_interfaces, GoogleInSpec::Compute::Property::InstanceNetworkInterfacesArray.parse(obj['networkInterfaces'], to_s)] },\n      'scheduling' => ->(obj) { [:scheduling, GoogleInSpec::Compute::Property::InstanceScheduling.new(obj['scheduling'], to_s)] },\n      'serviceAccounts' => ->(obj) { [:service_accounts, GoogleInSpec::Compute::Property::InstanceServiceAccountsArray.parse(obj['serviceAccounts'], to_s)] },\n      'shieldedInstanceConfig' => ->(obj) { [:shielded_instance_config, GoogleInSpec::Compute::Property::InstanceShieldedInstanceConfig.new(obj['shieldedInstanceConfig'], to_s)] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'tags' => ->(obj) { [:tags, GoogleInSpec::Compute::Property::InstanceTags.new(obj['tags'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instances'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_network.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/network_routing_config'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetwork < GcpResourceBase\n  name 'google_compute_network'\n  desc 'Network'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :gateway_ipv4\n  attr_reader :id\n  attr_reader :name\n  attr_reader :subnetworks\n  attr_reader :auto_create_subnetworks\n  attr_reader :creation_timestamp\n  attr_reader :routing_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @description = @fetched['description']\n    @gateway_ipv4 = @fetched['gatewayIPv4']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @subnetworks = @fetched['subnetworks']\n    @auto_create_subnetworks = @fetched['autoCreateSubnetworks']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @routing_config = GoogleInSpec::Compute::Property::NetworkRoutingConfig.new(@fetched['routingConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Network #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'gateway_ipv4' => ->(x, _) { x.nil? ? [] : [\"its('gateway_ipv4') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'subnetworks' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('subnetworks') { should include #{single.inspect} }\" } },\n      'auto_create_subnetworks' => ->(x, _) { x.nil? ? [] : [\"its('auto_create_subnetworks') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'routing_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::NetworkRoutingConfig.un_parse(x, 'routing_config') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Network'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_network',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_network_endpoint_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetworkEndpointGroup < GcpResourceBase\n  name 'google_compute_network_endpoint_group'\n  desc 'NetworkEndpointGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network_endpoint_type\n  attr_reader :size\n  attr_reader :network\n  attr_reader :subnetwork\n  attr_reader :default_port\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network_endpoint_type = @fetched['networkEndpointType']\n    @size = @fetched['size']\n    @network = @fetched['network']\n    @subnetwork = @fetched['subnetwork']\n    @default_port = @fetched['defaultPort']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NetworkEndpointGroup #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'network_endpoint_type' => ->(x, _) { x.nil? ? [] : [\"its('network_endpoint_type') { should cmp #{x.inspect} }\"] },\n      'size' => ->(x, _) { x.nil? ? [] : [\"its('size') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'subnetwork' => ->(x, _) { x.nil? ? [] : [\"its('subnetwork') { should cmp #{x.inspect} }\"] },\n      'default_port' => ->(x, _) { x.nil? ? [] : [\"its('default_port') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'NetworkEndpointGroup'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_network_endpoint_group',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/networkEndpointGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_network_endpoint_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworkEndpointGroups < GcpResourceBase\n  name 'google_compute_network_endpoint_groups'\n  desc 'NetworkEndpointGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:network_endpoint_types, field: :network_endpoint_type)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:default_ports, field: :default_port)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'networkEndpointType' => ->(obj) { [:network_endpoint_type, obj['networkEndpointType']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'defaultPort' => ->(obj) { [:default_port, obj['defaultPort']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/networkEndpointGroups'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworks < GcpResourceBase\n  name 'google_compute_networks'\n  desc 'Network plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:gateway_ipv4s, field: :gateway_ipv4)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:subnetworks, field: :subnetworks)\n  filter_table_config.add(:auto_create_subnetworks, field: :auto_create_subnetworks)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:routing_configs, field: :routing_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'gatewayIPv4' => ->(obj) { [:gateway_ipv4, obj['gatewayIPv4']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'subnetworks' => ->(obj) { [:subnetworks, obj['subnetworks']] },\n      'autoCreateSubnetworks' => ->(obj) { [:auto_create_subnetworks, obj['autoCreateSubnetworks']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'routingConfig' => ->(obj) { [:routing_config, GoogleInSpec::Compute::Property::NetworkRoutingConfig.new(obj['routingConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_node_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNodeGroup < GcpResourceBase\n  name 'google_compute_node_group'\n  desc 'NodeGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :name\n  attr_reader :node_template\n  attr_reader :size\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @node_template = @fetched['nodeTemplate']\n    @size = @fetched['size']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodeGroup #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'node_template' => ->(x, _) { x.nil? ? [] : [\"its('node_template') { should cmp #{x.inspect} }\"] },\n      'size' => ->(x, _) { x.nil? ? [] : [\"its('size') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'NodeGroup'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_node_group',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_node_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNodeGroups < GcpResourceBase\n  name 'google_compute_node_groups'\n  desc 'NodeGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:node_templates, field: :node_template)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'nodeTemplate' => ->(obj) { [:node_template, obj['nodeTemplate']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeGroups'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_node_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/nodetemplate_node_type_flexibility'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNodeTemplate < GcpResourceBase\n  name 'google_compute_node_template'\n  desc 'NodeTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :name\n  attr_reader :node_affinity_labels\n  attr_reader :node_type\n  attr_reader :node_type_flexibility\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @node_affinity_labels = @fetched['nodeAffinityLabels']\n    @node_type = @fetched['nodeType']\n    @node_type_flexibility = GoogleInSpec::Compute::Property::NodeTemplateNodeTypeFlexibility.new(@fetched['nodeTypeFlexibility'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodeTemplate #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'node_affinity_labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('node_affinity_labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'node_type' => ->(x, _) { x.nil? ? [] : [\"its('node_type') { should cmp #{x.inspect} }\"] },\n      'node_type_flexibility' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::NodeTemplateNodeTypeFlexibility.un_parse(x, 'node_type_flexibility') },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'NodeTemplate'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_node_template',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_node_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNodeTemplates < GcpResourceBase\n  name 'google_compute_node_templates'\n  desc 'NodeTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:node_affinity_labels, field: :node_affinity_labels)\n  filter_table_config.add(:node_types, field: :node_type)\n  filter_table_config.add(:node_type_flexibilities, field: :node_type_flexibility)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'nodeAffinityLabels' => ->(obj) { [:node_affinity_labels, obj['nodeAffinityLabels']] },\n      'nodeType' => ->(obj) { [:node_type, obj['nodeType']] },\n      'nodeTypeFlexibility' => ->(obj) { [:node_type_flexibility, GoogleInSpec::Compute::Property::NodeTemplateNodeTypeFlexibility.new(obj['nodeTypeFlexibility'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/nodeTemplates'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_project_info.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeProjectInfo < GcpResourceBase\n    name 'google_compute_project_info'\n    desc 'Verifies settings for GCP Compute Project Info'\n\n    example \"\n      describe google_compute_project_info(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:project]\n      catch_gcp_errors do\n        @project_info = @gcp.gcp_compute_client.get_project(opts[:project])\n        create_resource_methods(@project_info)\n      end\n    end\n\n    def has_enabled_oslogin?\n      return false if !defined?(@project_info.common_instance_metadata.items) || @project_info.common_instance_metadata.items.nil?\n      @project_info.common_instance_metadata.items.each do |element|\n        return true if element.key=='enable-oslogin' and element.value.casecmp('true').zero?\n      end\n      false\n    end\n\n    def creation_timestamp_date\n      return false if !defined?(creation_timestamp) || creation_timestamp.nil?\n      Time.parse(creation_timestamp.to_s)\n    end\n\n    def exists?\n      !@project_info.nil?\n    end\n\n    def to_s\n      \"Compute Project Info #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_region.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/region_deprecated'\nrequire 'google/compute/property/region_quotas'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegion < GcpResourceBase\n  name 'google_compute_region'\n  desc 'Region'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :quotas\n  attr_reader :status\n  attr_reader :zones\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @deprecated = GoogleInSpec::Compute::Property::RegionDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @quotas = GoogleInSpec::Compute::Property::RegionQuotasArray.parse(@fetched['quotas'], to_s)\n    @status = @fetched['status']\n    @zones = @fetched['zones']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Region #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'deprecated' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::RegionDeprecated.un_parse(x, 'deprecated') },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'quotas' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('quotas') { should include '#{single.to_json}' }\" } },\n      'status' => ->(x, _) { x.nil? ? [] : [\"its('status') { should cmp #{x.inspect} }\"] },\n      'zones' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('zones') { should include #{single.inspect} }\" } },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Region'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_region',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  # helper for returning a list of zone short names rather than fully qualified URLs e.g.\n  #   https://www.googleapis.com/compute/v1/projects/spaterson-project/zones/asia-east1-a\n  def zone_names\n    return [] if !exists?\n    @zones.map { |zone| zone.split('/').last }\n  end\n\n  def up?\n    return false if !exists?\n    @status == 'UP'\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_region_backend_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionbackendservice_backends'\nrequire 'google/compute/property/regionbackendservice_connection_draining'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionBackendService < GcpResourceBase\n  name 'google_compute_region_backend_service'\n  desc 'RegionBackendService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :health_checks\n  attr_reader :backends\n  attr_reader :description\n  attr_reader :fingerprint\n  attr_reader :protocol\n  attr_reader :session_affinity\n  attr_reader :region\n  attr_reader :timeout_sec\n  attr_reader :connection_draining\n  attr_reader :load_balancing_scheme\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @health_checks = @fetched['healthChecks']\n    @backends = GoogleInSpec::Compute::Property::RegionBackendServiceBackendsArray.parse(@fetched['backends'], to_s)\n    @description = @fetched['description']\n    @fingerprint = @fetched['fingerprint']\n    @protocol = @fetched['protocol']\n    @session_affinity = @fetched['sessionAffinity']\n    @region = @fetched['region']\n    @timeout_sec = @fetched['timeoutSec']\n    @connection_draining = GoogleInSpec::Compute::Property::RegionBackendServiceConnectionDraining.new(@fetched['connectionDraining'], to_s)\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionBackendService #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'health_checks' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('health_checks') { should include #{single.inspect} }\" } },\n      'backends' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('backends') { should include '#{single.to_json}' }\" } },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('fingerprint') { should cmp #{x.inspect} }\"] },\n      'protocol' => ->(x, _) { x.nil? ? [] : [\"its('protocol') { should cmp #{x.inspect} }\"] },\n      'session_affinity' => ->(x, _) { x.nil? ? [] : [\"its('session_affinity') { should cmp #{x.inspect} }\"] },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n      'timeout_sec' => ->(x, _) { x.nil? ? [] : [\"its('timeout_sec') { should cmp #{x.inspect} }\"] },\n      'connection_draining' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::RegionBackendServiceConnectionDraining.un_parse(x, 'connection_draining') },\n      'load_balancing_scheme' => ->(x, _) { x.nil? ? [] : [\"its('load_balancing_scheme') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'RegionBackendService'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_region_backend_service',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/backendServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_region_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionBackendServices < GcpResourceBase\n  name 'google_compute_region_backend_services'\n  desc 'RegionBackendService plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:health_checks, field: :health_checks)\n  filter_table_config.add(:backends, field: :backends)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:protocols, field: :protocol)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:connection_drainings, field: :connection_draining)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'healthChecks' => ->(obj) { [:health_checks, obj['healthChecks']] },\n      'backends' => ->(obj) { [:backends, GoogleInSpec::Compute::Property::RegionBackendServiceBackendsArray.parse(obj['backends'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'protocol' => ->(obj) { [:protocol, obj['protocol']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'connectionDraining' => ->(obj) { [:connection_draining, GoogleInSpec::Compute::Property::RegionBackendServiceConnectionDraining.new(obj['connectionDraining'], to_s)] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/backendServices'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_region_instance_group_manager.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeRegionInstanceGroupManager < GcpResourceBase\n    name 'google_compute_region_instance_group_manager'\n    desc 'Verifies settings for a compute instance group manager'\n\n    example \"\n      describe google_compute_region_instance_group_manager(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-test') do\n        it { should exist }\n        its('name') { should eq 'inspec-test' }\n        ...\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      @region = opts[:region]\n\n      catch_gcp_errors do\n        @instance_group_manager = @gcp.gcp_compute_client.get_region_instance_group_manager(opts[:project], @region, @display_name)\n        create_resource_methods(@instance_group_manager)\n      end\n    end\n\n    def port_name\n      find_named_ports(:name)\n    end\n    RSpec::Matchers.alias_matcher :has_port_name, :be_allow_port_name\n\n    def port_value\n      find_named_ports(:port)\n    end\n    RSpec::Matchers.alias_matcher :has_port_value, :be_allow_port_value\n\n    def find_named_ports(key = :name)\n      # check all name/port values for a match\n      return false if !defined?(named_ports) || named_ports.nil?\n      named_ports.each do |named_port|\n        next if !defined?(named_port.item[key]) || named_port.item[key].nil?\n        return named_port.item[key]\n      end\n      false\n    end\n\n    def exists?\n      !@instance_group_manager.nil?\n    end\n\n    def to_s\n      \"Region Instance Group Manager #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_region_instance_group_managers.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeRegionInstanceGroupManagers < GcpResourceBase\n    name 'google_compute_region_instance_group_managers'\n    desc 'Verifies settings for GCP compute region_instance_group_managers in bulk'\n\n    example \"\n      describe google_compute_region_instance_group_managers(project: 'chef-inspec-gcp', region: 'europe-west2') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @region = opts[:region]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:instance_group_manager_ids, field: :instance_group_manager_id)\n    filter_table_config.add(:instance_group_manager_names, field: :instance_group_manager_name)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      instance_group_manager_rows = []\n      catch_gcp_errors do\n        @instance_group_managers = @gcp.gcp_compute_client.list_region_instance_group_managers(@project, @region)\n      end\n      return [] if !@instance_group_managers || !@instance_group_managers.items\n      @instance_group_managers.items.map do |instance_group|\n        instance_group_manager_rows+=[{ instance_group_manager_id: instance_group.id,\n                                instance_group_manager_name: instance_group.name }]\n      end\n      @table = instance_group_manager_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_regional_disk.rb",
    "content": "# frozen_string_literal: false\n\nrequire 'gcp_backend'\nrequire 'google/compute/property/disk_disk_encryption_key'\nrequire 'google/compute/property/disk_source_image_encryption_key'\nrequire 'google/compute/property/disk_source_snapshot_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass RegionalDisk < GcpResourceBase\n  name 'google_compute_regional_disk'\n  desc 'RegionalDisk'\n  supports platform: 'gcp'\n\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :params\n  attr_reader :description\n  attr_reader :size_gb\n  attr_reader :zone\n  attr_reader :source_snapshot\n  attr_reader :source_snapshot_id\n  attr_reader :source_snapshot_encryption_key\n  attr_reader :source_image\n  attr_reader :source_image_id\n  attr_reader :source_image_encryption_key\n  attr_reader :type\n  attr_reader :licenses\n  attr_reader :last_attach_timestamp\n  attr_reader :last_detach_timestamp\n  attr_reader :users\n  attr_reader :disk_encryption_key\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :physical_block_size_bytes\n  attr_reader :region\n  attr_reader :replica_zones\n  attr_reader :status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params)\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @size_gb = @fetched['sizeGb']\n    @type = @fetched['type']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @region = @fetched['region']\n    @replica_zones = @fetched['replicaZones']\n    @physical_block_size_bytes = @fetched['physicalBlockSizeBytes']\n    @description = @fetched['description']\n    @last_attach_timestamp = parse_time_string(@fetched['lastAttachTimestamp'])\n    @last_detach_timestamp = parse_time_string(@fetched['lastDetachTimestamp'])\n    @labels = @fetched['labels']\n    @licenses = @fetched['licenses']\n    @users = @fetched['users']\n    @source_image = @fetched['sourceImage']\n    @zone = @fetched['zone']\n    @source_image_encryption_key = GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(@fetched['sourceImageEncryptionKey'], to_s)\n    @source_image_id = @fetched['sourceImageId']\n    @disk_encryption_key = GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(@fetched['diskEncryptionKey'], to_s)\n    @source_snapshot = @fetched['sourceSnapshot']\n    @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(@fetched['sourceSnapshotEncryptionKey'], to_s)\n    @source_snapshot_id = @fetched['sourceSnapshotId']\n    @stat = @fetched['status']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionalDisk #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/disks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_regions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegions < GcpResourceBase\n  name 'google_compute_regions'\n  desc 'Region plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:region_ids, field: :region_id)\n  filter_table_config.add(:region_names, field: :region_name)\n  filter_table_config.add(:quotas, field: :quotas)\n  filter_table_config.add(:region_statuses, field: :region_status)\n  filter_table_config.add(:zones, field: :zones)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::RegionDeprecated.new(obj['deprecated'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:region_id, obj['id']] },\n      'name' => ->(obj) { [:region_name, obj['name']] },\n      'quotas' => ->(obj) { [:quotas, GoogleInSpec::Compute::Property::RegionQuotasArray.parse(obj['quotas'], to_s)] },\n      'status' => ->(obj) { [:region_status, obj['status']] },\n      'zones' => ->(obj) { [:zones, obj['zones']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_route.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRoute < GcpResourceBase\n  name 'google_compute_route'\n  desc 'Route'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :dest_range\n  attr_reader :description\n  attr_reader :name\n  attr_reader :network\n  attr_reader :priority\n  attr_reader :tags\n  attr_reader :next_hop_gateway\n  attr_reader :next_hop_instance\n  attr_reader :next_hop_ip\n  attr_reader :next_hop_vpn_tunnel\n  attr_reader :next_hop_network\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @dest_range = @fetched['destRange']\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @priority = @fetched['priority']\n    @tags = @fetched['tags']\n    @next_hop_gateway = @fetched['nextHopGateway']\n    @next_hop_instance = @fetched['nextHopInstance']\n    @next_hop_ip = @fetched['nextHopIp']\n    @next_hop_vpn_tunnel = @fetched['nextHopVpnTunnel']\n    @next_hop_network = @fetched['nextHopNetwork']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Route #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'dest_range' => ->(x, _) { x.nil? ? [] : [\"its('dest_range') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'priority' => ->(x, _) { x.nil? ? [] : [\"its('priority') { should cmp #{x.inspect} }\"] },\n      'tags' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('tags') { should include #{single.inspect} }\" } },\n      'next_hop_gateway' => ->(x, _) { x.nil? ? [] : [\"its('next_hop_gateway') { should cmp #{x.inspect} }\"] },\n      'next_hop_instance' => ->(x, _) { x.nil? ? [] : [\"its('next_hop_instance') { should cmp #{x.inspect} }\"] },\n      'next_hop_ip' => ->(x, _) { x.nil? ? [] : [\"its('next_hop_ip') { should cmp #{x.inspect} }\"] },\n      'next_hop_vpn_tunnel' => ->(x, _) { x.nil? ? [] : [\"its('next_hop_vpn_tunnel') { should cmp #{x.inspect} }\"] },\n      'next_hop_network' => ->(x, _) { x.nil? ? [] : [\"its('next_hop_network') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Route'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_route',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/routes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_router.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/router_bgp'\nrequire 'google/compute/property/router_bgp_advertised_ip_ranges'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRouter < GcpResourceBase\n  name 'google_compute_router'\n  desc 'Router'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network\n  attr_reader :bgp\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network = @fetched['network']\n    @bgp = GoogleInSpec::Compute::Property::RouterBgp.new(@fetched['bgp'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Router #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'bgp' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::RouterBgp.un_parse(x, 'bgp') },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Router'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_router',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_routers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRouters < GcpResourceBase\n  name 'google_compute_routers'\n  desc 'Router plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:bgps, field: :bgp)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'bgp' => ->(obj) { [:bgp, GoogleInSpec::Compute::Property::RouterBgp.new(obj['bgp'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_routes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRoutes < GcpResourceBase\n  name 'google_compute_routes'\n  desc 'Route plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dest_ranges, field: :dest_range)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:tags, field: :tags)\n  filter_table_config.add(:next_hop_gateways, field: :next_hop_gateway)\n  filter_table_config.add(:next_hop_instances, field: :next_hop_instance)\n  filter_table_config.add(:next_hop_ips, field: :next_hop_ip)\n  filter_table_config.add(:next_hop_vpn_tunnels, field: :next_hop_vpn_tunnel)\n  filter_table_config.add(:next_hop_networks, field: :next_hop_network)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'destRange' => ->(obj) { [:dest_range, obj['destRange']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'tags' => ->(obj) { [:tags, obj['tags']] },\n      'nextHopGateway' => ->(obj) { [:next_hop_gateway, obj['nextHopGateway']] },\n      'nextHopInstance' => ->(obj) { [:next_hop_instance, obj['nextHopInstance']] },\n      'nextHopIp' => ->(obj) { [:next_hop_ip, obj['nextHopIp']] },\n      'nextHopVpnTunnel' => ->(obj) { [:next_hop_vpn_tunnel, obj['nextHopVpnTunnel']] },\n      'nextHopNetwork' => ->(obj) { [:next_hop_network, obj['nextHopNetwork']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/routes'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_snapshot.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/snapshot_snapshot_encryption_key'\nrequire 'google/compute/property/snapshot_source_disk_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSnapshot < GcpResourceBase\n  name 'google_compute_snapshot'\n  desc 'Snapshot'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :id\n  attr_reader :disk_size_gb\n  attr_reader :name\n  attr_reader :description\n  attr_reader :storage_bytes\n  attr_reader :licenses\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :source_disk\n  attr_reader :zone\n  attr_reader :snapshot_encryption_key\n  attr_reader :source_disk_encryption_key\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @id = @fetched['id']\n    @disk_size_gb = @fetched['diskSizeGb']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @storage_bytes = @fetched['storageBytes']\n    @licenses = @fetched['licenses']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @source_disk = @fetched['sourceDisk']\n    @zone = @fetched['zone']\n    @snapshot_encryption_key = GoogleInSpec::Compute::Property::SnapshotSnapshotEncryptionKey.new(@fetched['snapshotEncryptionKey'], to_s)\n    @source_disk_encryption_key = GoogleInSpec::Compute::Property::SnapshotSourceDiskEncryptionKey.new(@fetched['sourceDiskEncryptionKey'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Snapshot #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'disk_size_gb' => ->(x, _) { x.nil? ? [] : [\"its('disk_size_gb') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'storage_bytes' => ->(x, _) { x.nil? ? [] : [\"its('storage_bytes') { should cmp #{x.inspect} }\"] },\n      'licenses' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('licenses') { should include #{single.inspect} }\" } },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'label_fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('label_fingerprint') { should cmp #{x.inspect} }\"] },\n      'source_disk' => ->(x, _) { x.nil? ? [] : [\"its('source_disk') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n      'snapshot_encryption_key' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::SnapshotSnapshotEncryptionKey.un_parse(x, 'snapshot_encryption_key') },\n      'source_disk_encryption_key' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::SnapshotSourceDiskEncryptionKey.un_parse(x, 'source_disk_encryption_key') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Snapshot'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_snapshot',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/snapshots/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_snapshots.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSnapshots < GcpResourceBase\n  name 'google_compute_snapshots'\n  desc 'Snapshot plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:disk_size_gbs, field: :disk_size_gb)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:storage_bytes, field: :storage_bytes)\n  filter_table_config.add(:licenses, field: :licenses)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:source_disks, field: :source_disk)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:snapshot_encryption_keys, field: :snapshot_encryption_key)\n  filter_table_config.add(:source_disk_encryption_keys, field: :source_disk_encryption_key)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'diskSizeGb' => ->(obj) { [:disk_size_gb, obj['diskSizeGb']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'storageBytes' => ->(obj) { [:storage_bytes, obj['storageBytes']] },\n      'licenses' => ->(obj) { [:licenses, obj['licenses']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'sourceDisk' => ->(obj) { [:source_disk, obj['sourceDisk']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'snapshotEncryptionKey' => ->(obj) { [:snapshot_encryption_key, GoogleInSpec::Compute::Property::SnapshotSnapshotEncryptionKey.new(obj['snapshotEncryptionKey'], to_s)] },\n      'sourceDiskEncryptionKey' => ->(obj) { [:source_disk_encryption_key, GoogleInSpec::Compute::Property::SnapshotSourceDiskEncryptionKey.new(obj['sourceDiskEncryptionKey'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/snapshots'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_ssl_certificate.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSslCertificate < GcpResourceBase\n  name 'google_compute_ssl_certificate'\n  desc 'SslCertificate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :certificate\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :private_key\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @certificate = @fetched['certificate']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @private_key = @fetched['privateKey']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SslCertificate #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'certificate' => ->(x, _) { x.nil? ? [] : [\"its('certificate') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'private_key' => ->(x, _) { x.nil? ? [] : [\"its('private_key') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'SslCertificate'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_ssl_certificate',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslCertificates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_ssl_certificates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSslCertificates < GcpResourceBase\n  name 'google_compute_ssl_certificates'\n  desc 'SslCertificate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:certificates, field: :certificate)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:private_keys, field: :private_key)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'certificate' => ->(obj) { [:certificate, obj['certificate']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'privateKey' => ->(obj) { [:private_key, obj['privateKey']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslCertificates'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_ssl_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSslPolicys < GcpResourceBase\n  name 'google_compute_ssl_policies'\n  desc 'SslPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:profiles, field: :profile)\n  filter_table_config.add(:min_tls_versions, field: :min_tls_version)\n  filter_table_config.add(:enabled_features, field: :enabled_features)\n  filter_table_config.add(:custom_features, field: :custom_features)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:warnings, field: :warnings)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'profile' => ->(obj) { [:profile, obj['profile']] },\n      'minTlsVersion' => ->(obj) { [:min_tls_version, obj['minTlsVersion']] },\n      'enabledFeatures' => ->(obj) { [:enabled_features, obj['enabledFeatures']] },\n      'customFeatures' => ->(obj) { [:custom_features, obj['customFeatures']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'warnings' => ->(obj) { [:warnings, GoogleInSpec::Compute::Property::SslPolicyWarningsArray.parse(obj['warnings'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslPolicies'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_ssl_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/sslpolicy_warnings'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSslPolicy < GcpResourceBase\n  name 'google_compute_ssl_policy'\n  desc 'SslPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :profile\n  attr_reader :min_tls_version\n  attr_reader :enabled_features\n  attr_reader :custom_features\n  attr_reader :fingerprint\n  attr_reader :warnings\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @profile = @fetched['profile']\n    @min_tls_version = @fetched['minTlsVersion']\n    @enabled_features = @fetched['enabledFeatures']\n    @custom_features = @fetched['customFeatures']\n    @fingerprint = @fetched['fingerprint']\n    @warnings = GoogleInSpec::Compute::Property::SslPolicyWarningsArray.parse(@fetched['warnings'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SslPolicy #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'profile' => ->(x, _) { x.nil? ? [] : [\"its('profile') { should cmp #{x.inspect} }\"] },\n      'min_tls_version' => ->(x, _) { x.nil? ? [] : [\"its('min_tls_version') { should cmp #{x.inspect} }\"] },\n      'enabled_features' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('enabled_features') { should include #{single.inspect} }\" } },\n      'custom_features' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('custom_features') { should include #{single.inspect} }\" } },\n      'fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('fingerprint') { should cmp #{x.inspect} }\"] },\n      'warnings' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('warnings') { should include '#{single.to_json}' }\" } },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'SslPolicy'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_ssl_policy',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_subnetwork.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/subnetwork_log_config'\nrequire 'google/compute/property/subnetwork_secondary_ip_ranges'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSubnetwork < GcpResourceBase\n  name 'google_compute_subnetwork'\n  desc 'Subnetwork'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :gateway_address\n  attr_reader :id\n  attr_reader :ip_cidr_range\n  attr_reader :name\n  attr_reader :network\n  attr_reader :fingerprint\n  attr_reader :secondary_ip_ranges\n  attr_reader :private_ip_google_access\n  attr_reader :region\n  attr_reader :log_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @gateway_address = @fetched['gatewayAddress']\n    @id = @fetched['id']\n    @ip_cidr_range = @fetched['ipCidrRange']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @fingerprint = @fetched['fingerprint']\n    @secondary_ip_ranges = GoogleInSpec::Compute::Property::SubnetworkSecondaryIpRangesArray.parse(@fetched['secondaryIpRanges'], to_s)\n    @private_ip_google_access = @fetched['privateIpGoogleAccess']\n    @region = @fetched['region']\n    @log_config = GoogleInSpec::Compute::Property::SubnetworkLogConfig.new(@fetched['logConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subnetwork #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'gateway_address' => ->(x, _) { x.nil? ? [] : [\"its('gateway_address') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'ip_cidr_range' => ->(x, _) { x.nil? ? [] : [\"its('ip_cidr_range') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('fingerprint') { should cmp #{x.inspect} }\"] },\n      'secondary_ip_ranges' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('secondary_ip_ranges') { should include '#{single.to_json}' }\" } },\n      'private_ip_google_access' => ->(x, _) { x.nil? ? [] : [\"its('private_ip_google_access') { should cmp #{x.inspect} }\"] },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n      'log_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Compute::Property::SubnetworkLogConfig.un_parse(x, 'log_config') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Subnetwork'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_subnetwork',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_subnetwork_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Compute Engine IAM Policy resources.\nclass SubnetworkIamPolicy < GcpResourceBase\n  name 'google_compute_subnetwork_iam_policy'\n  desc 'Subnetwork Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subnetwork IamPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks/{{name}}/getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_subnetworks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSubnetworks < GcpResourceBase\n  name 'google_compute_subnetworks'\n  desc 'Subnetwork plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:gateway_addresses, field: :gateway_address)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:ip_cidr_ranges, field: :ip_cidr_range)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:secondary_ip_ranges, field: :secondary_ip_ranges)\n  filter_table_config.add(:private_ip_google_accesses, field: :private_ip_google_access)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:log_configs, field: :log_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'gatewayAddress' => ->(obj) { [:gateway_address, obj['gatewayAddress']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'ipCidrRange' => ->(obj) { [:ip_cidr_range, obj['ipCidrRange']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'secondaryIpRanges' => ->(obj) { [:secondary_ip_ranges, GoogleInSpec::Compute::Property::SubnetworkSecondaryIpRangesArray.parse(obj['secondaryIpRanges'], to_s)] },\n      'privateIpGoogleAccess' => ->(obj) { [:private_ip_google_access, obj['privateIpGoogleAccess']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::SubnetworkLogConfig.new(obj['logConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_http_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetHttpProxys < GcpResourceBase\n  name 'google_compute_target_http_proxies'\n  desc 'TargetHttpProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:url_maps, field: :url_map)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpProxies'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_http_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetHttpProxy < GcpResourceBase\n  name 'google_compute_target_http_proxy'\n  desc 'TargetHttpProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :url_map\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @url_map = @fetched['urlMap']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetHttpProxy #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'url_map' => ->(x, _) { x.nil? ? [] : [\"its('url_map') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'TargetHttpProxy'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_target_http_proxy',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_https_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetHttpsProxys < GcpResourceBase\n  name 'google_compute_target_https_proxies'\n  desc 'TargetHttpsProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:quic_overrides, field: :quic_override)\n  filter_table_config.add(:ssl_certificates, field: :ssl_certificates)\n  filter_table_config.add(:ssl_policies, field: :ssl_policy)\n  filter_table_config.add(:url_maps, field: :url_map)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'quicOverride' => ->(obj) { [:quic_override, obj['quicOverride']] },\n      'sslCertificates' => ->(obj) { [:ssl_certificates, obj['sslCertificates']] },\n      'sslPolicy' => ->(obj) { [:ssl_policy, obj['sslPolicy']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpsProxies'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_https_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetHttpsProxy < GcpResourceBase\n  name 'google_compute_target_https_proxy'\n  desc 'TargetHttpsProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :quic_override\n  attr_reader :ssl_certificates\n  attr_reader :ssl_policy\n  attr_reader :url_map\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @quic_override = @fetched['quicOverride']\n    @ssl_certificates = @fetched['sslCertificates']\n    @ssl_policy = @fetched['sslPolicy']\n    @url_map = @fetched['urlMap']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetHttpsProxy #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'quic_override' => ->(x, _) { x.nil? ? [] : [\"its('quic_override') { should cmp #{x.inspect} }\"] },\n      'ssl_certificates' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('ssl_certificates') { should include #{single.inspect} }\" } },\n      'ssl_policy' => ->(x, _) { x.nil? ? [] : [\"its('ssl_policy') { should cmp #{x.inspect} }\"] },\n      'url_map' => ->(x, _) { x.nil? ? [] : [\"its('url_map') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'TargetHttpsProxy'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_target_https_proxy',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpsProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_pool.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetPool < GcpResourceBase\n  name 'google_compute_target_pool'\n  desc 'TargetPool'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :backup_pool\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :failover_ratio\n  attr_reader :health_check\n  attr_reader :id\n  attr_reader :instances\n  attr_reader :name\n  attr_reader :session_affinity\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @backup_pool = @fetched['backupPool']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @failover_ratio = @fetched['failoverRatio']\n    @health_check = @fetched['healthCheck']\n    @id = @fetched['id']\n    @instances = @fetched['instances']\n    @name = @fetched['name']\n    @session_affinity = @fetched['sessionAffinity']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetPool #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'backup_pool' => ->(x, _) { x.nil? ? [] : [\"its('backup_pool') { should cmp #{x.inspect} }\"] },\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'failover_ratio' => ->(x, _) { x.nil? ? [] : [\"its('failover_ratio') { should cmp #{x.inspect} }\"] },\n      'health_check' => ->(x, _) { x.nil? ? [] : [\"its('health_check') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'instances' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('instances') { should include #{single.inspect} }\" } },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'session_affinity' => ->(x, _) { x.nil? ? [] : [\"its('session_affinity') { should cmp #{x.inspect} }\"] },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'TargetPool'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_target_pool',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  RSpec::Matchers.alias_matcher :has_target_instance, :be_has_target_instance\n\n  def has_target_instance?(name, zone)\n    instances.any? { |instance_self_link| instance_self_link.end_with?(\"zones/#{zone}/instances/#{name}\") }\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetPools/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetPools < GcpResourceBase\n  name 'google_compute_target_pools'\n  desc 'TargetPool plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:backup_pools, field: :backup_pool)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:failover_ratios, field: :failover_ratio)\n  filter_table_config.add(:health_checks, field: :health_check)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:instances, field: :instances)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'backupPool' => ->(obj) { [:backup_pool, obj['backupPool']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'failoverRatio' => ->(obj) { [:failover_ratio, obj['failoverRatio']] },\n      'healthCheck' => ->(obj) { [:health_check, obj['healthCheck']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'instances' => ->(obj) { [:instances, obj['instances']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetPools'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_tcp_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetTcpProxys < GcpResourceBase\n  name 'google_compute_target_tcp_proxies'\n  desc 'TargetTcpProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:proxy_headers, field: :proxy_header)\n  filter_table_config.add(:services, field: :service)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'proxyHeader' => ->(obj) { [:proxy_header, obj['proxyHeader']] },\n      'service' => ->(obj) { [:service, obj['service']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetTcpProxies'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_target_tcp_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetTcpProxy < GcpResourceBase\n  name 'google_compute_target_tcp_proxy'\n  desc 'TargetTcpProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :proxy_header\n  attr_reader :service\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @proxy_header = @fetched['proxyHeader']\n    @service = @fetched['service']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetTcpProxy #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'proxy_header' => ->(x, _) { x.nil? ? [] : [\"its('proxy_header') { should cmp #{x.inspect} }\"] },\n      'service' => ->(x, _) { x.nil? ? [] : [\"its('service') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'TargetTcpProxy'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_target_tcp_proxy',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetTcpProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_url_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/urlmap_host_rules'\nrequire 'google/compute/property/urlmap_path_matchers'\nrequire 'google/compute/property/urlmap_tests'\n\n# A provider to manage Compute Engine resources.\nclass ComputeUrlMap < GcpResourceBase\n  name 'google_compute_url_map'\n  desc 'UrlMap'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :default_service\n  attr_reader :description\n  attr_reader :host_rules\n  attr_reader :id\n  attr_reader :fingerprint\n  attr_reader :name\n  attr_reader :path_matchers\n  attr_reader :tests\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @default_service = @fetched['defaultService']\n    @description = @fetched['description']\n    @host_rules = GoogleInSpec::Compute::Property::UrlMapHostRulesArray.parse(@fetched['hostRules'], to_s)\n    @id = @fetched['id']\n    @fingerprint = @fetched['fingerprint']\n    @name = @fetched['name']\n    @path_matchers = GoogleInSpec::Compute::Property::UrlMapPathMatchersArray.parse(@fetched['pathMatchers'], to_s)\n    @tests = GoogleInSpec::Compute::Property::UrlMapTestsArray.parse(@fetched['tests'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"UrlMap #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'creation_timestamp' => ->(x, _) { x.nil? ? [] : [\"its('creation_timestamp.to_s') { should cmp '#{x.inspect}' }\"] },\n      'default_service' => ->(x, _) { x.nil? ? [] : [\"its('default_service') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'host_rules' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('host_rules') { should include '#{single.to_json}' }\" } },\n      'id' => ->(x, _) { x.nil? ? [] : [\"its('id') { should cmp #{x.inspect} }\"] },\n      'fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('fingerprint') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'path_matchers' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('path_matchers') { should include '#{single.to_json}' }\" } },\n      'tests' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('tests') { should include '#{single.to_json}' }\" } },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'UrlMap'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_compute_url_map',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/urlMaps/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_url_maps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeUrlMaps < GcpResourceBase\n  name 'google_compute_url_maps'\n  desc 'UrlMap plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:default_services, field: :default_service)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:host_rules, field: :host_rules)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:path_matchers, field: :path_matchers)\n  filter_table_config.add(:tests, field: :tests)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'defaultService' => ->(obj) { [:default_service, obj['defaultService']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'hostRules' => ->(obj) { [:host_rules, GoogleInSpec::Compute::Property::UrlMapHostRulesArray.parse(obj['hostRules'], to_s)] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'pathMatchers' => ->(obj) { [:path_matchers, GoogleInSpec::Compute::Property::UrlMapPathMatchersArray.parse(obj['pathMatchers'], to_s)] },\n      'tests' => ->(obj) { [:tests, GoogleInSpec::Compute::Property::UrlMapTestsArray.parse(obj['tests'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/urlMaps'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_vpn_tunnel.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeVpnTunnel < GcpResourceBase\n    name 'google_compute_vpn_tunnel'\n    desc 'Verifies settings for a compute vpn_tunnel'\n\n    example \"\n      describe google_compute_vpn_tunnel(project: 'chef-inspec-gcp', region: 'europe-west2', name: 'gcp-inspec-vpn_tunnel') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @vpn_tunnel = @gcp.gcp_compute_client.get_vpn_tunnel(opts[:project], opts[:region], opts[:name])\n        create_resource_methods(@vpn_tunnel)\n      end\n    end\n\n    def exists?\n      !@vpn_tunnel.nil?\n    end\n\n    def creation_timestamp_date\n      return false if !defined?(creation_timestamp) || creation_timestamp.nil?\n      Time.parse(creation_timestamp.to_s)\n    end\n\n    def to_s\n      \"Tunnel #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_vpn_tunnels.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeVpnTunnels < GcpResourceBase\n    name 'google_compute_vpn_tunnels'\n    desc 'Verifies settings for GCP compute vpn_tunnels in bulk'\n\n    example \"\n      describe google_compute_vpn_tunnels(project: 'chef-inspec-gcp', region: 'europe-west2') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @region = opts[:region]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:vpn_tunnel_names, field: :vpn_tunnel_name)\n    filter_table_config.add(:vpn_tunnel_target_vpn_gateways, field: :vpn_tunnel_target_vpn_gateway)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      tunnel_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @vpn_tunnels = @gcp.gcp_compute_client.list_vpn_tunnels(@project, @region, page_token: next_page)\n        end\n        return [] if !@vpn_tunnels || !@vpn_tunnels.items\n        @vpn_tunnels.items.map do |tunnel|\n          tunnel_rows+=[{ vpn_tunnel_name: tunnel.name, vpn_tunnel_target_vpn_gateway: tunnel.target_vpn_gateway }]\n        end\n        next_page = @vpn_tunnels.next_page_token\n        break unless next_page\n      end\n      @table = tunnel_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_zone.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeZone < GcpResourceBase\n    name 'google_compute_zone'\n    desc 'Verifies settings for a zone'\n\n    example \"\n      describe google_compute_zone(project: 'chef-inspec-gcp',  zone: 'us-east1-b') do\n        it { should exist }\n        its('name') { should match 'us-east1-b' }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @zone = @gcp.gcp_compute_client.get_zone(opts[:project], opts[:name])\n        create_resource_methods(@zone)\n      end\n    end\n\n    # helper method for retrieving a region name\n    def region_name\n      return '' if !defined?(region) || region.nil?\n      region.split('/').last\n    end\n\n    def exists?\n      !@zone.nil?\n    end\n\n    def up?\n      return false if !defined?(status) || status.nil?\n      status == 'UP'\n    end\n\n    def to_s\n      \"Zone #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_compute_zones.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeZones < GcpResourceBase\n    name 'google_compute_zones'\n    desc 'Verifies settings for GCP compute zones in bulk'\n\n    example \"\n      describe google_compute_zones(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:zone_ids, field: :zone_id)\n    filter_table_config.add(:zone_names, field: :zone_name)\n    filter_table_config.add(:zone_statuses, field: :zone_status)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      zone_rows = []\n      catch_gcp_errors do\n        @zones = @gcp.gcp_compute_client.list_zones(@project)\n      end\n      return [] if !@zones || !@zones.items\n      @zones.items.map do |zone|\n        zone_rows+=[{ zone_id: zone.id,\n                          zone_name: zone.name,\n                          zone_status: zone.status }]\n      end\n      @table = zone_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_cluster.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/container_v1beta1'\n\nmodule Inspec::Resources\n  class GoogleContainerCluster < GcpResourceBase\n    name 'google_container_cluster'\n    desc 'Verifies settings for a google container cluster'\n\n    example \"\n      describe google_container_cluster(project: 'chef-inspec-gcp', zone: 'europe-west2-a', name: 'cluster-name') do\n        it { should exist }\n        its('name') { should eq 'inspec-test' }\n        its('status') { should eq 'in_use' }\n        ...\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @cluster = @gcp.gcp_client(Google::Apis::ContainerV1beta1::ContainerService).get_zone_cluster(opts[:project], opts[:zone], opts[:name])\n        create_resource_methods(@cluster)\n      end\n    end\n\n    def has_logging_enabled?\n      return false if !defined?(@cluster.logging_service)\n      return false if @cluster.logging_service.nil?\n      return true if /logging\\.googleapis\\.com/ =~ @cluster.logging_service\n      false\n    end\n\n    def has_monitoring_enabled?\n      return false if !defined?(@cluster.monitoring_service)\n      return false if @cluster.monitoring_service.nil?\n      return true if /monitoring\\.googleapis\\.com/ =~ @cluster.monitoring_service\n      false\n    end\n\n    def has_legacy_abac_disabled?\n      return nil if !defined?(@cluster.legacy_abac)\n      return true if @cluster.legacy_abac.to_h.empty?\n      false\n    end\n\n    def has_master_authorized_networks_enabled?\n      return false if !defined?(@cluster.master_authorized_networks_config)\n      return false if @cluster.master_authorized_networks_config.to_h.empty?\n      return false if !defined?(@cluster.master_authorized_networks_config.enabled)\n      return true if @cluster.master_authorized_networks_config.enabled == true\n      false\n    end\n\n    def has_resource_labels?\n      return false if !defined?(@cluster.resource_labels)\n      return false if @cluster.resource_labels.to_h.empty?\n      true\n    end\n\n    def has_kubernetes_dashboard_disabled?\n      return false if !defined?(@cluster.addons_config.kubernetes_dashboard)\n      return false if @cluster.addons_config.kubernetes_dashboard.to_h.empty?\n      return true if  @cluster.addons_config.kubernetes_dashboard.to_h=={ 'disabled': true }\n      false\n    end\n\n    def has_basic_authorization?\n      return false if @cluster.master_auth.username.nil? and @cluster.master_auth.password.nil?\n      true\n    end\n\n    def has_network_policy_enabled?\n      return false if !defined?(@cluster.network_policy.enabled)\n      return true if  @cluster.network_policy.enabled==true\n      false\n    end\n\n    def has_master_auth_client_key?\n      return false if !defined?(@cluster.master_auth.client_key)\n      return false if @cluster.master_auth.client_key.nil?\n      return false if @cluster.master_auth.client_key==''\n      true\n    end\n\n    def has_ip_alias_enabled?\n      return false if !defined?(@cluster.ip_allocation_policy.use_ip_aliases)\n      return true if @cluster.ip_allocation_policy.use_ip_aliases==true\n      false\n    end\n\n    def has_pod_security_policy_config?\n      return false if !defined?(@cluster.pod_security_policy_config.enabled)\n      return true if @cluster.pod_security_policy_config.enabled==true\n      false\n    end\n\n    def private_cluster?\n      return false if !defined?(@cluster.private_cluster)\n      return true if @cluster.private_cluster==true\n      false\n    end\n\n    def exists?\n      !@cluster.nil?\n    end\n\n    def to_s\n      \"Cluster #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_clusters.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleContainerClusters < GcpResourceBase\n    name 'google_container_clusters'\n    desc 'Verifies settings for GCP container clusters in bulk'\n\n    example \"\n      describe google_container_clusters(project: 'chef-inspec-gcp', zone: 'europe-west2-a') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @zone = opts[:zone]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:cluster_names, field: :cluster_name)\n    filter_table_config.add(:cluster_statuses, field: :cluster_status)\n    filter_table_config.add(:cluster_subnetworks, field: :cluster_subnetwork)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      cluster_rows = []\n      catch_gcp_errors do\n        # below seemingly doesn't provide pagination\n        @clusters = @gcp.gcp_client(Google::Apis::ContainerV1::ContainerService).list_zone_clusters(@project, @zone)\n      end\n      return [] if !@clusters || !@clusters.clusters\n      @clusters.clusters.map do |cluster|\n        cluster_rows+=[{ cluster_name: cluster.name,\n                         cluster_status: cluster.status,\n                         cluster_subnetwork: cluster.subnetwork }]\n      end\n      @table = cluster_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_node_pool.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/container_v1'\n\nmodule Inspec::Resources\n  class GoogleContainerNodePool < GcpResourceBase\n    name 'google_container_node_pool'\n    desc 'Verifies settings for a container nodepool'\n\n    example \"\n      describe google_container_node_pool(project: 'chef-inspec-gcp', zone: 'europe-west2-a', cluster_name: 'cluster-name', nodepool_name: 'inspec-test') do\n        it { should exist }\n        its('name') { should eq 'inspec-test' }\n        ...\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:nodepool_name]\n      catch_gcp_errors do\n        @nodepool = @gcp.gcp_client(Google::Apis::ContainerV1::ContainerService).get_project_zone_cluster_node_pool(opts[:project], opts[:zone], opts[:cluster_name], opts[:nodepool_name])\n        create_resource_methods(@nodepool)\n      end\n    end\n\n    def has_automatic_node_repair?\n      return false if !defined?(@nodepool.management.auto_repair)\n      return false if @nodepool.management.auto_repair.nil?\n      @nodepool.management.auto_repair\n    end\n\n    def has_automatic_node_upgrade?\n      return false if !defined?(@nodepool.management.auto_upgrade)\n      return false if @nodepool.management.auto_upgrade.nil?\n      @nodepool.management.auto_upgrade\n    end\n\n    def config_image_type\n      return '' if !defined?(@nodepool.config.image_type)\n      return '' if @nodepool.config.image_type.nil?\n      @nodepool.config.image_type\n    end\n\n    def config_service_account\n      return '' if !defined?(@nodepool.config.service_account)\n      return '' if @nodepool.config.service_account.nil?\n      @nodepool.config.service_account\n    end\n\n    def config_oauth_scopes\n      return false if !defined?(@nodepool.config.oauth_scopes)\n      return false if @nodepool.config.oauth_scopes.nil?\n      @nodepool.config.oauth_scopes\n    end\n\n    def exists?\n      !@nodepool.nil?\n    end\n\n    def to_s\n      \"Nodepool #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_node_pools.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleContainerNodePools < GcpResourceBase\n    name 'google_container_node_pools'\n    desc 'Verifies settings for GCP container node pools in bulk'\n\n    example \"\n      describe google_container_node_pools(project: 'chef-inspec-gcp', node_pool: 'europe-west2-a', cluster_name: 'inspec-gcp-cluster')\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @zone = opts[:zone]\n      @cluster_name = opts[:cluster_name]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:node_pool_names, field: :node_pool_name)\n    filter_table_config.add(:node_pool_statuses, field: :node_pool_status)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      node_pool_rows = []\n      catch_gcp_errors do\n        # no pagination\n        @node_pools = @gcp.gcp_client(Google::Apis::ContainerV1::ContainerService).list_project_zone_cluster_node_pools(@project, @zone, @cluster_name)\n      end\n      return [] if !@node_pools || !@node_pools.node_pools\n      @node_pools.node_pools.map do |node_pool|\n        node_pool_rows+=[{ node_pool_name: node_pool.name,\n                           node_pool_status: node_pool.status }]\n      end\n      @table = node_pool_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_regional_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/container/property/regionalcluster_addons_config'\nrequire 'google/container/property/regionalcluster_addons_config_horizontal_pod_autoscaling'\nrequire 'google/container/property/regionalcluster_addons_config_http_load_balancing'\nrequire 'google/container/property/regionalcluster_addons_config_kubernetes_dashboard'\nrequire 'google/container/property/regionalcluster_addons_config_network_policy_config'\nrequire 'google/container/property/regionalcluster_conditions'\nrequire 'google/container/property/regionalcluster_default_max_pods_constraint'\nrequire 'google/container/property/regionalcluster_ip_allocation_policy'\nrequire 'google/container/property/regionalcluster_legacy_abac'\nrequire 'google/container/property/regionalcluster_master_auth'\nrequire 'google/container/property/regionalcluster_master_auth_client_certificate_config'\nrequire 'google/container/property/regionalcluster_master_authorized_networks_config'\nrequire 'google/container/property/regionalcluster_master_authorized_networks_config_cidr_blocks'\nrequire 'google/container/property/regionalcluster_network_policy'\nrequire 'google/container/property/regionalcluster_node_config'\nrequire 'google/container/property/regionalcluster_node_config_accelerators'\nrequire 'google/container/property/regionalcluster_node_config_taints'\nrequire 'google/container/property/regionalcluster_private_cluster_config'\n\n# A provider to manage Google Kubernetes Engine resources.\nclass ContainerRegionalCluster < GcpResourceBase\n  name 'google_container_regional_cluster'\n  desc 'RegionalCluster'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :initial_node_count\n  attr_reader :node_config\n  attr_reader :master_auth\n  attr_reader :logging_service\n  attr_reader :monitoring_service\n  attr_reader :network\n  attr_reader :private_cluster_config\n  attr_reader :cluster_ipv4_cidr\n  attr_reader :addons_config\n  attr_reader :subnetwork\n  attr_reader :locations\n  attr_reader :resource_labels\n  attr_reader :label_fingerprint\n  attr_reader :legacy_abac\n  attr_reader :network_policy\n  attr_reader :default_max_pods_constraint\n  attr_reader :ip_allocation_policy\n  attr_reader :endpoint\n  attr_reader :initial_cluster_version\n  attr_reader :current_master_version\n  attr_reader :current_node_version\n  attr_reader :create_time\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :node_ipv4_cidr_size\n  attr_reader :services_ipv4_cidr\n  attr_reader :current_node_count\n  attr_reader :expire_time\n  attr_reader :enable_tpu\n  attr_reader :tpu_ipv4_cidr_block\n  attr_reader :conditions\n  attr_reader :master_authorized_networks_config\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @initial_node_count = @fetched['initialNodeCount']\n    @node_config = GoogleInSpec::Container::Property::RegionalClusterNodeConfig.new(@fetched['nodeConfig'], to_s)\n    @master_auth = GoogleInSpec::Container::Property::RegionalClusterMasterAuth.new(@fetched['masterAuth'], to_s)\n    @logging_service = @fetched['loggingService']\n    @monitoring_service = @fetched['monitoringService']\n    @network = @fetched['network']\n    @private_cluster_config = GoogleInSpec::Container::Property::RegionalClusterPrivateClusterConfig.new(@fetched['privateClusterConfig'], to_s)\n    @cluster_ipv4_cidr = @fetched['clusterIpv4Cidr']\n    @addons_config = GoogleInSpec::Container::Property::RegionalClusterAddonsConfig.new(@fetched['addonsConfig'], to_s)\n    @subnetwork = @fetched['subnetwork']\n    @locations = @fetched['locations']\n    @resource_labels = @fetched['resourceLabels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @legacy_abac = GoogleInSpec::Container::Property::RegionalClusterLegacyAbac.new(@fetched['legacyAbac'], to_s)\n    @network_policy = GoogleInSpec::Container::Property::RegionalClusterNetworkPolicy.new(@fetched['networkPolicy'], to_s)\n    @default_max_pods_constraint = GoogleInSpec::Container::Property::RegionalClusterDefaultMaxPodsConstraint.new(@fetched['defaultMaxPodsConstraint'], to_s)\n    @ip_allocation_policy = GoogleInSpec::Container::Property::RegionalClusterIpAllocationPolicy.new(@fetched['ipAllocationPolicy'], to_s)\n    @endpoint = @fetched['endpoint']\n    @initial_cluster_version = @fetched['initialClusterVersion']\n    @current_master_version = @fetched['currentMasterVersion']\n    @current_node_version = @fetched['currentNodeVersion']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @node_ipv4_cidr_size = @fetched['nodeIpv4CidrSize']\n    @services_ipv4_cidr = @fetched['servicesIpv4Cidr']\n    @current_node_count = @fetched['currentNodeCount']\n    @expire_time = parse_time_string(@fetched['expireTime'])\n    @enable_tpu = @fetched['enableTpu']\n    @tpu_ipv4_cidr_block = @fetched['tpuIpv4CidrBlock']\n    @conditions = GoogleInSpec::Container::Property::RegionalClusterConditionsArray.parse(@fetched['conditions'], to_s)\n    @master_authorized_networks_config = GoogleInSpec::Container::Property::RegionalClusterMasterAuthorizedNetworksConfig.new(@fetched['masterAuthorizedNetworksConfig'], to_s)\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionalCluster #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'initial_node_count' => ->(x, _) { x.nil? ? [] : [\"its('initial_node_count') { should cmp #{x.inspect} }\"] },\n      'node_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterNodeConfig.un_parse(x, 'node_config') },\n      'master_auth' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterMasterAuth.un_parse(x, 'master_auth') },\n      'logging_service' => ->(x, _) { x.nil? ? [] : [\"its('logging_service') { should cmp #{x.inspect} }\"] },\n      'monitoring_service' => ->(x, _) { x.nil? ? [] : [\"its('monitoring_service') { should cmp #{x.inspect} }\"] },\n      'network' => ->(x, _) { x.nil? ? [] : [\"its('network') { should cmp #{x.inspect} }\"] },\n      'private_cluster_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterPrivateClusterConfig.un_parse(x, 'private_cluster_config') },\n      'cluster_ipv4_cidr' => ->(x, _) { x.nil? ? [] : [\"its('cluster_ipv4_cidr') { should cmp #{x.inspect} }\"] },\n      'addons_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterAddonsConfig.un_parse(x, 'addons_config') },\n      'subnetwork' => ->(x, _) { x.nil? ? [] : [\"its('subnetwork') { should cmp #{x.inspect} }\"] },\n      'locations' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('locations') { should include #{single.inspect} }\" } },\n      'resource_labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('resource_labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'label_fingerprint' => ->(x, _) { x.nil? ? [] : [\"its('label_fingerprint') { should cmp #{x.inspect} }\"] },\n      'legacy_abac' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterLegacyAbac.un_parse(x, 'legacy_abac') },\n      'network_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterNetworkPolicy.un_parse(x, 'network_policy') },\n      'default_max_pods_constraint' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterDefaultMaxPodsConstraint.un_parse(x, 'default_max_pods_constraint') },\n      'ip_allocation_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterIpAllocationPolicy.un_parse(x, 'ip_allocation_policy') },\n      'endpoint' => ->(x, _) { x.nil? ? [] : [\"its('endpoint') { should cmp #{x.inspect} }\"] },\n      'initial_cluster_version' => ->(x, _) { x.nil? ? [] : [\"its('initial_cluster_version') { should cmp #{x.inspect} }\"] },\n      'current_master_version' => ->(x, _) { x.nil? ? [] : [\"its('current_master_version') { should cmp #{x.inspect} }\"] },\n      'current_node_version' => ->(x, _) { x.nil? ? [] : [\"its('current_node_version') { should cmp #{x.inspect} }\"] },\n      'create_time' => ->(x, _) { x.nil? ? [] : [\"its('create_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'status' => ->(x, _) { x.nil? ? [] : [\"its('status') { should cmp #{x.inspect} }\"] },\n      'status_message' => ->(x, _) { x.nil? ? [] : [\"its('status_message') { should cmp #{x.inspect} }\"] },\n      'node_ipv4_cidr_size' => ->(x, _) { x.nil? ? [] : [\"its('node_ipv4_cidr_size') { should cmp #{x.inspect} }\"] },\n      'services_ipv4_cidr' => ->(x, _) { x.nil? ? [] : [\"its('services_ipv4_cidr') { should cmp #{x.inspect} }\"] },\n      'current_node_count' => ->(x, _) { x.nil? ? [] : [\"its('current_node_count') { should cmp #{x.inspect} }\"] },\n      'expire_time' => ->(x, _) { x.nil? ? [] : [\"its('expire_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'enable_tpu' => ->(x, _) { x.nil? ? [] : [\"its('enable_tpu') { should cmp #{x.inspect} }\"] },\n      'tpu_ipv4_cidr_block' => ->(x, _) { x.nil? ? [] : [\"its('tpu_ipv4_cidr_block') { should cmp #{x.inspect} }\"] },\n      'conditions' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('conditions') { should include '#{single.to_json}' }\" } },\n      'master_authorized_networks_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalClusterMasterAuthorizedNetworksConfig.un_parse(x, 'master_authorized_networks_config') },\n      'location' => ->(x, _) { x.nil? ? [] : [\"its('location') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'RegionalCluster'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_container_regional_cluster',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_regional_clusters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ContainerRegionalClusters < GcpResourceBase\n  name 'google_container_regional_clusters'\n  desc 'RegionalCluster plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:initial_node_counts, field: :initial_node_count)\n  filter_table_config.add(:node_configs, field: :node_config)\n  filter_table_config.add(:master_auths, field: :master_auth)\n  filter_table_config.add(:logging_services, field: :logging_service)\n  filter_table_config.add(:monitoring_services, field: :monitoring_service)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:private_cluster_configs, field: :private_cluster_config)\n  filter_table_config.add(:cluster_ipv4_cidrs, field: :cluster_ipv4_cidr)\n  filter_table_config.add(:addons_configs, field: :addons_config)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:locations, field: :locations)\n  filter_table_config.add(:resource_labels, field: :resource_labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:legacy_abacs, field: :legacy_abac)\n  filter_table_config.add(:network_policies, field: :network_policy)\n  filter_table_config.add(:default_max_pods_constraints, field: :default_max_pods_constraint)\n  filter_table_config.add(:ip_allocation_policies, field: :ip_allocation_policy)\n  filter_table_config.add(:endpoints, field: :endpoint)\n  filter_table_config.add(:initial_cluster_versions, field: :initial_cluster_version)\n  filter_table_config.add(:current_master_versions, field: :current_master_version)\n  filter_table_config.add(:current_node_versions, field: :current_node_version)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:node_ipv4_cidr_sizes, field: :node_ipv4_cidr_size)\n  filter_table_config.add(:services_ipv4_cidrs, field: :services_ipv4_cidr)\n  filter_table_config.add(:current_node_counts, field: :current_node_count)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:enable_tpus, field: :enable_tpu)\n  filter_table_config.add(:tpu_ipv4_cidr_blocks, field: :tpu_ipv4_cidr_block)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:master_authorized_networks_configs, field: :master_authorized_networks_config)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('clusters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'initialNodeCount' => ->(obj) { [:initial_node_count, obj['initialNodeCount']] },\n      'nodeConfig' => ->(obj) { [:node_config, GoogleInSpec::Container::Property::RegionalClusterNodeConfig.new(obj['nodeConfig'], to_s)] },\n      'masterAuth' => ->(obj) { [:master_auth, GoogleInSpec::Container::Property::RegionalClusterMasterAuth.new(obj['masterAuth'], to_s)] },\n      'loggingService' => ->(obj) { [:logging_service, obj['loggingService']] },\n      'monitoringService' => ->(obj) { [:monitoring_service, obj['monitoringService']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'privateClusterConfig' => ->(obj) { [:private_cluster_config, GoogleInSpec::Container::Property::RegionalClusterPrivateClusterConfig.new(obj['privateClusterConfig'], to_s)] },\n      'clusterIpv4Cidr' => ->(obj) { [:cluster_ipv4_cidr, obj['clusterIpv4Cidr']] },\n      'addonsConfig' => ->(obj) { [:addons_config, GoogleInSpec::Container::Property::RegionalClusterAddonsConfig.new(obj['addonsConfig'], to_s)] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'locations' => ->(obj) { [:locations, obj['locations']] },\n      'resourceLabels' => ->(obj) { [:resource_labels, obj['resourceLabels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'legacyAbac' => ->(obj) { [:legacy_abac, GoogleInSpec::Container::Property::RegionalClusterLegacyAbac.new(obj['legacyAbac'], to_s)] },\n      'networkPolicy' => ->(obj) { [:network_policy, GoogleInSpec::Container::Property::RegionalClusterNetworkPolicy.new(obj['networkPolicy'], to_s)] },\n      'defaultMaxPodsConstraint' => ->(obj) { [:default_max_pods_constraint, GoogleInSpec::Container::Property::RegionalClusterDefaultMaxPodsConstraint.new(obj['defaultMaxPodsConstraint'], to_s)] },\n      'ipAllocationPolicy' => ->(obj) { [:ip_allocation_policy, GoogleInSpec::Container::Property::RegionalClusterIpAllocationPolicy.new(obj['ipAllocationPolicy'], to_s)] },\n      'endpoint' => ->(obj) { [:endpoint, obj['endpoint']] },\n      'initialClusterVersion' => ->(obj) { [:initial_cluster_version, obj['initialClusterVersion']] },\n      'currentMasterVersion' => ->(obj) { [:current_master_version, obj['currentMasterVersion']] },\n      'currentNodeVersion' => ->(obj) { [:current_node_version, obj['currentNodeVersion']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'nodeIpv4CidrSize' => ->(obj) { [:node_ipv4_cidr_size, obj['nodeIpv4CidrSize']] },\n      'servicesIpv4Cidr' => ->(obj) { [:services_ipv4_cidr, obj['servicesIpv4Cidr']] },\n      'currentNodeCount' => ->(obj) { [:current_node_count, obj['currentNodeCount']] },\n      'expireTime' => ->(obj) { [:expire_time, parse_time_string(obj['expireTime'])] },\n      'enableTpu' => ->(obj) { [:enable_tpu, obj['enableTpu']] },\n      'tpuIpv4CidrBlock' => ->(obj) { [:tpu_ipv4_cidr_block, obj['tpuIpv4CidrBlock']] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Container::Property::RegionalClusterConditionsArray.parse(obj['conditions'], to_s)] },\n      'masterAuthorizedNetworksConfig' => ->(obj) { [:master_authorized_networks_config, GoogleInSpec::Container::Property::RegionalClusterMasterAuthorizedNetworksConfig.new(obj['masterAuthorizedNetworksConfig'], to_s)] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project location name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_regional_node_pool.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/container/property/regionalnodepool_autoscaling'\nrequire 'google/container/property/regionalnodepool_conditions'\nrequire 'google/container/property/regionalnodepool_config'\nrequire 'google/container/property/regionalnodepool_config_accelerators'\nrequire 'google/container/property/regionalnodepool_config_taints'\nrequire 'google/container/property/regionalnodepool_management'\nrequire 'google/container/property/regionalnodepool_management_upgrade_options'\nrequire 'google/container/property/regionalnodepool_max_pods_constraint'\n\n# A provider to manage Google Kubernetes Engine resources.\nclass ContainerRegionalNodePool < GcpResourceBase\n  name 'google_container_regional_node_pool'\n  desc 'RegionalNodePool'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :config\n  attr_reader :initial_node_count\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :version\n  attr_reader :autoscaling\n  attr_reader :management\n  attr_reader :max_pods_constraint\n  attr_reader :conditions\n  attr_reader :pod_ipv4_cidr_size\n  attr_reader :cluster\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @config = GoogleInSpec::Container::Property::RegionalNodePoolConfig.new(@fetched['config'], to_s)\n    @initial_node_count = @fetched['initialNodeCount']\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @version = @fetched['version']\n    @autoscaling = GoogleInSpec::Container::Property::RegionalNodePoolAutoscaling.new(@fetched['autoscaling'], to_s)\n    @management = GoogleInSpec::Container::Property::RegionalNodePoolManagement.new(@fetched['management'], to_s)\n    @max_pods_constraint = GoogleInSpec::Container::Property::RegionalNodePoolMaxPodsConstraint.new(@fetched['maxPodsConstraint'], to_s)\n    @conditions = GoogleInSpec::Container::Property::RegionalNodePoolConditionsArray.parse(@fetched['conditions'], to_s)\n    @pod_ipv4_cidr_size = @fetched['podIpv4CidrSize']\n    @cluster = @fetched['cluster']\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionalNodePool #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalNodePoolConfig.un_parse(x, 'config') },\n      'initial_node_count' => ->(x, _) { x.nil? ? [] : [\"its('initial_node_count') { should cmp #{x.inspect} }\"] },\n      'status' => ->(x, _) { x.nil? ? [] : [\"its('status') { should cmp #{x.inspect} }\"] },\n      'status_message' => ->(x, _) { x.nil? ? [] : [\"its('status_message') { should cmp #{x.inspect} }\"] },\n      'version' => ->(x, _) { x.nil? ? [] : [\"its('version') { should cmp #{x.inspect} }\"] },\n      'autoscaling' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalNodePoolAutoscaling.un_parse(x, 'autoscaling') },\n      'management' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalNodePoolManagement.un_parse(x, 'management') },\n      'max_pods_constraint' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Container::Property::RegionalNodePoolMaxPodsConstraint.un_parse(x, 'max_pods_constraint') },\n      'conditions' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('conditions') { should include '#{single.to_json}' }\" } },\n      'pod_ipv4_cidr_size' => ->(x, _) { x.nil? ? [] : [\"its('pod_ipv4_cidr_size') { should cmp #{x.inspect} }\"] },\n      'cluster' => ->(x, _) { x.nil? ? [] : [\"its('cluster') { should cmp #{x.inspect} }\"] },\n      'location' => ->(x, _) { x.nil? ? [] : [\"its('location') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'RegionalNodePool'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_container_regional_node_pool',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_container_regional_node_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ContainerRegionalNodePools < GcpResourceBase\n  name 'google_container_regional_node_pools'\n  desc 'RegionalNodePool plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:initial_node_counts, field: :initial_node_count)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:versions, field: :version)\n  filter_table_config.add(:autoscalings, field: :autoscaling)\n  filter_table_config.add(:managements, field: :management)\n  filter_table_config.add(:max_pods_constraints, field: :max_pods_constraint)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:pod_ipv4_cidr_sizes, field: :pod_ipv4_cidr_size)\n  filter_table_config.add(:clusters, field: :cluster)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('nodePools')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::Container::Property::RegionalNodePoolConfig.new(obj['config'], to_s)] },\n      'initialNodeCount' => ->(obj) { [:initial_node_count, obj['initialNodeCount']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'version' => ->(obj) { [:version, obj['version']] },\n      'autoscaling' => ->(obj) { [:autoscaling, GoogleInSpec::Container::Property::RegionalNodePoolAutoscaling.new(obj['autoscaling'], to_s)] },\n      'management' => ->(obj) { [:management, GoogleInSpec::Container::Property::RegionalNodePoolManagement.new(obj['management'], to_s)] },\n      'maxPodsConstraint' => ->(obj) { [:max_pods_constraint, GoogleInSpec::Container::Property::RegionalNodePoolMaxPodsConstraint.new(obj['maxPodsConstraint'], to_s)] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Container::Property::RegionalNodePoolConditionsArray.parse(obj['conditions'], to_s)] },\n      'podIpv4CidrSize' => ->(obj) { [:pod_ipv4_cidr_size, obj['podIpv4CidrSize']] },\n      'cluster' => ->(obj) { [:cluster, obj['cluster']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project location cluster name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dataproc_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/cluster_config'\nrequire 'google/dataproc/property/cluster_config_encryption_config'\nrequire 'google/dataproc/property/cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/cluster_config_initialization_actions'\nrequire 'google/dataproc/property/cluster_config_master_config'\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_security_config'\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/cluster_config_software_config'\nrequire 'google/dataproc/property/cluster_config_worker_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\n\n# A provider to manage Cloud Dataproc resources.\nclass DataprocCluster < GcpResourceBase\n  name 'google_dataproc_cluster'\n  desc 'Cluster'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :cluster_name\n  attr_reader :labels\n  attr_reader :config\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @cluster_name = @fetched['clusterName']\n    @labels = @fetched['labels']\n    @config = GoogleInSpec::Dataproc::Property::ClusterConfig.new(@fetched['config'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Cluster #{@params[:clusterName]}\"\n  end\n\n  def un_parse\n    {\n      'cluster_name' => ->(x, _) { x.nil? ? [] : [\"its('cluster_name') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Dataproc::Property::ClusterConfig.un_parse(x, 'config') },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Cluster'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_dataproc_cluster',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/clusters/{{cluster_name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dataproc_clusters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocClusters < GcpResourceBase\n  name 'google_dataproc_clusters'\n  desc 'Cluster plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:cluster_names, field: :cluster_name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('clusters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'clusterName' => ->(obj) { [:cluster_name, obj['clusterName']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::Dataproc::Property::ClusterConfig.new(obj['config'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region clusterName}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/clusters'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dns_managed_zone.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleDnsManagedZone < GcpResourceBase\n    name 'google_dns_managed_zone'\n    desc 'Verifies settings for a GCP DNS managed zone'\n\n    example \"\n      describe google_dns_managed_zone(project: 'chef-inspec-gcp',  zone: 'zone-name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @managed_zone = @gcp.gcp_client(Google::Apis::DnsV2beta1::DnsService).get_managed_zone(opts[:project], opts[:zone])\n        create_resource_methods(@managed_zone)\n        @key_specs = {}\n        if defined?(@managed_zone.dnssec_config.default_key_specs) && !@managed_zone.dnssec_config.default_key_specs.nil?\n          @managed_zone.dnssec_config.default_key_specs.each do |spec|\n            @key_specs[spec.key_type] = spec.algorithm\n          end\n        end\n      end\n    end\n\n    def exists?\n      !@managed_zone.nil?\n    end\n\n    def creation_time_date\n      return false if !defined?(@managed_zone.creation_time) || @managed_zone.creation_time.nil?\n      Time.parse(@managed_zone.creation_time)\n    end\n\n    def key_signing_key_algorithm\n      raise Inspec::Exceptions::ResourceFailed, \"google_dns_managed_zone is missing expected property 'dnssec_config.default_key_specs KEY_SIGNING'\" if !@key_specs.key?('KEY_SIGNING')\n      @key_specs['KEY_SIGNING']\n    end\n\n    def zone_signing_key_algorithm\n      raise Inspec::Exceptions::ResourceFailed, \"google_dns_managed_zone is missing expected property 'dnssec_config.default_key_specs ZONE_SIGNING'\" if !@key_specs.key?('ZONE_SIGNING')\n      @key_specs['ZONE_SIGNING']\n    end\n\n    def to_s\n      \"DNS Managed Zone #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dns_managed_zones.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/dns_v2beta1'\n\nmodule Inspec::Resources\n  class GoogleDnsManagedZones < GcpResourceBase\n    name 'google_dns_managed_zones'\n    desc 'Verifies settings for GCP DNS managed zones in bulk'\n\n    example \"\n      describe google_dns_managed_zones(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:zone_ids, field: :zone_id)\n    filter_table_config.add(:zone_names, field: :zone_name)\n    filter_table_config.add(:zone_dns_names, field: :zone_dns_name)\n    filter_table_config.add(:dnssec_config_states, field: :dnssec_config_state)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      managed_zones = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @managed_zones = @gcp.gcp_client(Google::Apis::DnsV2beta1::DnsService).list_managed_zones(@project, page_token: next_page)\n        end\n        return [] if !@managed_zones || !@managed_zones.managed_zones\n        @managed_zones.managed_zones.map do |zone|\n          dns_enabled=false\n          if defined?(zone.dnssec_config.state) && (zone.dnssec_config.state == 'on')\n            dns_enabled=true\n          end\n          managed_zones+=[{ zone_id: zone.id,\n                            zone_name: zone.name,\n                            zone_dns_name: zone.dns_name,\n                            dnssec_config_state: dns_enabled }]\n        end\n        next_page = @managed_zones.next_page_token\n        break unless next_page\n      end\n      @table = managed_zones\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dns_resource_record_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud DNS resources.\nclass DNSResourceRecordSet < GcpResourceBase\n  name 'google_dns_resource_record_set'\n  desc 'ResourceRecordSet'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :type\n  attr_reader :ttl\n  attr_reader :target\n  attr_reader :managed_zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    @fetched = unwrap(fetched, params)\n    parse unless @fetched.nil?\n  end\n\n  def identity\n    %w{name type}\n  end\n\n  def collection_item\n    'rrsets'\n  end\n\n  def unwrap(fetched, params)\n    fetched[collection_item].find { |result| identity.all? { |id| result[id.to_sym] == params[id] } }\n  end\n\n  def parse\n    @name = @fetched['name']\n    @type = @fetched['type']\n    @ttl = @fetched['ttl']\n    @target = @fetched['rrdatas']\n    @managed_zone = @fetched['managed_zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ResourceRecordSet #{@params[:type]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'type' => ->(x, _) { x.nil? ? [] : [\"its('type') { should cmp #{x.inspect} }\"] },\n      'ttl' => ->(x, _) { x.nil? ? [] : [\"its('ttl') { should cmp #{x.inspect} }\"] },\n      'target' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('target') { should include #{single.inspect} }\" } },\n      'managed_zone' => ->(x, _) { x.nil? ? [] : [\"its('managed_zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'ResourceRecordSet'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_dns_resource_record_set',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/dns/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones/{{managed_zone}}/rrsets?name={{name}}&type={{type}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_dns_resource_record_sets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DNSResourceRecordSets < GcpResourceBase\n  name 'google_dns_resource_record_sets'\n  desc 'ResourceRecordSet plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:ttls, field: :ttl)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:managed_zones, field: :managed_zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('rrsets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'ttl' => ->(obj) { [:ttl, obj['ttl']] },\n      'rrdatas' => ->(obj) { [:target, obj['rrdatas']] },\n      'managed_zone' => ->(obj) { [:managed_zone, obj['managed_zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project managed_zone name type}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/dns/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones/{{managed_zone}}/rrsets'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_filestore_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/filestore/property/instance_file_shares'\nrequire 'google/filestore/property/instance_networks'\n\n# A provider to manage Cloud Filestore resources.\nclass FilestoreInstance < GcpResourceBase\n  name 'google_filestore_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :create_time\n  attr_reader :tier\n  attr_reader :labels\n  attr_reader :file_shares\n  attr_reader :networks\n  attr_reader :etag\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @tier = @fetched['tier']\n    @labels = @fetched['labels']\n    @file_shares = GoogleInSpec::Filestore::Property::InstanceFileSharesArray.parse(@fetched['fileShares'], to_s)\n    @networks = GoogleInSpec::Filestore::Property::InstanceNetworksArray.parse(@fetched['networks'], to_s)\n    @etag = @fetched['etag']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'create_time' => ->(x, _) { x.nil? ? [] : [\"its('create_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'tier' => ->(x, _) { x.nil? ? [] : [\"its('tier') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'file_shares' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('file_shares') { should include '#{single.to_json}' }\" } },\n      'networks' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('networks') { should include '#{single.to_json}' }\" } },\n      'etag' => ->(x, _) { x.nil? ? [] : [\"its('etag') { should cmp #{x.inspect} }\"] },\n      'zone' => ->(x, _) { x.nil? ? [] : [\"its('zone') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Instance'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_filestore_instance',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://file.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{zone}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_filestore_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass FilestoreInstances < GcpResourceBase\n  name 'google_filestore_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:tiers, field: :tier)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:file_shares, field: :file_shares)\n  filter_table_config.add(:networks, field: :networks)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'tier' => ->(obj) { [:tier, obj['tier']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'fileShares' => ->(obj) { [:file_shares, GoogleInSpec::Filestore::Property::InstanceFileSharesArray.parse(obj['fileShares'], to_s)] },\n      'networks' => ->(obj) { [:networks, GoogleInSpec::Filestore::Property::InstanceNetworksArray.parse(obj['networks'], to_s)] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project zone name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://file.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{zone}}/instances'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_crypto_key.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'time'\nrequire 'google/apis/cloudkms_v1'\n\nmodule Inspec::Resources\n  class GoogleKMSCryptoKey < GcpResourceBase\n    name 'google_kms_crypto_key'\n    desc 'Verifies settings for a KMS key ring'\n\n    example \"\n      describe google_kms_crypto_key(project: 'chef-inspec-gcp',   location: 'us-east1',  key_ring_name: 'key-ring', name: 'crypto-key') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @kms_crypto_key = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_crypto_key(\"projects/#{opts[:project]}/locations/#{opts[:location]}/keyRings/#{opts[:key_ring_name]}/cryptoKeys/#{opts[:name]}\")\n        create_resource_methods(@kms_crypto_key)\n      end\n    end\n\n    def crypto_key_name\n      return '' if !defined?(name) || name.nil?\n      name.split('/').last\n    end\n\n    def create_time_date\n      return false if !defined?(create_time) || create_time.nil?\n      Time.parse(create_time)\n    end\n\n    # this is added for completeness as crypto key IAM bindings use the crypto_key_url as an identifier\n    def crypto_key_url\n      return '' if !defined?(name) || name.nil?\n      name\n    end\n\n    def next_rotation_time_date\n      return false if !defined?(next_rotation_time) || next_rotation_time.nil?\n      Time.parse(next_rotation_time)\n    end\n\n    def primary_create_time_date\n      return false if !defined?(primary.create_time) || primary.create_time.nil?\n      Time.parse(primary.create_time)\n    end\n\n    def rotation_period_seconds\n      return 0 if !defined?(rotation_period) || rotation_period.nil?\n      result = nil\n      conversion = { 's'=>1, 'm'=>60, 'h'=>60*60, 'd'=>24*60*60 }\n      conversion.each do |time_unit, multiplier|\n        next if /#{time_unit}/.match(rotation_period).nil?\n        result=rotation_period.gsub(time_unit, '').to_i*multiplier\n      end\n      result\n    end\n\n    def primary_name\n      return '' if !defined?(primary.name) || primary.name.nil?\n      primary.name\n    end\n\n    def primary_state\n      return false if !defined?(primary.state) || primary.state.nil?\n      primary.state\n    end\n\n    def exists?\n      !@kms_crypto_key.nil?\n    end\n\n    def to_s\n      \"Crytpo Key #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_crypto_key_iam_binding.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSCryptoKeyIAMBinding < GcpResourceBase\n    name 'google_kms_crypto_key_iam_binding'\n    desc 'Verifies settings for a single KMS Crypto Key IAM binding'\n\n    example \"\n      describe google_kms_crypto_key_iam_binding(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name',  role: 'roles/owner') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @crypto_key_url = opts[:crypto_key_url]\n      @role = opts[:role]\n      @iam_binding_exists = false\n      @members_list=[]\n      catch_gcp_errors do\n        # NOTE: this is the same call as for the plural iam_bindings resource because there isn't an easy way to pull out a singular binding\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_crypto_key_iam_policy(@crypto_key_url)\n        raise Inspec::Exceptions::ResourceFailed, \"google_kms_crypto_key_iam_binding is missing expected IAM policy 'bindings' property\" if !@iam_bindings || !@iam_bindings.bindings\n        @iam_bindings.bindings.each do |binding|\n          next if binding.role != @role\n          @iam_binding_exists=true\n          @members_list=binding.members\n        end\n      end\n    end\n\n    # return the list of users corresponding to the role\n    def members\n      @members_list\n    end\n\n    def exists?\n      @iam_binding_exists\n    end\n\n    def to_s\n      \"Crypto Key IAM Binding #{@role}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_crypto_key_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSCryptoKeyIAMBindings < GcpResourceBase\n    name 'google_kms_crypto_key_iam_bindings'\n    desc 'Verifies settings for GCP KMS Crypto Key IAM Bindings in bulk'\n\n    example \"\n      describe google_kms_key_ring_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @crypto_key_url = opts[:crypto_key_url]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_crypto_key_iam_policy(@crypto_key_url)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_crypto_keys.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSCryptoKeys < GcpResourceBase\n    name 'google_kms_crypto_keys'\n    desc 'Verifies settings for GCP KMS crypto keys in bulk'\n\n    example \"\n      describe google_kms_crypto_keys(project: 'chef-inspec-gcp',   location: 'us-east1',  crypto_key_name: 'key-ring') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @location = opts[:location]\n      @key_ring_name = opts[:key_ring_name]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:crypto_key_names, field: :crypto_key_name)\n    filter_table_config.add(:crypto_key_urls, field: :crypto_key_url)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      crypto_key_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @crypto_keys = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).list_project_location_key_ring_crypto_keys(\"projects/#{@project}/locations/#{@location}/keyRings/#{@key_ring_name}\", page_token: next_page)\n        end\n        return [] if !@crypto_keys || !@crypto_keys.crypto_keys\n        @crypto_keys.crypto_keys.map do |crypto_key|\n          crypto_key_rows += [{ crypto_key_name: crypto_key.name.split('/').last,\n                                crypto_key_url: crypto_key.name }]\n        end\n        next_page = @crypto_keys.next_page_token\n        break unless next_page\n      end\n      @table = crypto_key_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_key_ring.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'time'\nrequire 'google/apis/cloudkms_v1'\n\nmodule Inspec::Resources\n  class GoogleKMSKeyRing < GcpResourceBase\n    name 'google_kms_key_ring'\n    desc 'Verifies settings for a KMS key ring'\n\n    example \"\n      describe google_kms_key_ring(project: 'chef-inspec-gcp',  location: 'us-east1', name: 'key-ring-name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @kms_key_ring = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring(\"projects/#{opts[:project]}/locations/#{opts[:location]}/keyRings/#{opts[:name]}\")\n        create_resource_methods(@kms_key_ring)\n      end\n    end\n\n    def key_ring_name\n      return '' if !defined?(name) || name.nil?\n      name.split('/').last\n    end\n\n    def create_time_date\n      return false if !defined?(create_time) || create_time.nil?\n      Time.parse(create_time)\n    end\n\n    # this is added for completeness as key ring IAM bindings use the key_ring_url as an identifier\n    def key_ring_url\n      return '' if !defined?(name) || name.nil?\n      name\n    end\n\n    def exists?\n      !@kms_key_ring.nil?\n    end\n\n    def to_s\n      \"Key Ring #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_key_ring_iam_binding.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSKeyRingIAMBinding < GcpResourceBase\n    name 'google_kms_key_ring_iam_binding'\n    desc 'Verifies settings for a single KMS Key Ring IAM binding'\n\n    example \"\n      describe google_kms_key_ring_iam_binding(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring', role: 'roles/compute.admin') do\n        it { should exist }\n        its('members') {should include 'user:someuser@domain.com' }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @key_ring_url = opts[:key_ring_url]\n      @role = opts[:role]\n      @iam_binding_exists = false\n      @members_list=[]\n      catch_gcp_errors do\n        # NOTE: this is the same call as for the plural iam_bindings resource because there isn't an easy way to pull out a singular binding\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_iam_policy(@key_ring_url)\n        raise Inspec::Exceptions::ResourceFailed, \"google_kms_key_ring_iam_binding is missing expected IAM policy 'bindings' property\" if !@iam_bindings || !@iam_bindings.bindings\n        @iam_bindings.bindings.each do |binding|\n          next if binding.role != @role\n          @iam_binding_exists=true\n          @members_list=binding.members\n        end\n      end\n    end\n\n    # return the list of users corresponding to the role\n    def members\n      @members_list\n    end\n\n    def exists?\n      @iam_binding_exists\n    end\n\n    def to_s\n      \"Key Ring IAM Binding #{@role}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_key_ring_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSKeyRingIAMBindings < GcpResourceBase\n    name 'google_kms_key_ring_iam_bindings'\n    desc 'Verifies settings for GCP KMS key ring IAM bindings in bulk'\n\n    example \"\n      describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @key_ring_url = opts[:key_ring_url]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_iam_policy(@key_ring_url)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_kms_key_rings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSKeyRings < GcpResourceBase\n    name 'google_kms_key_rings'\n    desc 'Verifies settings for GCP KMS key rings in bulk'\n\n    example \"\n      describe google_kms_key_rings(project: 'chef-inspec-gcp', location: 'us-east1') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @location = opts[:location]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:key_ring_names, field: :key_ring_name)\n    filter_table_config.add(:key_ring_urls, field: :key_ring_url)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      key_ring_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @key_rings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).list_project_location_key_rings(\"projects/#{@project}/locations/#{@location}\", page_token: next_page)\n        end\n        return [] if !@key_rings || !@key_rings.key_rings\n        @key_rings.key_rings.map do |key_ring|\n          key_ring_rows += [{ key_ring_name: key_ring.name.split('/').last,\n                              key_ring_url: key_ring.name }]\n        end\n        next_page = @key_rings.next_page_token\n        break unless next_page\n      end\n      @table = key_ring_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_folder_exclusion.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Stackdriver Logging resources.\nclass LoggingFolderExclusion < GcpResourceBase\n  name 'google_logging_folder_exclusion'\n  desc 'FolderExclusion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :folder\n  attr_reader :name\n  attr_reader :description\n  attr_reader :filter\n  attr_reader :disabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @folder = @fetched['folder']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @filter = @fetched['filter']\n    @disabled = @fetched['disabled']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FolderExclusion #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'folder' => ->(x, _) { x.nil? ? [] : [\"its('folder') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'filter' => ->(x, _) { x.nil? ? [] : [\"its('filter') { should cmp #{x.inspect} }\"] },\n      'disabled' => ->(x, _) { x.nil? ? [] : [\"its('disabled') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'FolderExclusion'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_logging_folder_exclusion',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/exclusions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_folder_exclusions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingFolderExclusions < GcpResourceBase\n  name 'google_logging_folder_exclusions'\n  desc 'FolderExclusion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:folders, field: :folder)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:disableds, field: :disabled)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('exclusions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'folder' => ->(obj) { [:folder, obj['folder']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{folder name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/exclusions'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_folder_log_sink.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Stackdriver Logging resources.\nclass LoggingFolderLogSink < GcpResourceBase\n  name 'google_logging_folder_log_sink'\n  desc 'FolderLogSink'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :folder\n  attr_reader :name\n  attr_reader :filter\n  attr_reader :destination\n  attr_reader :writer_identity\n  attr_reader :include_children\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @folder = @fetched['folder']\n    @name = @fetched['name']\n    @filter = @fetched['filter']\n    @destination = @fetched['destination']\n    @writer_identity = @fetched['writerIdentity']\n    @include_children = @fetched['includeChildren']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FolderLogSink #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'folder' => ->(x, _) { x.nil? ? [] : [\"its('folder') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'filter' => ->(x, _) { x.nil? ? [] : [\"its('filter') { should cmp #{x.inspect} }\"] },\n      'destination' => ->(x, _) { x.nil? ? [] : [\"its('destination') { should cmp #{x.inspect} }\"] },\n      'writer_identity' => ->(x, _) { x.nil? ? [] : [\"its('writer_identity') { should cmp #{x.inspect} }\"] },\n      'include_children' => ->(x, _) { x.nil? ? [] : [\"its('include_children') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'FolderLogSink'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_logging_folder_log_sink',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/sinks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_folder_log_sinks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingFolderLogSinks < GcpResourceBase\n  name 'google_logging_folder_log_sinks'\n  desc 'FolderLogSink plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:folders, field: :folder)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:destinations, field: :destination)\n  filter_table_config.add(:writer_identities, field: :writer_identity)\n  filter_table_config.add(:include_children, field: :include_children)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sinks')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'folder' => ->(obj) { [:folder, obj['folder']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'destination' => ->(obj) { [:destination, obj['destination']] },\n      'writerIdentity' => ->(obj) { [:writer_identity, obj['writerIdentity']] },\n      'includeChildren' => ->(obj) { [:include_children, obj['includeChildren']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{folder name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/sinks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_organization_log_sink.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Stackdriver Logging resources.\nclass LoggingOrganizationLogSink < GcpResourceBase\n  name 'google_logging_organization_log_sink'\n  desc 'OrganizationLogSink'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :organization\n  attr_reader :name\n  attr_reader :filter\n  attr_reader :destination\n  attr_reader :writer_identity\n  attr_reader :include_children\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @organization = @fetched['organization']\n    @name = @fetched['name']\n    @filter = @fetched['filter']\n    @destination = @fetched['destination']\n    @writer_identity = @fetched['writerIdentity']\n    @include_children = @fetched['includeChildren']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationLogSink #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'organization' => ->(x, _) { x.nil? ? [] : [\"its('organization') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'filter' => ->(x, _) { x.nil? ? [] : [\"its('filter') { should cmp #{x.inspect} }\"] },\n      'destination' => ->(x, _) { x.nil? ? [] : [\"its('destination') { should cmp #{x.inspect} }\"] },\n      'writer_identity' => ->(x, _) { x.nil? ? [] : [\"its('writer_identity') { should cmp #{x.inspect} }\"] },\n      'include_children' => ->(x, _) { x.nil? ? [] : [\"its('include_children') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'OrganizationLogSink'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_logging_organization_log_sink',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'organizations/{{organization}}/sinks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_organization_log_sinks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingOrganizationLogSinks < GcpResourceBase\n  name 'google_logging_organization_log_sinks'\n  desc 'OrganizationLogSink plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:organizations, field: :organization)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:destinations, field: :destination)\n  filter_table_config.add(:writer_identities, field: :writer_identity)\n  filter_table_config.add(:include_children, field: :include_children)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sinks')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'organization' => ->(obj) { [:organization, obj['organization']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'destination' => ->(obj) { [:destination, obj['destination']] },\n      'writerIdentity' => ->(obj) { [:writer_identity, obj['writerIdentity']] },\n      'includeChildren' => ->(obj) { [:include_children, obj['includeChildren']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{organization name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'organizations/{{organization}}/sinks'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_project_exclusion.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/logging_v2'\n\nmodule Inspec::Resources\n  class GoogleLoggingProjectExclusion < GcpResourceBase\n    name 'google_logging_project_exclusion'\n    desc 'Verifies settings for a project logging exclusion'\n\n    example \"\n      describe google_logging_project_exclusion(project: 'chef-inspec-gcp',  exclusion: 'exclusion-name-abcd') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @exclusion = opts[:exclusion]\n      catch_gcp_errors do\n        @logging_exclusion = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).get_project_exclusion(\"projects/#{opts[:project]}/exclusions/#{opts[:exclusion]}\")\n        create_resource_methods(@logging_exclusion)\n      end\n    end\n\n    def exists?\n      !@logging_exclusion.nil?\n    end\n\n    def to_s\n      \"Logging Project Exclusion #{@exclusion}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_project_sink.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/logging_v2'\n\nmodule Inspec::Resources\n  class GoogleLoggingProjectSink < GcpResourceBase\n    name 'google_logging_project_sink'\n    desc 'Verifies settings for a project logging sink'\n\n    example \"\n      describe google_logging_project_sink(project: 'chef-inspec-gcp',  sink: 'sink-name-abcd') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @sink = opts[:sink]\n      catch_gcp_errors do\n        @logging_sink = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).get_project_sink(\"projects/#{opts[:project]}/sinks/#{opts[:sink]}\")\n        create_resource_methods(@logging_sink)\n      end\n    end\n\n    def exists?\n      !@logging_sink.nil?\n    end\n\n    def to_s\n      \"Logging Project Sink #{@sink}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_logging_project_sinks.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleLoggingProjectSinks < GcpResourceBase\n    name 'google_logging_project_sinks'\n    desc 'Verifies settings for GCP project logging sinks in bulk'\n\n    example \"\n      describe google_logging_project_sinks(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:sink_names, field: :sink_name)\n    filter_table_config.add(:sink_destinations, field: :sink_destination)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      sink_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @sinks = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).list_project_sinks(\"projects/#{@project}\", page_token: next_page)\n        end\n        return [] if !@sinks || !@sinks.sinks\n        @sinks.sinks.map do |sink|\n          logging_sink = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).get_project_sink(\"projects/#{@project}/sinks/#{sink.name}\")\n          sink_rows+=[{ sink_name: sink.name,\n                        sink_destination: sink.destination,\n                        sink_filter: logging_sink.filter }]\n        end\n        next_page = @sinks.next_page_token\n        break unless next_page\n      end\n      @table = sink_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_ml_engine_model.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/mlengine/property/model_default_version'\n\n# A provider to manage ML Engine resources.\nclass MLEngineModel < GcpResourceBase\n  name 'google_ml_engine_model'\n  desc 'Model'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :default_version\n  attr_reader :regions\n  attr_reader :online_prediction_logging\n  attr_reader :online_prediction_console_logging\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @default_version = GoogleInSpec::MLEngine::Property::ModelDefaultVersion.new(@fetched['defaultVersion'], to_s)\n    @regions = @fetched['regions']\n    @online_prediction_logging = @fetched['onlinePredictionLogging']\n    @online_prediction_console_logging = @fetched['onlinePredictionConsoleLogging']\n    @labels = @fetched['labels']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Model #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'default_version' => ->(x, _) { x.nil? ? [] : GoogleInSpec::MLEngine::Property::ModelDefaultVersion.un_parse(x, 'default_version') },\n      'regions' => ->(x, _) { x.nil? ? [] : x.map { |single| \"its('regions') { should include #{single.inspect} }\" } },\n      'online_prediction_logging' => ->(x, _) { x.nil? ? [] : [\"its('online_prediction_logging') { should cmp #{x.inspect} }\"] },\n      'online_prediction_console_logging' => ->(x, _) { x.nil? ? [] : [\"its('online_prediction_console_logging') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Model'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_ml_engine_model',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://ml.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/models/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_ml_engine_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass MLEngineModels < GcpResourceBase\n  name 'google_ml_engine_models'\n  desc 'Model plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:default_versions, field: :default_version)\n  filter_table_config.add(:regions, field: :regions)\n  filter_table_config.add(:online_prediction_loggings, field: :online_prediction_logging)\n  filter_table_config.add(:online_prediction_console_loggings, field: :online_prediction_console_logging)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('models')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'defaultVersion' => ->(obj) { [:default_version, GoogleInSpec::MLEngine::Property::ModelDefaultVersion.new(obj['defaultVersion'], to_s)] },\n      'regions' => ->(obj) { [:regions, obj['regions']] },\n      'onlinePredictionLogging' => ->(obj) { [:online_prediction_logging, obj['onlinePredictionLogging']] },\n      'onlinePredictionConsoleLogging' => ->(obj) { [:online_prediction_console_logging, obj['onlinePredictionConsoleLogging']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://ml.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/models'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_organization.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleOrganization < GcpResourceBase\n    name 'google_organization'\n    desc 'Verifies settings for an organization'\n\n    example \"\n      describe google_organization(name: 'google.com') do\n        it { should exist }\n        its('name') { should eq 'organizations/1234' }\n        its('display_name') { should eq 'google.com' }\n        its('lifecycle_state') { should eq 'ACTIVE' }\n      end\n    \"\n    def initialize(opts = {})\n      super(opts)\n      @display_name = opts[:name] || opts[:display_name]\n      catch_gcp_errors do\n        @organization = @gcp.gcp_project_client.get_organization(opts[:name])\n        create_resource_methods(@organization)\n      end\n    end\n\n    def label_value_by_key(label_key)\n      return [] if !defined?(labels) || labels.nil?\n      labels.item[label_key]\n    end\n\n    def exists?\n      !@organization.nil?\n    end\n\n    def to_s\n      \"Organization #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_organization_policy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleOrganizationPolicy < GcpResourceBase\n    name 'google_organization_policy'\n    desc 'Verifies configuration of an organization policy'\n\n    example \"\n      describe google_organization_policy(name: 'organizations/123456', constraint: 'constraints/compute.disableGuestAttributesAccess') do\n        it { should exist }\n        its('boolean_policy.enforced') { should be true }\n      end\n    \"\n    def initialize(opts = {})\n      super(opts)\n      @display_name = opts[:name]\n      @constraint = opts[:constraint]\n      catch_gcp_errors do\n        org_policy_request = Google::Apis::CloudresourcemanagerV1::GetOrgPolicyRequest.new\n        org_policy_request.constraint = opts[:constraint]\n        @organization_policy = @gcp.gcp_project_client.get_organization_org_policy(opts[:name], org_policy_request)\n        create_resource_methods(@organization_policy)\n      end\n    end\n\n    def exists?\n      !@organization_policy.nil?\n    end\n\n    def to_s\n      \"Organization #{@display_name} policy for constraint #{@constraint}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_organizations.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeOrganizations < GcpResourceBase\n    name 'google_organizations'\n    desc 'Verifies settings for GCP organizations in bulk'\n\n    example \"\n      describe google_organizations do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      super(opts)\n    end\n\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:names, field: :name)\n    filter_table_config.add(:display_names, field: :display_name)\n    filter_table_config.add(:lifecycle_state, field: :lifecycle_state)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      organizations_rows = []\n      loop do\n        catch_gcp_errors do\n          @organizations = @gcp.gcp_project_client.search_organizations({})\n        end\n        return [] if !@organizations || !@organizations.organizations\n        @organizations.organizations.map do |organization|\n          organizations_rows += [{ name: organization.name,\n                                  display_name: organization.display_name,\n                                  lifecycle_state: organization.lifecycle_state }]\n        end\n        next_page = @organizations.next_page_token\n        break unless next_page\n      end\n      @table = organizations_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProject < GcpResourceBase\n    name 'google_project'\n    desc 'Verifies settings for a project'\n\n    example \"\n      describe google_project(project: 'chef-inspec-gcp') do\n        it { should exist }\n        its('name') { should eq 'chef-inspec-gcp' }\n        its('project_number') { should eq 1041234567833 }\n        its('lifecycle_state') { should eq 'ACTIVE' }\n        its('labels') { should include(key: 'contact', value: 'operations') }\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name] || opts[:project]\n      catch_gcp_errors do\n        @project = @gcp.gcp_project_client.get_project(opts[:project])\n        create_resource_methods(@project)\n      end\n    end\n\n    def label_value_by_key(label_key)\n      return [] if !defined?(labels) || labels.nil?\n      labels.item[label_key]\n    end\n\n    def exists?\n      !@project.nil?\n    end\n\n    def to_s\n      \"Project #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_alert_policies.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/monitoring_v3'\n\nmodule Inspec::Resources\n  class GoogleProjectAlertPolicies < GcpResourceBase\n    name 'google_project_alert_policies'\n    desc 'Verifies settings for GCP project alert policies in bulk'\n\n    example \"\n      describe google_project_alert_policies(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:policy_names, field: :policy_name)\n    filter_table_config.add(:policy_display_names, field: :policy_display_name)\n    filter_table_config.add(:policy_enabled_states, field: :policy_enabled_state)\n    filter_table_config.add(:policy_filter_lists, field: :policy_filter_list)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      policy_rows = []\n      catch_gcp_errors do\n        @policies = @gcp.gcp_client(Google::Apis::MonitoringV3::MonitoringService).list_project_alert_policies(\"projects/#{@project}\")\n      end\n      return [] if !@policies || !@policies.alert_policies\n      @policies.alert_policies.map do |policy|\n        policy_filters = []\n        policy.conditions.each do |condition|\n          next if !defined?(condition.condition_threshold.filter) || condition.condition_threshold.filter.nil?\n          policy_filters+=[condition.condition_threshold.filter]\n        end\n\n        policy_rows+=[{ policy_name: policy.name,\n                        policy_display_name: policy.display_name,\n                        policy_enabled_state: policy.enabled,\n                        policy_filter_list: policy_filters }]\n      end\n      @table = policy_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_alert_policy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/monitoring_v3'\n\nmodule Inspec::Resources\n  class GoogleProjectAlertPolicy < GcpResourceBase\n    name 'google_project_alert_policy'\n    desc 'Verifies settings for a single GCP project alert policy'\n\n    example \"\n      describe google_project_alert_policy(policy: 'projects/spaterson-project/alertPolicies/9271751234503117449') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:policy]\n      catch_gcp_errors do\n        @policy = @gcp.gcp_client(Google::Apis::MonitoringV3::MonitoringService).get_project_alert_policy(opts[:policy])\n        create_resource_methods(@policy)\n      end\n    end\n\n    def enabled?\n      return false if !defined?(@policy.enabled) || @policy.enabled.nil?\n      @policy.enabled\n    end\n\n    def exists?\n      !@policy.nil?\n    end\n\n    def to_s\n      \"Alert Policy #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_alert_policy_condition.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/monitoring_v3'\n\nmodule Inspec::Resources\n  class GoogleProjectAlertPolicyCondition < GcpResourceBase\n    name 'google_project_alert_policy_condition'\n    desc 'Verifies settings for a single GCP project alert policy condition by policy name and filter name'\n\n    example \"\n      describe google_project_alert_policy_condition(policy: 'projects/my-project/alertPolicies/9271751234503117449', filter 'project=\\\"my-project\\\"') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @filter = opts[:filter]\n      @policy = opts[:policy]\n      catch_gcp_errors do\n        @policy_result = @gcp.gcp_client(Google::Apis::MonitoringV3::MonitoringService).get_project_alert_policy(@policy)\n        @condition = condition_for_filter(@filter)\n      end\n    end\n\n    def exists?\n      !@condition.nil?\n    end\n\n    def condition_for_filter(filter)\n      return nil if !defined?(@policy_result.conditions) || @policy_result.conditions.nil?\n      @policy_result.conditions.each do |condition|\n        next if !defined?(condition.condition_threshold.filter) || condition.condition_threshold.filter.nil?\n        return condition if condition.condition_threshold.filter == filter\n      end\n      nil\n    end\n\n    def condition_threshold_value\n      return false if !defined?(@condition.condition_threshold.threshold_value) || @condition.condition_threshold.threshold_value.nil?\n      @condition.condition_threshold.threshold_value\n    end\n\n    def aggregation_alignment_period\n      return false if !defined?(@condition.condition_threshold.aggregations[0].alignment_period) || @condition.condition_threshold.aggregations[0].alignment_period.nil?\n      @condition.condition_threshold.aggregations[0].alignment_period\n    end\n\n    def aggregation_per_series_aligner\n      return false if !defined?(@condition.condition_threshold.aggregations[0].per_series_aligner) || @condition.condition_threshold.aggregations[0].per_series_aligner.nil?\n      @condition.condition_threshold.aggregations[0].per_series_aligner\n    end\n\n    def aggregation_cross_series_reducer\n      return false if !defined?(@condition.condition_threshold.aggregations[0].cross_series_reducer) || @condition.condition_threshold.aggregations[0].cross_series_reducer.nil?\n      @condition.condition_threshold.aggregations[0].cross_series_reducer\n    end\n\n    def to_s\n      \"Alert Policy Condition #{@policy} \\\"#{@filter}\\\"\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_iam_binding.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectIAMBinding < GcpResourceBase\n    name 'google_project_iam_binding'\n    desc 'Verifies settings for a single GCP KMS key ring IAM bindings'\n\n    example \"\n      describe google_kms_key_ring_iam_binding(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring', role: 'roles/compute.admin') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @role = opts[:role]\n      @iam_binding_exists = false\n      @members_list=[]\n      catch_gcp_errors do\n        # NOTE: this is the same call as for the plural iam_bindings resource because there isn't an easy way to pull out a singular binding\n        @iam_bindings = @gcp.gcp_project_client.get_project_iam_policy(@project)\n        raise Inspec::Exceptions::ResourceFailed, \"google_project_iam_binding is missing expected IAM policy 'bindings' property\" if !@iam_bindings || !@iam_bindings.bindings\n        @iam_bindings.bindings.each do |binding|\n          next if binding.role != @role\n          @iam_binding_exists=true\n          @members_list=binding.members\n        end\n      end\n    end\n\n    # return the list of users corresponding to the role\n    def members\n      @members_list\n    end\n\n    def exists?\n      @iam_binding_exists\n    end\n\n    def to_s\n      \"Project IAM Binding #{@role}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectIAMBindings < GcpResourceBase\n    name 'google_project_iam_bindings'\n    desc 'Verifies settings for GCP project iam_bindings in bulk'\n\n    example \"\n      describe google_project_iam_bindings(project: 'chef-inspec-gcp') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_project_client.get_project_iam_policy(@project)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_iam_custom_role.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectIamCustomRole < GcpResourceBase\n    name 'google_project_iam_custom_role'\n    desc 'Verifies settings for a project IAM role'\n\n    example \"\n      describe google_project_iam_custom_role(project: 'chef-inspec-gcp', name: 'admin12345') do\n        it { should exist }\n        its('stage') { should eq 'GA' }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @iam_role = @gcp.gcp_iam_client.get_role(\"projects/#{opts[:project]}/roles/#{opts[:name]}\")\n        create_resource_methods(@iam_role)\n      end\n    end\n\n    def exists?\n      !@iam_role.nil?\n    end\n\n    def to_s\n      \"Project IAM Custom Role #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_logging_audit_config.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectLoggingAuditConfig < GcpResourceBase\n    name 'google_project_logging_audit_config'\n    desc 'Verifies settings for a GCP project logging audit configuration'\n\n    example \"\n      describe google_project_logging_audit_config(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      catch_gcp_errors do\n        @audit_logging_configs = @gcp.gcp_project_client.get_project_iam_policy(@project)\n        @default_types = []\n        @default_exempted_members = {}\n        if defined?(@audit_logging_configs.audit_configs) && @audit_logging_configs.audit_configs.instance_of?(::Array)\n          @audit_logging_configs.audit_configs.each do |service_config|\n            next if service_config.service != 'allServices'\n            service_config.audit_log_configs.each do |config|\n              @default_types+=[config.log_type]\n              @default_exempted_members[config.log_type]=config.exempted_members if defined?(config.exempted_members) && !config.exempted_members.nil?\n            end\n          end\n        end\n      end\n    end\n\n    def exists?\n      defined?(@audit_logging_configs.audit_configs) && !@audit_logging_configs.audit_configs.nil?\n    end\n\n    attr_reader :default_types\n\n    attr_reader :default_exempted_members\n\n    def has_default_exempted_members?\n      @default_exempted_members.values.any?\n    end\n\n    def to_s\n      \"Logging Audit Config For #{@project}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_metric.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/logging_v2'\n\nmodule Inspec::Resources\n  class GoogleProjectMetric < GcpResourceBase\n    name 'google_project_metric'\n    desc 'Verifies settings for a project metric'\n\n    example \"\n      describe google_project_metric(project: 'chef-inspec-gcp',  metric: 'metric_name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:metric]\n      catch_gcp_errors do\n        @metric = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).get_project_metric(\"projects/#{opts[:project]}/metrics/#{opts[:metric]}\")\n        create_resource_methods(@metric)\n      end\n    end\n\n    def exists?\n      !@metric.nil?\n    end\n\n    def to_s\n      \"Project Metric #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_project_metrics.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/logging_v2'\n\nmodule Inspec::Resources\n  class GoogleProjectMetrics < GcpResourceBase\n    name 'google_project_metrics'\n    desc 'Verifies settings for GCP project metrics in bulk'\n\n    example \"\n      describe google_project_metrics(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:metric_names, field: :metric_name)\n    filter_table_config.add(:metric_types, field: :metric_type)\n    filter_table_config.add(:metric_destinations, field: :metric_destination)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      metric_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @metrics = @gcp.gcp_client(Google::Apis::LoggingV2::LoggingService).list_project_metrics(\"projects/#{@project}\", page_token: next_page)\n        end\n        return [] if !@metrics || !@metrics.metrics\n        @metrics.metrics.map do |metric|\n          metric_rows+=[{ metric_name: metric.name,\n                          metric_filter: metric.filter,\n                          metric_type: metric.metric_descriptor.type }]\n        end\n        next_page = @metrics.next_page_token\n        break unless next_page\n      end\n      @table = metric_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_projects.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleComputeProjects < GcpResourceBase\n    name 'google_projects'\n    desc 'Verifies settings for GCP compute projects in bulk'\n\n    example \"\n      describe google_projects do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:project_ids, field: :project_id)\n    filter_table_config.add(:project_names, field: :project_name)\n    filter_table_config.add(:project_numbers, field: :project_number)\n    filter_table_config.add(:lifecycle_state, field: :lifecycle_state)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      project_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @projects = @gcp.gcp_project_client.list_projects(page_token: next_page)\n        end\n        return [] if !@projects || !@projects.projects\n        @projects.projects.map do |project|\n          project_rows += [{ project_id: project.project_id,\n                            project_name: project.name,\n                            project_number: project.project_number,\n                            lifecycle_state: project.lifecycle_state }]\n        end\n        next_page = @projects.next_page_token\n        break unless next_page\n      end\n      @table = project_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_subscription.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/pubsub/property/subscription_expiration_policy'\nrequire 'google/pubsub/property/subscription_push_config'\n\n# A provider to manage Cloud Pub/Sub resources.\nclass PubsubSubscription < GcpResourceBase\n  name 'google_pubsub_subscription'\n  desc 'Subscription'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :topic\n  attr_reader :labels\n  attr_reader :push_config\n  attr_reader :ack_deadline_seconds\n  attr_reader :message_retention_duration\n  attr_reader :retain_acked_messages\n  attr_reader :expiration_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = name_from_self_link(@fetched['name'])\n    @topic = @fetched['topic']\n    @labels = @fetched['labels']\n    @push_config = GoogleInSpec::Pubsub::Property::SubscriptionPushConfig.new(@fetched['pushConfig'], to_s)\n    @ack_deadline_seconds = @fetched['ackDeadlineSeconds']\n    @message_retention_duration = @fetched['messageRetentionDuration']\n    @retain_acked_messages = @fetched['retainAckedMessages']\n    @expiration_policy = GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(@fetched['expirationPolicy'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subscription #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'topic' => ->(x, _) { x.nil? ? [] : [\"its('topic') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'push_config' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Pubsub::Property::SubscriptionPushConfig.un_parse(x, 'push_config') },\n      'ack_deadline_seconds' => ->(x, _) { x.nil? ? [] : [\"its('ack_deadline_seconds') { should cmp #{x.inspect} }\"] },\n      'message_retention_duration' => ->(x, _) { x.nil? ? [] : [\"its('message_retention_duration') { should cmp #{x.inspect} }\"] },\n      'retain_acked_messages' => ->(x, _) { x.nil? ? [] : [\"its('retain_acked_messages') { should cmp #{x.inspect} }\"] },\n      'expiration_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.un_parse(x, 'expiration_policy') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Subscription'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_pubsub_subscription',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_subscription_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Policy resources.\nclass SubscriptionIamPolicy < GcpResourceBase\n  name 'google_pubsub_subscription_iam_policy'\n  desc 'Subscription Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subscription IamPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_subscriptions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass PubsubSubscriptions < GcpResourceBase\n  name 'google_pubsub_subscriptions'\n  desc 'Subscription plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:topics, field: :topic)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:push_configs, field: :push_config)\n  filter_table_config.add(:ack_deadline_seconds, field: :ack_deadline_seconds)\n  filter_table_config.add(:message_retention_durations, field: :message_retention_duration)\n  filter_table_config.add(:retain_acked_messages, field: :retain_acked_messages)\n  filter_table_config.add(:expiration_policies, field: :expiration_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('subscriptions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n      'topic' => ->(obj) { [:topic, obj['topic']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'pushConfig' => ->(obj) { [:push_config, GoogleInSpec::Pubsub::Property::SubscriptionPushConfig.new(obj['pushConfig'], to_s)] },\n      'ackDeadlineSeconds' => ->(obj) { [:ack_deadline_seconds, obj['ackDeadlineSeconds']] },\n      'messageRetentionDuration' => ->(obj) { [:message_retention_duration, obj['messageRetentionDuration']] },\n      'retainAckedMessages' => ->(obj) { [:retain_acked_messages, obj['retainAckedMessages']] },\n      'expirationPolicy' => ->(obj) { [:expiration_policy, GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(obj['expirationPolicy'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_topic.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/pubsub/property/topic_message_storage_policy'\n\n# A provider to manage Cloud Pub/Sub resources.\nclass PubsubTopic < GcpResourceBase\n  name 'google_pubsub_topic'\n  desc 'Topic'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :kms_key_name\n  attr_reader :labels\n  attr_reader :message_storage_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = name_from_self_link(@fetched['name'])\n    @kms_key_name = @fetched['kmsKeyName']\n    @labels = @fetched['labels']\n    @message_storage_policy = GoogleInSpec::Pubsub::Property::TopicMessageStoragePolicy.new(@fetched['messageStoragePolicy'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Topic #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'kms_key_name' => ->(x, _) { x.nil? ? [] : [\"its('kms_key_name') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'message_storage_policy' => ->(x, _) { x.nil? ? [] : GoogleInSpec::Pubsub::Property::TopicMessageStoragePolicy.un_parse(x, 'message_storage_policy') },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Topic'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_pubsub_topic',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_topic_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Policy resources.\nclass TopicIamPolicy < GcpResourceBase\n  name 'google_pubsub_topic_iam_policy'\n  desc 'Topic Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Topic IamPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_pubsub_topics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass PubsubTopics < GcpResourceBase\n  name 'google_pubsub_topics'\n  desc 'Topic plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:kms_key_names, field: :kms_key_name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:message_storage_policies, field: :message_storage_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('topics')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n      'kmsKeyName' => ->(obj) { [:kms_key_name, obj['kmsKeyName']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'messageStoragePolicy' => ->(obj) { [:message_storage_policy, GoogleInSpec::Pubsub::Property::TopicMessageStoragePolicy.new(obj['messageStoragePolicy'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_redis_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Memorystore resources.\nclass RedisInstance < GcpResourceBase\n  name 'google_redis_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :alternative_location_id\n  attr_reader :authorized_network\n  attr_reader :create_time\n  attr_reader :current_location_id\n  attr_reader :display_name\n  attr_reader :host\n  attr_reader :labels\n  attr_reader :redis_configs\n  attr_reader :location_id\n  attr_reader :name\n  attr_reader :memory_size_gb\n  attr_reader :port\n  attr_reader :redis_version\n  attr_reader :reserved_ip_range\n  attr_reader :tier\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @alternative_location_id = @fetched['alternativeLocationId']\n    @authorized_network = @fetched['authorizedNetwork']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @current_location_id = @fetched['currentLocationId']\n    @display_name = @fetched['displayName']\n    @host = @fetched['host']\n    @labels = @fetched['labels']\n    @redis_configs = @fetched['redisConfigs']\n    @location_id = @fetched['locationId']\n    @name = @fetched['name']\n    @memory_size_gb = @fetched['memorySizeGb']\n    @port = @fetched['port']\n    @redis_version = @fetched['redisVersion']\n    @reserved_ip_range = @fetched['reservedIpRange']\n    @tier = @fetched['tier']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'alternative_location_id' => ->(x, _) { x.nil? ? [] : [\"its('alternative_location_id') { should cmp #{x.inspect} }\"] },\n      'authorized_network' => ->(x, _) { x.nil? ? [] : [\"its('authorized_network') { should cmp #{x.inspect} }\"] },\n      'create_time' => ->(x, _) { x.nil? ? [] : [\"its('create_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'current_location_id' => ->(x, _) { x.nil? ? [] : [\"its('current_location_id') { should cmp #{x.inspect} }\"] },\n      'display_name' => ->(x, _) { x.nil? ? [] : [\"its('display_name') { should cmp #{x.inspect} }\"] },\n      'host' => ->(x, _) { x.nil? ? [] : [\"its('host') { should cmp #{x.inspect} }\"] },\n      'labels' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('labels') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'redis_configs' => ->(x, _) { x.nil? ? [] : x.map { |k, v| \"its('redis_configs') { should include(#{k.inspect} => #{v.inspect}) }\" } },\n      'location_id' => ->(x, _) { x.nil? ? [] : [\"its('location_id') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'memory_size_gb' => ->(x, _) { x.nil? ? [] : [\"its('memory_size_gb') { should cmp #{x.inspect} }\"] },\n      'port' => ->(x, _) { x.nil? ? [] : [\"its('port') { should cmp #{x.inspect} }\"] },\n      'redis_version' => ->(x, _) { x.nil? ? [] : [\"its('redis_version') { should cmp #{x.inspect} }\"] },\n      'reserved_ip_range' => ->(x, _) { x.nil? ? [] : [\"its('reserved_ip_range') { should cmp #{x.inspect} }\"] },\n      'tier' => ->(x, _) { x.nil? ? [] : [\"its('tier') { should cmp #{x.inspect} }\"] },\n      'region' => ->(x, _) { x.nil? ? [] : [\"its('region') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Instance'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_redis_instance',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://redis.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_redis_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RedisInstances < GcpResourceBase\n  name 'google_redis_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:alternative_location_ids, field: :alternative_location_id)\n  filter_table_config.add(:authorized_networks, field: :authorized_network)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:current_location_ids, field: :current_location_id)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:redis_configs, field: :redis_configs)\n  filter_table_config.add(:location_ids, field: :location_id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:memory_size_gbs, field: :memory_size_gb)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:redis_versions, field: :redis_version)\n  filter_table_config.add(:reserved_ip_ranges, field: :reserved_ip_range)\n  filter_table_config.add(:tiers, field: :tier)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'alternativeLocationId' => ->(obj) { [:alternative_location_id, obj['alternativeLocationId']] },\n      'authorizedNetwork' => ->(obj) { [:authorized_network, obj['authorizedNetwork']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'currentLocationId' => ->(obj) { [:current_location_id, obj['currentLocationId']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'redisConfigs' => ->(obj) { [:redis_configs, obj['redisConfigs']] },\n      'locationId' => ->(obj) { [:location_id, obj['locationId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'memorySizeGb' => ->(obj) { [:memory_size_gb, obj['memorySizeGb']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'redisVersion' => ->(obj) { [:redis_version, obj['redisVersion']] },\n      'reservedIpRange' => ->(obj) { [:reserved_ip_range, obj['reservedIpRange']] },\n      'tier' => ->(obj) { [:tier, obj['tier']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project region name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://redis.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_resourcemanager_folder.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Resource Manager resources.\nclass ResourceManagerFolder < GcpResourceBase\n  name 'google_resourcemanager_folder'\n  desc 'Folder'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :lifecycle_state\n  attr_reader :create_time\n  attr_reader :parent\n  attr_reader :display_name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @lifecycle_state = @fetched['lifecycleState']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @parent = @fetched['parent']\n    @display_name = @fetched['displayName']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Folder #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'lifecycle_state' => ->(x, _) { x.nil? ? [] : [\"its('lifecycle_state') { should cmp #{x.inspect} }\"] },\n      'create_time' => ->(x, _) { x.nil? ? [] : [\"its('create_time.to_s') { should cmp '#{x.inspect}' }\"] },\n      'parent' => ->(x, _) { x.nil? ? [] : [\"its('parent') { should cmp #{x.inspect} }\"] },\n      'display_name' => ->(x, _) { x.nil? ? [] : [\"its('display_name') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Folder'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_resourcemanager_folder',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_resourcemanager_folders.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ResourceManagerFolders < GcpResourceBase\n  name 'google_resourcemanager_folders'\n  desc 'Folder plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:lifecycle_states, field: :lifecycle_state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:display_names, field: :display_name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('folders')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'lifecycleState' => ->(obj) { [:lifecycle_state, obj['lifecycleState']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders?parent={{parent}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_resourcemanager_organization_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/resourcemanager/property/organizationpolicy_boolean_policy'\nrequire 'google/resourcemanager/property/organizationpolicy_list_policy'\n\n# A provider to manage Resource Manager resources.\nclass OrganizationPolicy < GcpResourceBase\n  name 'google_resourcemanager_organization_policy'\n  desc 'OrganizationPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :version\n  attr_reader :constraint\n  attr_reader :update_time\n  attr_reader :list_policy\n  attr_reader :boolean_policy\n\n  def initialize(opts)\n    super(opts)\n    @organization_name = opts[:organization_name]\n    @constraint = opts[:constraint]\n    catch_gcp_errors do\n      org_policy_request = Google::Apis::CloudresourcemanagerV1::GetOrgPolicyRequest.new\n      org_policy_request.constraint = opts[:constraint]\n      @fetched = JSON.parse(@gcp.gcp_project_client.get_organization_org_policy(opts[:organization_name], org_policy_request).to_json)\n      parse\n    end\n  end\n\n  def parse\n    @version = @fetched['version']\n    @constraint = @fetched['constraint']\n    @update_time = parse_time_string(@fetched['updateTime'])\n    @list_policy = GoogleInSpec::ResourceManager::Property::OrganizationPolicyListPolicy.new(@fetched['listPolicy'], to_s)\n    @boolean_policy = GoogleInSpec::ResourceManager::Property::OrganizationPolicyBooleanPolicy.new(@fetched['booleanPolicy'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationPolicy #{@organization_name} Constraint #{@constraint}\"\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_resourcemanager_project_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Policy resources.\nclass ProjectIamPolicy < GcpResourceBase\n  name 'google_resourcemanager_project_iam_policy'\n  desc 'Project Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Project IamPolicy #{@params[:project_id]}\"\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project_id}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_runtime_config_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Runtime Configuration resources.\nclass RuntimeConfigConfig < GcpResourceBase\n  name 'google_runtime_config_config'\n  desc 'Config'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @description = @fetched['description']\n    @name = @fetched['name']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Config #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'description' => ->(x, _) { x.nil? ? [] : [\"its('description') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Config'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_runtime_config_config',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_runtime_config_config_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Runtime Configuration IAM Policy resources.\nclass ConfigIamPolicy < GcpResourceBase\n  name 'google_runtime_config_config_iam_policy'\n  desc 'Config Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Config IamPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_runtime_config_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RuntimeConfigConfigs < GcpResourceBase\n  name 'google_runtime_config_configs'\n  desc 'Config plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('configs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_runtime_config_variable.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Runtime Configuration resources.\nclass RuntimeConfigVariable < GcpResourceBase\n  name 'google_runtime_config_variable'\n  desc 'Variable'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :value\n  attr_reader :text\n  attr_reader :name\n  attr_reader :config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @value = @fetched['value']\n    @text = @fetched['text']\n    @name = @fetched['name']\n    @config = @fetched['config']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Variable #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'value' => ->(x, _) { x.nil? ? [] : [\"its('value') { should cmp #{x.inspect} }\"] },\n      'text' => ->(x, _) { x.nil? ? [] : [\"its('text') { should cmp #{x.inspect} }\"] },\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'config' => ->(x, _) { x.nil? ? [] : [\"its('config') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Variable'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_runtime_config_variable',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{config}}/variables/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_runtime_config_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RuntimeConfigVariables < GcpResourceBase\n  name 'google_runtime_config_variables'\n  desc 'Variable plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:values, field: :value)\n  filter_table_config.add(:texts, field: :text)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:configs, field: :config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('variables')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'value' => ->(obj) { [:value, obj['value']] },\n      'text' => ->(obj) { [:text, obj['text']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'config' => ->(obj) { [:config, obj['config']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project config name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{config}}/variables?returnValues=true'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_service_account.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleServiceAccount < GcpResourceBase\n    name 'google_service_account'\n    desc 'Verifies settings for a project IAM Service Account'\n\n    example \"\n      describe google_service_account(name: 'projects/spaterson-project/serviceAccounts/sample-account@spaterson-project.iam.gserviceaccount.com') do\n        it { should exist }\n        its('stage') { should eq 'GA' }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      catch_gcp_errors do\n        @service_account = @gcp.gcp_iam_client.get_project_service_account(opts[:name])\n        create_resource_methods(@service_account)\n        @display_name = @service_account.unique_id\n        @display_name = @service_account.display_name if @service_account.display_name\n      end\n    end\n\n    def exists?\n      !@service_account.nil?\n    end\n\n    # Note this is done at the service account level not the individual key level because this metadata is not\n    # returned by default when listing keys.\n    def user_managed_keys\n      raise Inspec::Exceptions::ResourceFailed, \"Service Account #{@display_name} does not exist!\" if not exists?\n      @gcp.gcp_iam_client.list_project_service_account_keys(@service_account.name, key_types: ['USER_MANAGED'])\n    end\n\n    def has_user_managed_keys?\n      return false if !user_managed_keys.keys\n      true\n    end\n\n    def to_s\n      \"Service Account \\\"#{@display_name}\\\"\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_service_account_key.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleServiceAccountKey < GcpResourceBase\n    name 'google_service_account_key'\n    desc 'Verifies settings for a GCP project service account key'\n\n    example \"\n      describe google_service_account_key(name: 'projects/sample-project/serviceAccounts/test-sa@sample-project.iam.gserviceaccount.com/keys/c6bd986da9fac6d71178db41d1741cbe751a5080' ) do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name].split('/').last\n      catch_gcp_errors do\n        @sa_key = @gcp.gcp_iam_client.get_project_service_account_key(opts[:name])\n        create_resource_methods(@sa_key)\n      end\n    end\n\n    def exists?\n      !@sa_key.nil?\n    end\n\n    def to_s\n      \"Service Account Key #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_service_account_keys.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleServiceAccountKeys < GcpResourceBase\n    name 'google_service_account_keys'\n    desc 'Verifies settings for GCP service account keys in bulk'\n\n    example \"\n      describe google_service_account_keys(service_account: 'projects/sample-project/serviceAccounts/sample-account@sample-project.iam.gserviceaccount.com') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @service_account = opts[:service_account]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:key_names, field: :key_name)\n    filter_table_config.add(:valid_after_times, field: :valid_after_time)\n    filter_table_config.add(:valid_before_times, field: :valid_before_time)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      account_key_rows = []\n      catch_gcp_errors do\n        # no pagination in the service API\n        @service_account_keys = @gcp.gcp_iam_client.list_project_service_account_keys(@service_account)\n      end\n      return [] if !@service_account_keys || !@service_account_keys.keys\n      @service_account_keys.keys.map do |sa_key|\n        account_key_rows+=[{ key_name: sa_key.name,\n                             valid_after_time: Time.parse(sa_key.valid_after_time),\n                             valid_before_time: Time.parse(sa_key.valid_before_time) }]\n      end\n      @table = account_key_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_service_accounts.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleServiceAccounts < GcpResourceBase\n    name 'google_service_accounts'\n    desc 'Verifies settings for GCP compute service accounts in bulk'\n\n    example \"\n      describe google_service_accounts(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:service_account_ids, field: :service_account_id)\n    filter_table_config.add(:service_account_names, field: :service_account_name)\n    filter_table_config.add(:service_account_display_names, field: :service_account_display_name)\n    filter_table_config.add(:service_account_emails, field: :service_account_email)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      service_account_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @service_accounts = @gcp.gcp_iam_client.list_project_service_accounts(\"projects/#{@project}\", page_token: next_page)\n        end\n        return [] if !@service_accounts || !@service_accounts.accounts\n        @service_accounts.accounts.map do |service_account|\n          service_account_rows+=[{ service_account_id: service_account.unique_id,\n                                   service_account_name: service_account.name,\n                                   service_account_display_name: service_account.display_name,\n                                   service_account_email: service_account.email }]\n        end\n        next_page = @service_accounts.next_page_token\n        break unless next_page\n      end\n      @table = service_account_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_sourcerepo_repositories.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SourceRepoRepositorys < GcpResourceBase\n  name 'google_sourcerepo_repositories'\n  desc 'Repository plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:urls, field: :url)\n  filter_table_config.add(:sizes, field: :size)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('repos')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'url' => ->(obj) { [:url, obj['url']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def identifiers\n    params = %w{project name}\n\n    result = []\n    @table.each do |item|\n      combo = item.merge(@params)\n      item_identifiers = {}\n      params.each do |param|\n        item_identifiers[param.to_sym] = combo[param.to_sym]\n      end\n      result.push(item_identifiers)\n    end\n    result\n  end\n\n  private\n\n  def product_url\n    'https://sourcerepo.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/repos'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_sourcerepo_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Source Repositories resources.\nclass SourceRepoRepository < GcpResourceBase\n  name 'google_sourcerepo_repository'\n  desc 'Repository'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :url\n  attr_reader :size\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n    @params = params\n  end\n\n  def parse\n    @name = @fetched['name']\n    @url = @fetched['url']\n    @size = @fetched['size']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Repository #{@params[:name]}\"\n  end\n\n  def un_parse\n    {\n      'name' => ->(x, _) { x.nil? ? [] : [\"its('name') { should cmp #{x.inspect} }\"] },\n      'url' => ->(x, _) { x.nil? ? [] : [\"its('url') { should cmp #{x.inspect} }\"] },\n      'size' => ->(x, _) { x.nil? ? [] : [\"its('size') { should cmp #{x.inspect} }\"] },\n    }\n  end\n\n  def dump(path, template_path, test_number, ignored_fields)\n    name = 'Repository'\n\n    arr = un_parse.map do |k, v|\n      next if ignored_fields.include?(k)\n      v.call(method(k.to_sym).call, k)\n    end\n    template_vars = {\n      name: name,\n      arr: arr,\n      type: 'google_sourcerepo_repository',\n      identifiers: @params,\n      number: test_number,\n    }\n    File.open(\"#{path}/#{name}_#{test_number}.rb\", 'w') do |file|\n      file.write(ERB.new(File.read(template_path)).result_with_hash(template_vars))\n    end\n  end\n\n  private\n\n  def product_url\n    'https://sourcerepo.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/repos/{{name}}'\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_sql_database_instance.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/sqladmin_v1beta4'\n\nmodule Inspec::Resources\n  class GoogleCloudSqlDatabaseInstance < GcpResourceBase\n    name 'google_sql_database_instance'\n    desc 'Verifies settings for a GCP Cloud SQL Database instance'\n\n    example \"\n      describe google_sql_database_instance(project: 'chef-inspec-gcp',  database: 'my-database') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:database]\n      catch_gcp_errors do\n        @database = @gcp.gcp_client(Google::Apis::SqladminV1beta4::SQLAdminService).get_instance(opts[:project], opts[:database])\n        create_resource_methods(@database)\n      end\n    end\n\n    def exists?\n      !@database.nil?\n    end\n\n    def has_ip_configuration_require_ssl?\n      return false if !defined?(@database.settings.ip_configuration.require_ssl)\n      return false if @database.settings.ip_configuration.require_ssl.nil?\n      return true if @database.settings.ip_configuration.require_ssl.to_s.casecmp('true').zero?\n      false\n    end\n\n    def authorized_networks\n      return [] if !defined?(@database.settings.ip_configuration.authorized_networks) || @database.settings.ip_configuration.authorized_networks.nil?\n      @database.settings.ip_configuration.authorized_networks.map(&:value)\n    end\n\n    def primary_ip_address\n      return '' if !defined?(@database.ip_addresses[0].ip_address) || @database.ip_addresses[0].ip_address.nil?\n      @database.ip_addresses[0].ip_address\n    end\n\n    def to_s\n      \"Database #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_sql_database_instances.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleCloudSqlDatabaseInstances < GcpResourceBase\n    name 'google_sql_database_instances'\n    desc 'Verifies settings for GCP Cloud SQL Database instances in bulk'\n\n    example \"\n      describe google_sql_database_instances(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:instance_names, field: :instance_name)\n    filter_table_config.add(:instance_versions, field: :instance_version)\n    filter_table_config.add(:instance_regions, field: :instance_region)\n    filter_table_config.add(:instance_zones, field: :instance_zone)\n    filter_table_config.add(:instance_states, field: :instance_state)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      instance_rows = []\n      catch_gcp_errors do\n        @databases = @gcp.gcp_client(Google::Apis::SqladminV1beta4::SQLAdminService).list_instances(opts[:project])\n      end\n      return [] if !@databases || !@databases.items\n      @databases.items.map do |instance|\n        instance_rows+=[{ instance_name: instance.name,\n                          instance_version: instance.database_version,\n                          instance_region: instance.region,\n                          instance_zone: instance.gce_zone,\n                          instance_state: instance.state }]\n      end\n      @databases = instance_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_sql_users.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleCloudSqlUsers < GcpResourceBase\n    name 'google_sql_users'\n    desc 'Verifies settings for GCP Cloud SQL Database users in bulk'\n\n    example \"\n      describe google_sql_users(project: 'chef-inspec-gcp', database: 'database') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:user_names, field: :user_name)\n    filter_table_config.add(:user_hosts, field: :user_host)\n    filter_table_config.add(:user_instances, field: :user_instance)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      user_rows = []\n      catch_gcp_errors do\n        @users = @gcp.gcp_client(Google::Apis::SqladminV1beta4::SQLAdminService).list_users(opts[:project], opts[:database])\n      end\n      return [] if !@users || !@users.items\n      @users.items.map do |user|\n        user_rows+=[{ user_name: user.name,\n                      user_host: user.host,\n                      user_instance: user.instance }]\n      end\n      @users = user_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucket < GcpResourceBase\n    name 'google_storage_bucket'\n    desc 'Verifies settings for a bucket'\n\n    example \"\n      describe google_storage_bucket(name: 'inspec-test-bucket') do\n        it { should exist }\n        its('storage_class') { should eq 'REGIONAL' }\n        its('location') { should eq 'US-CENTRAL1' }\n        its('lifecycle') { should eq 'enabled' }\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:name]\n      catch_gcp_errors do\n        @bucket = @gcp.gcp_storage_client.get_bucket(opts[:name])\n        create_resource_methods(@bucket)\n      end\n    end\n\n    def exists?\n      !@bucket.nil?\n    end\n\n    def has_versioning_enabled?\n      return false if !defined?(@bucket.versioning)\n      return false if @bucket.versioning.nil?\n      @bucket.versioning.enabled\n    end\n\n    def has_logging_enabled?\n      return false if !defined?(@bucket.logging)\n      return false if @bucket.logging.nil?\n      true\n    end\n\n    def to_s\n      \"Bucket #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket_acl.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketAcl < GcpResourceBase\n    name 'google_storage_bucket_acl'\n    desc 'Verifies settings for a storage bucket ACL'\n\n    example \"\n      describe google_storage_bucket_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n      @entity = opts[:entity]\n      begin\n        @acl = @gcp.gcp_storage_client.get_bucket_access_control(@bucket, @entity)\n        create_resource_methods(@acl)\n        # all non-existing entities raise a \"Not Found\" client error\n      rescue Google::Apis::ClientError => e\n        # re-raise the exception if the error is not \"Not Found\"\n        raise e unless e.status_code == 404\n        @acl = nil\n        @error = JSON.parse(e.body)\n      end\n    end\n\n    def exists?\n      !@acl.nil?\n    end\n\n    def to_s\n      \"Storage Bucket ACL #{@bucket}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket_iam_binding.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketIamBinding < GcpResourceBase\n    name 'google_storage_bucket_iam_binding'\n    desc 'Verifies settings for a storage bucket IAM binding'\n\n    example \"\n      describe google_storage_bucket_iam_binding(bucket: 'bucket-buvsjjcndqz',  role: 'roles/storage.objectViewer') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n      @role = opts[:role]\n      @iam_binding_exists = false\n      @members_list=[]\n      catch_gcp_errors do\n        # NOTE: this is the same call as for the plural iam_bindings resource because there isn't an easy way to pull out a singular binding\n        @iam_bindings = @gcp.gcp_storage_client.get_bucket_iam_policy(@bucket)\n        raise Inspec::Exceptions::ResourceFailed, \"google_storage_bucket_iam_binding is missing expected IAM policy 'bindings' property\" if !@iam_bindings || !@iam_bindings.bindings\n        @iam_bindings.bindings.each do |binding|\n          next if binding.role != @role\n          @iam_binding_exists=true\n          @members_list=binding.members\n        end\n      end\n    end\n\n    # return the list of users corresponding to the role\n    def members\n      @members_list\n    end\n\n    def exists?\n      @iam_binding_exists\n    end\n\n    def to_s\n      \"Storage Bucket IAM Binding #{@role}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketIamBindings < GcpResourceBase\n    name 'google_storage_bucket_iam_bindings'\n    desc 'Verifies settings for GCP storage bucket IAM bindings in bulk'\n\n    example \"\n      describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_storage_client.get_bucket_iam_policy(@bucket)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket_object.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'time'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketObject < GcpResourceBase\n    name 'google_storage_bucket_object'\n    desc 'Verifies settings for a storage bucket object'\n\n    example \"\n      describe google_storage_bucket_object(bucket: 'bucket-buvsjjcndqz',  object: 'bucket-object-pmxbiikq') do\n        it { should exist }\n      end\n    \"\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n      @object = opts[:object]\n      catch_gcp_errors do\n        @bucket_object = @gcp.gcp_storage_client.get_object(@bucket, @object)\n        @time_created = @bucket_object.time_created\n        @time_updated = @bucket_object.updated\n        @time_class_updated = @bucket_object.time_storage_class_updated\n        create_resource_methods(@bucket_object)\n      end\n    end\n\n    def updated_date\n      return false if !defined?(@time_updated) || @time_updated.nil?\n      Time.parse(@time_updated.to_s)\n    end\n\n    def time_storage_class_updated_date\n      return false if !defined?(@time_class_updated) || @time_class_updated.nil?\n      Time.parse(@time_class_updated.to_s)\n    end\n\n    def time_created_date\n      return false if !defined?(@time_created) || @time_created.nil?\n      Time.parse(@time_created.to_s)\n    end\n\n    def exists?\n      !@bucket_object.nil?\n    end\n\n    def to_s\n      \"Bucket object #{@bucket}/#{@object}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_bucket_objects.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketObjects < GcpResourceBase\n    name 'google_storage_bucket_objects'\n    desc 'Verifies settings for GCP storage bucket objects in bulk'\n\n    example \"\n      describe google_storage_bucket_objects(bucket: 'bucket-name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:object_names, field: :object_name)\n    filter_table_config.add(:object_buckets, field: :object_bucket)\n    filter_table_config.add(:object_created_times, field: :object_created_time)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      bucket_object_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @bucket_objects = @gcp.gcp_storage_client.list_objects(@bucket, page_token: next_page)\n        end\n        return [] if !@bucket_objects || !@bucket_objects.items\n        @bucket_objects.items.map do |object|\n          bucket_object_rows+=[{ object_name: object.name,\n                                 object_bucket: object.bucket,\n                                 object_created_time: Time.parse(object.time_created.to_s) }]\n        end\n        next_page = @bucket_objects.next_page_token\n        break unless next_page\n      end\n      @table = bucket_object_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_buckets.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBuckets < GcpResourceBase\n    name 'google_storage_buckets'\n    desc 'Verifies settings for GCP storage buckets in bulk'\n\n    example \"\n      describe google_storage_buckets(project: 'chef-inspec-gcp') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:bucket_ids, field: :bucket_id)\n    filter_table_config.add(:bucket_names, field: :bucket_name)\n    filter_table_config.add(:bucket_project_numbers, field: :bucket_project_number)\n    filter_table_config.add(:bucket_locations, field: :bucket_location)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      bucket_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @buckets = @gcp.gcp_storage_client.list_buckets(@project, page_token: next_page)\n        end\n        return [] if !@buckets || !@buckets.items\n        @buckets.items.map do |bucket|\n          bucket_rows+=[{ bucket_id: bucket.id,\n                          bucket_name: bucket.name,\n                          bucket_project_number: bucket.project_number,\n                          bucket_location: bucket.location }]\n        end\n        next_page = @buckets.next_page_token\n        break unless next_page\n      end\n      @table = bucket_rows\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_default_object_acl.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageDefaultObjectAcl < GcpResourceBase\n    name 'google_storage_default_object_acl'\n    desc 'Verifies settings for a storage default object ACL'\n\n    example \"\n      describe google_storage_default_object_acl(bucket: 'bucket-buvsjjcndqz',  entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n      @entity = opts[:entity]\n      begin\n        @acl = @gcp.gcp_storage_client.get_default_object_access_control(@bucket, @entity)\n        create_resource_methods(@acl)\n      # all non-existing entities raise a \"Not Found\" client error\n      rescue Google::Apis::ClientError => e\n        @acl=nil\n        @error=JSON.parse(e.body)\n      end\n    end\n\n    def exists?\n      !@acl.nil?\n    end\n\n    attr_reader :error\n\n    def to_s\n      \"Storage Default Object ACL #{@bucket} #{@entity}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_storage_object_acl.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'json'\n\nmodule Inspec::Resources\n  class GoogleStorageObjectAcl < GcpResourceBase\n    name 'google_storage_object_acl'\n    desc 'Verifies settings for a storage object ACL'\n\n    example \"\n      describe google_storage_object_acl(bucket: 'bucket-buvsjjcndqz', object: 'bucket-object-pmxbiikq', entity: 'user-object-viewer@spaterson-project.iam.gserviceaccount.com') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n      @object = opts[:object]\n      @entity = opts[:entity]\n      begin\n        @acl = @gcp.gcp_storage_client.get_object_access_control(@bucket, @object, @entity)\n        create_resource_methods(@acl)\n        # all non-existing entities raise a \"Not Found\" client error\n      rescue Google::Apis::ClientError => e\n        @acl=nil\n        @error=JSON.parse(e.body)\n      end\n    end\n\n    def exists?\n      !@acl.nil?\n    end\n\n    attr_reader :error\n\n    def to_s\n      \"Storage Object ACL #{@object} #{@entity}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_user.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/admin_directory_v1'\n\nmodule Inspec::Resources\n  class GoogleUser < GcpResourceBase\n    name 'google_user'\n    desc 'Verifies settings for a GCP user'\n\n    example \"\n      describe google_user(user_key: '110491234567894702010') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:user_key]\n      catch_gcp_errors do\n        @user = @gcp.gcp_admin_client.get_user(opts[:user_key])\n        create_resource_methods(@user)\n      end\n    end\n\n    def exists?\n      !@user.nil?\n    end\n\n    def suspended?\n      return false if !defined?(@user.suspended) || @user.suspended.nil?\n      @user.suspended\n    end\n\n    def has_mfa_enabled?\n      return false if !defined?(@user.is_enrolled_in2_sv) || @user.is_enrolled_in2_sv.nil?\n      @user.is_enrolled_in2_sv\n    end\n\n    def to_s\n      \"User #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "generate/libraries/google_users.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/admin_directory_v1'\n\nmodule Inspec::Resources\n  class GoogleUsers < GcpResourceBase\n    name 'google_users'\n    desc 'Verifies settings for GCP users in bulk'\n\n    example \"\n      describe google_users(customer: 'my_customer') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @customer = opts[:customer] || 'my_customer'\n      @domain = opts[:domain] || ''\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:user_ids, field: :user_id)\n    filter_table_config.add(:user_full_names, field: :user_full_name)\n    filter_table_config.add(:user_emails, field: :user_email)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      user_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @users = @gcp.gcp_admin_client.list_users(customer: @customer, domain: @domain, page_token: next_page)\n        end\n        return [] if !@users || !@users.users\n        @users.users.map do |user|\n          user_rows+=[{ user_id: user.id,\n                        user_name: user.name.full_name,\n                        user_email: user.primary_email }]\n        end\n        next_page = @users.next_page_token\n        break unless next_page\n      end\n      @table = user_rows\n    end\n  end\nend\n"
  },
  {
    "path": "inspec.yml",
    "content": "name: inspec-gcp\ntitle: Google Cloud Platform Resource Pack\nmaintainer: spaterson@chef.io,russell.seymour@turtlesystems.co.uk\nsummary: This resource pack provides compliance resources_old_ignore for Google Cloud Platform\ncopyright: spaterson@chef.io,russell.seymour@turtlesystems.co.uk\ncopyright_email: spaterson@chef.io,russell.seymour@turtlesystems.co.uk\nversion: 1.11.136\nlicense: Apache-2.0\ninspec_version: '>= 4.7.3' \nsupports:\n  - platform: gcp\n"
  },
  {
    "path": "libraries/gcp_backend.rb",
    "content": "# frozen_string_literal: true\n\n# GCP Inspec Backend Classes\n#\n# Based on the Azure Inspec classes by Russell Seymour\n#\n\nrequire 'json'\nrequire 'net/http'\nrequire 'googleauth'\n\n# Base class for GCP resources - depends on train GCP transport for connection\n#\n# module Inspec::Resources\nclass GcpResourceBase < Inspec.resource(1)\n  attr_reader :opts, :gcp\n\n  def initialize(opts)\n    @opts = opts\n    # ensure we have a GCP connection, resources can choose which of the clients to instantiate\n    @gcp = inspec.backend\n\n    # Magic Modules generated resources use an alternate transport method\n    # In the future this will be moved into the train-gcp plugin itself\n    @connection = GcpApiConnection.new(self) if opts[:use_http_transport]\n  end\n\n  def failed_resource?\n    @failed_resource\n  end\n\n  def resource_id\n    @connection&.resource_id\n  end\n\n  # Intercept GCP exceptions\n  def catch_gcp_errors\n    yield\n    # create custom messages as needed\n  rescue Google::Apis::ClientError => e\n    error = JSON.parse(e.body)\n    fail_resource error['error']['message']\n    @failed_resource = true\n    nil\n  end\n\n  def create_resource_methods(object)\n    dm = GcpResourceDynamicMethods.new\n    dm.create_methods(self, object)\n  end\n\n  def name_from_self_link(property)\n    property&.split('/')&.last\n  end\nend\n# end\n\n# Class to create methods on the calling object at run time.  Heavily based on the Azure Inspec resources.\n#\nclass GcpResourceDynamicMethods\n  # Given the calling object and its data, create the methods on the object according\n  # to the data that has been retrieved. Various types of data can be returned so the method\n  # checks the type to ensure that the necessary methods are configured correctly\n  #\n  # @param GcpResourceProbe|GcpResource object The object on which the methods should be craeted\n  # @param variant data The data from which the methods should be created\n  def create_methods(object, data)\n    # Check the type of data as this affects the setup of the methods\n    # If it is an Gcp Generic Resource then setup methods for each of\n    # the instance variables\n    case data.class.to_s\n    when /Google::Apis::.*/\n      # iterate around the instance variables\n      data.instance_variables.each do |var|\n        create_method(object, var.to_s.delete('@'), data.instance_variable_get(var))\n      end\n      # When the data is a Hash object iterate around each of the key value pairs and\n      # craete a method for each one.\n    when 'Hash'\n      data.each do |key, value|\n        create_method(object, key, value)\n      end\n    end\n  end\n\n  private\n\n  # Method that is responsible for creating the method on the calling object. This is\n  # because some nesting maybe required. For example of the value is a Hash then it will\n  # need to have an GcpResourceProbe create for each key, whereas if it is a simple\n  # string then the value just needs to be returned\n  #\n  def create_method(object, name, value)\n    # Create the necessary method based on the var that has been passed\n    # Test the value for its type so that the method can be setup correctly\n    case value.class.to_s\n    when 'String', 'Integer', 'TrueClass', 'FalseClass', 'Fixnum'\n      object.define_singleton_method name do\n        value\n      end\n    when 'Hash'\n      value.count.zero? ? return_value = value : return_value = GcpResourceProbe.new(value)\n      object.define_singleton_method name do\n        return_value\n      end\n    # there are nested Google API classes throughout\n    when /Google::Apis::.*/\n      object.define_singleton_method name do\n        if value.respond_to? :to_h\n          value = value.to_h\n        end\n        GcpResourceProbe.new(value)\n      end\n    when 'Array'\n      # Some things are just string or integer arrays\n      # Check this by seeing if the first element is a string / integer / boolean or\n      # a hashtable\n      # This may not be the best method, but short of testing all elements in the array, this is\n      # the quickest test\n      # p value[0].class.to_s\n      case value[0].class.to_s\n      when 'String', 'Integer', 'TrueClass', 'FalseClass', 'Fixnum'\n        probes = value\n      else\n        probes = []\n        value.each do |value_item|\n          # p value_item\n          if value_item.respond_to? :to_h\n            value_item = value_item.to_h\n          end\n          probes << GcpResourceProbe.new(value_item)\n        end\n      end\n      object.define_singleton_method name do\n        probes\n      end\n    end\n  end\nend\n\n# Class object that is created for each element that is returned by GCP.\n# This is what is interogated by Inspec. If they are nested hashes, then this results\n# in nested GcpResourceProbe objects.\n#\n# The methods for each of the classes are dynamically defined at run time and will\n# match the items that are retrieved from GCP. See the 'test/integration/verify/controls' for\n# examples\n#\nclass GcpResourceProbe\n  attr_reader :name, :type, :location, :item, :count\n\n  # Initialize method for the class. Accepts an item, be it a scalar value, hash or GCP object\n  # It will then create the necessary dynamic methods so that they can be called in the tests\n  # This is accomplished by call the GcpResourceDynamicMethods\n  #\n  # @param varaint The item from which the class will be initialized\n  #\n  # @return GcpResourceProbe\n  def initialize(item)\n    dm = GcpResourceDynamicMethods.new\n    dm.create_methods(self, item)\n\n    # Set the item as a property on the class\n    # This is so that it is possible to interrogate what has been added to the class and isolate them from\n    # the standard methods that a Ruby class has.\n    # This used for checking Tags on a resource for example\n    # It also allows direct access if so required\n    @item = item\n\n    # Set how many items have been set\n    @count = item.length if item.respond_to? :length\n  end\n\n  # Allows resources to respond to the include test\n  # This means that things like tags can be checked for and then their value tested\n  #\n  # @param [String] key Name of the item to look for in the @item property\n  def include?(key)\n    @item.key?(key)\n  end\n\n  # Give a sting like `computer_name` return the camelCase version, e.g.\n  # computerName\n  #\n  # @param string data Data that needs to be converted from snake_case to camelCase\n  #\n  # @return string\n  def camel_case(data)\n    camel_case_data = data.split('_').inject([]) { |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join\n\n    # Ensure that gb (as in gigabytes) is uppercased\n    camel_case_data.gsub(/[gb]/, &:upcase)\n  end\nend\n\nclass GcpApiConnection\n  attr_reader :resource\n\n  def initialize(resource)\n    @resource = resource\n    config_name = Inspec::Config.cached.unpack_train_credentials[:host]\n    ENV['CLOUDSDK_ACTIVE_CONFIG_NAME'] = config_name\n    # deprecated active_support blank method\n    @google_application_credentials = config_name.to_s.empty? && ENV['GOOGLE_APPLICATION_CREDENTIALS']\n  end\n\n  def fetch_auth\n    unless @google_application_credentials.nil?\n      return Network::Authorization.new.for!(\n        [\n          'https://www.googleapis.com/auth/cloud-platform',\n        ],\n      ).from_google_credentials_json!(\n        @google_application_credentials,\n      )\n    end\n    Network::Authorization.new.from_application_default!\n  end\n\n  def fetch(base_url, template, var_data, request_type = 'Get', body = nil)\n    get_request = Network::Base.new(\n      build_uri(base_url, template, var_data),\n      fetch_auth,\n      request_type,\n      body,\n    )\n    validate_response get_request.send\n  end\n\n  def validate_response(response)\n    response.is_a?(Net::HTTPNotFound) || response.is_a?(Net::HTTPNoContent) ? nil : return_if_object(response)\n  end\n\n  def fetch_all(base_url, template, var_data, request_type = 'Get')\n    next_page(build_uri(base_url, template, var_data), request_type)\n  end\n\n  def next_page(uri, request_type, token = nil)\n    next_hash = {}\n    next_hash['pageToken'] = token unless token.nil?\n    current_params = Hash[URI.decode_www_form(uri.query || '')].merge(next_hash)\n    uri.query = URI.encode_www_form(current_params)\n    get_request = Network::Base.new(\n      uri,\n      fetch_auth,\n      request_type,\n    )\n    result = return_if_object(get_request.send)\n    next_page_token = result['nextPageToken']\n    return [result] if next_page_token.nil?\n\n    [result] + next_page(uri, request_type, next_page_token)\n  end\n\n  def return_if_object(response)\n    unless response.is_a?(Net::HTTPSuccess)\n      if response.is_a?(Net::HTTPResponse)\n        body = response.body\n      else\n        body = response\n      end\n      result = parser(body)\n      raise_if_errors result, 'message'\n    end\n    result = parser(response.body)\n    fetch_id result\n    result\n  end\n\n  def parser(json)\n    JSON.parse(json)\n  rescue JSON::ParserError\n    raise StandardError, \"Bad response: #{json}\" \\\n  end\n\n  # @param result object on which look for id or name property\n  def fetch_id(result)\n    @resource_id = result['id'] || result['name'] if result.is_a?(Hash)\n  end\n\n  attr_reader :resource_id\n\n  def raise_if_errors(response, msg_field)\n    errors = if response['error']['message']&.nil?\n               self.class.navigate(response, %w{error errors})\n             else\n               self.class.navigate(response, %w{error message})\n             end\n    resource.fail_resource errors\n    resource.failed_resource = true\n    raise_error(errors, msg_field) unless errors.nil?\n  end\n\n  def raise_error(errors, msg_field)\n    raise IOError, ['Operation failed:',\n                    errors.map { |e| e[msg_field] }.join(', ')].join(' ')\n  end\n\n  def build_uri(base_url, template, var_data)\n    is_region_included = base_url.include?('{{region}}')\n    url = is_region_included ? base_url.gsub('{{region}}', var_data[:region]): base_url\n    URI.join(\n      \"#{url}#{expand_variables(template, var_data)}\",\n    )\n  end\n\n  # Allows fetching objects within a tree path.\n  def self.navigate(source, path, default = nil)\n    key = path.take(1)[0]\n    path = path.drop(1)\n    return default unless source.key?(key)\n    result = source.fetch(key)\n    return navigate(result, path, default) unless path.empty?\n    result if path.empty?\n  end\n\n  def extract_variables(template)\n    template.scan(/{{[^}]*}}/).map { |v| v.gsub(/{{([^}]*)}}/, '\\1') }\n            .map(&:to_sym)\n  end\n\n  def expand_variables(template, var_data)\n    extract_variables(template).each do |v|\n      unless var_data.key?(v)\n        # Magic Modules uses % as an indicator that the param needs to be URL escaped\n        v = v.to_s.gsub('%', '').to_sym\n        raise \"Missing variable :#{v} in #{var_data} on #{caller.join(\"\\n\")}}\" unless var_data.key?(v)\n\n        template.gsub!(\"{{%#{v}}}\", CGI.escape(var_data[v].to_s))\n      end\n      template.gsub!(/{{#{v}}}/, var_data[v].to_s)\n    end\n    template\n  end\nend\n\n# A handler for authenticated network request\nmodule Network\n  class Base\n    def initialize(link, cred, request_type, body = nil)\n      @link = link\n      @cred = cred\n      @request_type = request_type\n      @body = body\n    end\n\n    def builder\n      Net::HTTP.const_get(@request_type)\n    end\n\n    def send\n      request = @cred.authorize(builder.new(@link))\n      request['User-Agent'] = generate_user_agent\n      if @body\n        request['Content-Type'] = 'application/json'\n        request.body = @body\n      end\n      response = transport(request).request(request)\n      unless ENV['GOOGLE_HTTP_VERBOSE'].nil?\n        puts [\"network(#{request}: [#{response.code}]\",\n              response.body.split(\"\\n\").map(&:strip).join(' ')].join(' ')\n      end\n      response\n    end\n\n    def transport(request)\n      uri = request.uri\n      puts \"network(#{request}: #{uri})\" \\\n        unless ENV['GOOGLE_HTTP_VERBOSE'].nil?\n      transport = Net::HTTP.new(uri.host, uri.port)\n      transport.use_ssl = uri.is_a?(URI::HTTPS)\n      transport.verify_mode = OpenSSL::SSL::VERIFY_PEER\n      transport.set_debug_output $stderr \\\n        unless ENV['GOOGLE_HTTP_DEBUG'].nil?\n      transport\n    end\n\n    private\n\n    def generate_user_agent\n      'inspec-google/1.0.0'\n    end\n  end\n\n  # A class to aquire credentials and authorize Google API calls.\n  class Authorization\n    def initialize\n      @authorization = nil\n      @scopes = []\n    end\n\n    def authorize(obj)\n      raise ArgumentError, 'A from_* method needs to be called before' \\\n        unless @authorization\n\n      if obj.class <= URI::HTTPS || obj.class <= URI::HTTP\n        authorize_uri obj\n      elsif obj.class < Net::HTTPRequest\n        authorize_http obj\n      else\n        obj.authorization = @authorization\n        obj\n      end\n    end\n\n    def for!(*scopes)\n      @scopes = scopes\n      self\n    end\n\n    def from_google_credentials_json!(credentials_file)\n      raise 'Missing argument for scopes' if @scopes.empty?\n      @authorization = ::Google::Auth::DefaultCredentials.make_creds(\n        json_key_io: File.open(credentials_file),\n        scope: @scopes,\n      )\n      self\n    end\n\n    def from_application_default!\n      @authorization = ::Google::Auth.get_application_default\n      self\n    end\n\n    private\n\n    def authorize_uri(obj)\n      http = Net::HTTP.new(obj.host, obj.port)\n      http.use_ssl = obj.instance_of?(URI::HTTPS)\n      http.verify_mode = OpenSSL::SSL::VERIFY_PEER\n      [http, authorize_http(Net::HTTP::Get.new(obj.request_uri))]\n    end\n\n    def authorize_http(req)\n      req.extend TokenProperty\n      auth = {}\n      @authorization.apply!(auth)\n      req['Authorization'] = auth[:authorization]\n      req.token = auth[:authorization].split(' ')[1]\n      req\n    end\n  end\n\n  # Extension methods to enable retrieving the authentication token.\n  module TokenProperty\n    attr_accessor :token\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_basic.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/accesslevel_basic_conditions'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelBasic\n        attr_reader :combining_function\n\n        attr_reader :conditions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @combining_function = args['combiningFunction']\n          @conditions = GoogleInSpec::AccessContextManager::Property::AccessLevelBasicConditionsArray.parse(args['conditions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelBasic\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_basic_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/accesslevel_basic_conditions_device_policy'\nrequire 'google/accesscontextmanager/property/accesslevel_basic_conditions_device_policy_os_constraints'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelBasicConditions\n        attr_reader :ip_subnetworks\n\n        attr_reader :required_access_levels\n\n        attr_reader :members\n\n        attr_reader :negate\n\n        attr_reader :device_policy\n\n        attr_reader :regions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_subnetworks = args['ipSubnetworks']\n          @required_access_levels = args['requiredAccessLevels']\n          @members = args['members']\n          @negate = args['negate']\n          @device_policy = GoogleInSpec::AccessContextManager::Property::AccessLevelBasicConditionsDevicePolicy.new(args['devicePolicy'], to_s)\n          @regions = args['regions']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelBasicConditions\"\n        end\n      end\n\n      class AccessLevelBasicConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AccessLevelBasicConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AccessLevelBasicConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_basic_conditions_device_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/accesslevel_basic_conditions_device_policy_os_constraints'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelBasicConditionsDevicePolicy\n        attr_reader :require_screen_lock\n\n        attr_reader :allowed_encryption_statuses\n\n        attr_reader :allowed_device_management_levels\n\n        attr_reader :os_constraints\n\n        attr_reader :require_admin_approval\n\n        attr_reader :require_corp_owned\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @require_screen_lock = args['requireScreenlock']\n          @allowed_encryption_statuses = args['allowedEncryptionStatuses']\n          @allowed_device_management_levels = args['allowedDeviceManagementLevels']\n          @os_constraints = GoogleInSpec::AccessContextManager::Property::AccessLevelBasicConditionsDevicePolicyOsConstraintsArray.parse(args['osConstraints'], to_s)\n          @require_admin_approval = args['requireAdminApproval']\n          @require_corp_owned = args['requireCorpOwned']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelBasicConditionsDevicePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_basic_conditions_device_policy_os_constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelBasicConditionsDevicePolicyOsConstraints\n        attr_reader :minimum_version\n\n        attr_reader :os_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @minimum_version = args['minimumVersion']\n          @os_type = args['osType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelBasicConditionsDevicePolicyOsConstraints\"\n        end\n      end\n\n      class AccessLevelBasicConditionsDevicePolicyOsConstraintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AccessLevelBasicConditionsDevicePolicyOsConstraints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AccessLevelBasicConditionsDevicePolicyOsConstraints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_custom.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/accesslevel_custom_expr'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelCustom\n        attr_reader :expr\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expr = GoogleInSpec::AccessContextManager::Property::AccessLevelCustomExpr.new(args['expr'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelCustom\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/accesslevel_custom_expr.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class AccessLevelCustomExpr\n        attr_reader :expression\n\n        attr_reader :title\n\n        attr_reader :description\n\n        attr_reader :location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expression = args['expression']\n          @title = args['title']\n          @description = args['description']\n          @location = args['location']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AccessLevelCustomExpr\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/serviceperimeter_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/serviceperimeter_spec_vpc_accessible_services'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class ServicePerimeterSpec\n        attr_reader :resources\n\n        attr_reader :access_levels\n\n        attr_reader :restricted_services\n\n        attr_reader :vpc_accessible_services\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @resources = args['resources']\n          @access_levels = args['accessLevels']\n          @restricted_services = args['restrictedServices']\n          @vpc_accessible_services = GoogleInSpec::AccessContextManager::Property::ServicePerimeterSpecVPCAccessibleServices.new(args['vpcAccessibleServices'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServicePerimeterSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/serviceperimeter_spec_vpc_accessible_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class ServicePerimeterSpecVPCAccessibleServices\n        attr_reader :enable_restriction\n\n        attr_reader :allowed_services\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_restriction = args['enableRestriction']\n          @allowed_services = args['allowedServices']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServicePerimeterSpecVPCAccessibleServices\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/serviceperimeter_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/accesscontextmanager/property/serviceperimeter_status_vpc_accessible_services'\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class ServicePerimeterStatus\n        attr_reader :resources\n\n        attr_reader :access_levels\n\n        attr_reader :restricted_services\n\n        attr_reader :vpc_accessible_services\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @resources = args['resources']\n          @access_levels = args['accessLevels']\n          @restricted_services = args['restrictedServices']\n          @vpc_accessible_services = GoogleInSpec::AccessContextManager::Property::ServicePerimeterStatusVPCAccessibleServices.new(args['vpcAccessibleServices'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServicePerimeterStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/accesscontextmanager/property/serviceperimeter_status_vpc_accessible_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AccessContextManager\n    module Property\n      class ServicePerimeterStatusVPCAccessibleServices\n        attr_reader :enable_restriction\n\n        attr_reader :allowed_services\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_restriction = args['enableRestriction']\n          @allowed_services = args['allowedServices']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServicePerimeterStatusVPCAccessibleServices\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/apigee/property/organization_addons_config_advanced_api_ops_config'\nrequire 'google/apigee/property/organization_addons_config_analytics_config'\nrequire 'google/apigee/property/organization_addons_config_api_security_config'\nrequire 'google/apigee/property/organization_addons_config_connectors_platform_config'\nrequire 'google/apigee/property/organization_addons_config_integration_config'\nrequire 'google/apigee/property/organization_addons_config_monetization_config'\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfig\n        attr_reader :integration_config\n\n        attr_reader :api_security_config\n\n        attr_reader :monetization_config\n\n        attr_reader :connectors_platform_config\n\n        attr_reader :analytics_config\n\n        attr_reader :advanced_api_ops_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @integration_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigIntegrationConfig.new(args['integrationConfig'], to_s)\n          @api_security_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigApiSecurityConfig.new(args['apiSecurityConfig'], to_s)\n          @monetization_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigMonetizationConfig.new(args['monetizationConfig'], to_s)\n          @connectors_platform_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigConnectorsPlatformConfig.new(args['connectorsPlatformConfig'], to_s)\n          @analytics_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigAnalyticsConfig.new(args['analyticsConfig'], to_s)\n          @advanced_api_ops_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfigAdvancedApiOpsConfig.new(args['advancedApiOpsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_advanced_api_ops_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigAdvancedApiOpsConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigAdvancedApiOpsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_analytics_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigAnalyticsConfig\n        attr_reader :expire_time_millis\n\n        attr_reader :state\n\n        attr_reader :enabled\n\n        attr_reader :update_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expire_time_millis = args['expireTimeMillis']\n          @state = args['state']\n          @enabled = args['enabled']\n          @update_time = args['updateTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigAnalyticsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_api_security_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigApiSecurityConfig\n        attr_reader :enabled\n\n        attr_reader :expires_at\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @expires_at = args['expiresAt']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigApiSecurityConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_connectors_platform_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigConnectorsPlatformConfig\n        attr_reader :expires_at\n\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expires_at = args['expiresAt']\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigConnectorsPlatformConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_integration_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigIntegrationConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigIntegrationConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_addons_config_monetization_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationAddonsConfigMonetizationConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationAddonsConfigMonetizationConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/apigee/property/organization_properties_property'\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationProperties\n        attr_reader :property\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @property = GoogleInSpec::Apigee::Property::OrganizationPropertiesPropertyArray.parse(args['property'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organization_properties_property.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationPropertiesProperty\n        attr_reader :value\n\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationPropertiesProperty\"\n        end\n      end\n\n      class OrganizationPropertiesPropertyArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return OrganizationPropertiesProperty.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| OrganizationPropertiesProperty.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organizationapi_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationApiLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationApiLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/apigee/property/organizationapi_meta_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Apigee\n    module Property\n      class OrganizationApiMetaData\n        attr_reader :last_modified_at\n\n        attr_reader :created_at\n\n        attr_reader :sub_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @last_modified_at = args['lastModifiedAt']\n          @created_at = args['createdAt']\n          @sub_type = args['subType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationApiMetaData\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/appengine/property/standardappversion_automatic_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/appengine/property/standardappversion_automatic_scaling_standard_scheduler_settings'\nmodule GoogleInSpec\n  module AppEngine\n    module Property\n      class StandardAppVersionAutomaticScaling\n        attr_reader :max_concurrent_requests\n\n        attr_reader :max_idle_instances\n\n        attr_reader :max_pending_latency\n\n        attr_reader :min_idle_instances\n\n        attr_reader :min_pending_latency\n\n        attr_reader :standard_scheduler_settings\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_concurrent_requests = args['maxConcurrentRequests']\n          @max_idle_instances = args['maxIdleInstances']\n          @max_pending_latency = args['maxPendingLatency']\n          @min_idle_instances = args['minIdleInstances']\n          @min_pending_latency = args['minPendingLatency']\n          @standard_scheduler_settings = GoogleInSpec::AppEngine::Property::StandardAppVersionAutomaticScalingStandardSchedulerSettings.new(args['standardSchedulerSettings'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} StandardAppVersionAutomaticScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/appengine/property/standardappversion_automatic_scaling_standard_scheduler_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AppEngine\n    module Property\n      class StandardAppVersionAutomaticScalingStandardSchedulerSettings\n        attr_reader :target_cpu_utilization\n\n        attr_reader :target_throughput_utilization\n\n        attr_reader :min_instances\n\n        attr_reader :max_instances\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_cpu_utilization = args['targetCpuUtilization']\n          @target_throughput_utilization = args['targetThroughputUtilization']\n          @min_instances = args['minInstances']\n          @max_instances = args['maxInstances']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StandardAppVersionAutomaticScalingStandardSchedulerSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/appengine/property/standardappversion_basic_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AppEngine\n    module Property\n      class StandardAppVersionBasicScaling\n        attr_reader :idle_timeout\n\n        attr_reader :max_instances\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @idle_timeout = args['idleTimeout']\n          @max_instances = args['maxInstances']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StandardAppVersionBasicScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/appengine/property/standardappversion_manual_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AppEngine\n    module Property\n      class StandardAppVersionManualScaling\n        attr_reader :instances\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instances = args['instances']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StandardAppVersionManualScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/appengine/property/standardappversion_vpc_access_connector.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module AppEngine\n    module Property\n      class StandardAppVersionVPCAccessConnector\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StandardAppVersionVPCAccessConnector\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_cleanup_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryCleanupPolicies\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryCleanupPolicies\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_docker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryDockerConfig\n        attr_reader :immutable_tags\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @immutable_tags = args['immutableTags']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryDockerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_maven_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryMavenConfig\n        attr_reader :allow_snapshot_overwrites\n\n        attr_reader :version_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_snapshot_overwrites = args['allowSnapshotOverwrites']\n          @version_policy = args['versionPolicy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryMavenConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository_public_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_docker_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_maven_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_npm_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_python_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_upstream_credentials'\nrequire 'google/artifactregistry/property/projectlocationrepository_rrcucup_credentials'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository_public_repository'\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfig\n        attr_reader :docker_repository\n\n        attr_reader :maven_repository\n\n        attr_reader :npm_repository\n\n        attr_reader :python_repository\n\n        attr_reader :apt_repository\n\n        attr_reader :yum_repository\n\n        attr_reader :description\n\n        attr_reader :upstream_credentials\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @docker_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigDockerRepository.new(args['dockerRepository'], to_s)\n          @maven_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigMavenRepository.new(args['mavenRepository'], to_s)\n          @npm_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigNpmRepository.new(args['npmRepository'], to_s)\n          @python_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigPythonRepository.new(args['pythonRepository'], to_s)\n          @apt_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigAptRepository.new(args['aptRepository'], to_s)\n          @yum_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigYumRepository.new(args['yumRepository'], to_s)\n          @description = args['description']\n          @upstream_credentials = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentials.new(args['upstreamCredentials'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository_public_repository'\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigAptRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository.new(args['publicRepository'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigAptRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository_public_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository\n        attr_reader :repository_base\n\n        attr_reader :repository_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @repository_base = args['repositoryBase']\n          @repository_path = args['repositoryPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_docker_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigDockerRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = args['publicRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigDockerRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_maven_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigMavenRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = args['publicRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigMavenRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_npm_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigNpmRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = args['publicRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigNpmRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_python_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigPythonRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = args['publicRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigPythonRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_upstream_credentials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/artifactregistry/property/projectlocationrepository_rrcucup_credentials'\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentials\n        attr_reader :username_password_credentials\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @username_password_credentials = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentials.new(args['usernamePasswordCredentials'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentials\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository_public_repository'\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigYumRepository\n        attr_reader :public_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @public_repository = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository.new(args['publicRepository'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigYumRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository_public_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository\n        attr_reader :repository_base\n\n        attr_reader :repository_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @repository_base = args['repositoryBase']\n          @repository_path = args['repositoryPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_rrcucup_credentials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentials\n        attr_reader :username\n\n        attr_reader :password_secret_version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @username = args['username']\n          @password_secret_version = args['passwordSecretVersion']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentials\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_virtual_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/artifactregistry/property/projectlocationrepository_virtual_repository_config_upstream_policies'\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryVirtualRepositoryConfig\n        attr_reader :upstream_policies\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @upstream_policies = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPoliciesArray.parse(args['upstreamPolicies'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryVirtualRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/artifactregistry/property/projectlocationrepository_virtual_repository_config_upstream_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Artifactregistry\n    module Property\n      class ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPolicies\n        attr_reader :id\n\n        attr_reader :repository\n\n        attr_reader :priority\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @repository = args['repository']\n          @priority = args['priority']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPolicies\"\n        end\n      end\n\n      class ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPoliciesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPolicies.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationRepositoryVirtualRepositoryConfigUpstreamPolicies.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/dataset_access.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/dataset_access_view'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetAccess\n        attr_reader :domain\n\n        attr_reader :group_by_email\n\n        attr_reader :role\n\n        attr_reader :special_group\n\n        attr_reader :user_by_email\n\n        attr_reader :iam_member\n\n        attr_reader :view\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @domain = args['domain']\n          @group_by_email = args['groupByEmail']\n          @role = args['role']\n          @special_group = args['specialGroup']\n          @user_by_email = args['userByEmail']\n          @iam_member = args['iamMember']\n          @view = GoogleInSpec::BigQuery::Property::DatasetAccessView.new(args['view'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetAccess\"\n        end\n      end\n\n      class DatasetAccessArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatasetAccess.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatasetAccess.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/dataset_access_view.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetAccessView\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = args['datasetId']\n          @project_id = args['projectId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetAccessView\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/dataset_dataset_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetDatasetReference\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = args['datasetId']\n          @project_id = args['projectId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetDatasetReference\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/dataset_default_encryption_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class DatasetDefaultEncryptionConfiguration\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetDefaultEncryptionConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_encryption_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableEncryptionConfiguration\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableEncryptionConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nrequire 'google/bigquery/property/table_external_data_configuration_csv_options'\nrequire 'google/bigquery/property/table_external_data_configuration_google_sheets_options'\nrequire 'google/bigquery/property/table_external_data_configuration_schema'\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfiguration\n        attr_reader :autodetect\n\n        attr_reader :compression\n\n        attr_reader :ignore_unknown_values\n\n        attr_reader :max_bad_records\n\n        attr_reader :source_format\n\n        attr_reader :source_uris\n\n        attr_reader :schema\n\n        attr_reader :google_sheets_options\n\n        attr_reader :csv_options\n\n        attr_reader :bigtable_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @autodetect = args['autodetect']\n          @compression = args['compression']\n          @ignore_unknown_values = args['ignoreUnknownValues']\n          @max_bad_records = args['maxBadRecords']\n          @source_format = args['sourceFormat']\n          @source_uris = args['sourceUris']\n          @schema = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationSchema.new(args['schema'], to_s)\n          @google_sheets_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationGoogleSheetsOptions.new(args['googleSheetsOptions'], to_s)\n          @csv_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationCsvOptions.new(args['csvOptions'], to_s)\n          @bigtable_options = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptions.new(args['bigtableOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_bigtable_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptions\n        attr_reader :ignore_unspecified_column_families\n\n        attr_reader :read_rowkey_as_string\n\n        attr_reader :column_families\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ignore_unspecified_column_families = args['ignoreUnspecifiedColumnFamilies']\n          @read_rowkey_as_string = args['readRowkeyAsString']\n          @column_families = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptionsColumnFamiliesArray.parse(args['columnFamilies'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_bigtable_options_column_families.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families_columns'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptionsColumnFamilies\n        attr_reader :columns\n\n        attr_reader :encoding\n\n        attr_reader :family_id\n\n        attr_reader :only_read_latest\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @columns = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumnsArray.parse(args['columns'], to_s)\n          @encoding = args['encoding']\n          @family_id = args['familyId']\n          @only_read_latest = args['onlyReadLatest']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptionsColumnFamilies\"\n        end\n      end\n\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationBigtableOptionsColumnFamilies.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamilies.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_bigtable_options_column_families_columns.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns\n        attr_reader :encoding\n\n        attr_reader :field_name\n\n        attr_reader :only_read_latest\n\n        attr_reader :qualifier_string\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @encoding = args['encoding']\n          @field_name = args['fieldName']\n          @only_read_latest = args['onlyReadLatest']\n          @qualifier_string = args['qualifierString']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns\"\n        end\n      end\n\n      class TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumnsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationBigtableOptionsColumnFamiliesColumns.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_csv_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationCsvOptions\n        attr_reader :allow_jagged_rows\n\n        attr_reader :allow_quoted_newlines\n\n        attr_reader :encoding\n\n        attr_reader :field_delimiter\n\n        attr_reader :quote\n\n        attr_reader :skip_leading_rows\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_jagged_rows = args['allowJaggedRows']\n          @allow_quoted_newlines = args['allowQuotedNewlines']\n          @encoding = args['encoding']\n          @field_delimiter = args['fieldDelimiter']\n          @quote = args['quote']\n          @skip_leading_rows = args['skipLeadingRows']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationCsvOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_google_sheets_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationGoogleSheetsOptions\n        attr_reader :skip_leading_rows\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @skip_leading_rows = args['skipLeadingRows']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationGoogleSheetsOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_schema.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationSchema\n        attr_reader :fields\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fields = GoogleInSpec::BigQuery::Property::TableExternalDataConfigurationSchemaFieldsArray.parse(args['fields'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationSchema\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_external_data_configuration_schema_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableExternalDataConfigurationSchemaFields\n        attr_reader :description\n\n        attr_reader :fields\n\n        attr_reader :mode\n\n        attr_reader :name\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @fields = args['fields']\n          @mode = args['mode']\n          @name = args['name']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableExternalDataConfigurationSchemaFields\"\n        end\n      end\n\n      class TableExternalDataConfigurationSchemaFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableExternalDataConfigurationSchemaFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableExternalDataConfigurationSchemaFields.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_schema.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_schema_fields'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableSchema\n        attr_reader :fields\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fields = GoogleInSpec::BigQuery::Property::TableSchemaFieldsArray.parse(args['fields'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableSchema\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_schema_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableSchemaFields\n        attr_reader :description\n\n        attr_reader :fields\n\n        attr_reader :mode\n\n        attr_reader :name\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @fields = args['fields']\n          @mode = args['mode']\n          @name = args['name']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableSchemaFields\"\n        end\n      end\n\n      class TableSchemaFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableSchemaFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableSchemaFields.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_streaming_buffer.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableStreamingBuffer\n        attr_reader :estimated_bytes\n\n        attr_reader :estimated_rows\n\n        attr_reader :oldest_entry_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @estimated_bytes = args['estimatedBytes']\n          @estimated_rows = args['estimatedRows']\n          @oldest_entry_time = args['oldestEntryTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableStreamingBuffer\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_table_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableTableReference\n        attr_reader :dataset_id\n\n        attr_reader :project_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataset_id = args['datasetId']\n          @project_id = args['projectId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableTableReference\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_time_partitioning.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableTimePartitioning\n        attr_reader :expiration_ms\n\n        attr_reader :field\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expiration_ms = args['expirationMs']\n          @field = args['field']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableTimePartitioning\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_view.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigquery/property/table_view_user_defined_function_resources'\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableView\n        attr_reader :use_legacy_sql\n\n        attr_reader :user_defined_function_resources\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @use_legacy_sql = args['useLegacySql']\n          @user_defined_function_resources = GoogleInSpec::BigQuery::Property::TableViewUserDefinedFunctionResourcesArray.parse(args['userDefinedFunctionResources'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableView\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigquery/property/table_view_user_defined_function_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module BigQuery\n    module Property\n      class TableViewUserDefinedFunctionResources\n        attr_reader :inline_code\n\n        attr_reader :resource_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @inline_code = args['inlineCode']\n          @resource_uri = args['resourceUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TableViewUserDefinedFunctionResources\"\n        end\n      end\n\n      class TableViewUserDefinedFunctionResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TableViewUserDefinedFunctionResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TableViewUserDefinedFunctionResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/cluster_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_limits'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_targets'\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterClusterConfig\n        attr_reader :cluster_autoscaling_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cluster_autoscaling_config = GoogleInSpec::Bigtableadmin::Property::ClusterClusterConfigClusterAutoscalingConfig.new(args['clusterAutoscalingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_limits'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_targets'\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterClusterConfigClusterAutoscalingConfig\n        attr_reader :autoscaling_limits\n\n        attr_reader :autoscaling_targets\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @autoscaling_limits = GoogleInSpec::Bigtableadmin::Property::ClusterClusterConfigClusterAutoscalingConfigAutoscalingLimits.new(args['autoscalingLimits'], to_s)\n          @autoscaling_targets = GoogleInSpec::Bigtableadmin::Property::ClusterClusterConfigClusterAutoscalingConfigAutoscalingTargets.new(args['autoscalingTargets'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterClusterConfigClusterAutoscalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_limits.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterClusterConfigClusterAutoscalingConfigAutoscalingLimits\n        attr_reader :min_serve_nodes\n\n        attr_reader :max_serve_nodes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_serve_nodes = args['minServeNodes']\n          @max_serve_nodes = args['maxServeNodes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterClusterConfigClusterAutoscalingConfigAutoscalingLimits\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_targets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterClusterConfigClusterAutoscalingConfigAutoscalingTargets\n        attr_reader :cpu_utilization_percent\n\n        attr_reader :storage_utilization_gib_per_node\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpu_utilization_percent = args['cpuUtilizationPercent']\n          @storage_utilization_gib_per_node = args['storageUtilizationGibPerNode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterClusterConfigClusterAutoscalingConfigAutoscalingTargets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/cluster_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterEncryptionConfig\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/clusterbackup_encryption_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/bigtableadmin/property/clusterbackup_encryption_info_encryption_status'\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterBackupEncryptionInfo\n        attr_reader :encryption_type\n\n        attr_reader :encryption_status\n\n        attr_reader :kms_key_version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @encryption_type = args['encryptionType']\n          @encryption_status = GoogleInSpec::Bigtableadmin::Property::ClusterBackupEncryptionInfoEncryptionStatus.new(args['encryptionStatus'], to_s)\n          @kms_key_version = args['kmsKeyVersion']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterBackupEncryptionInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/clusterbackup_encryption_info_encryption_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class ClusterBackupEncryptionInfoEncryptionStatus\n        attr_reader :code\n\n        attr_reader :message\n\n        attr_reader :details\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n          @details = args['details']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterBackupEncryptionInfoEncryptionStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/instanceappprofile_data_boost_isolation_read_only.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class InstanceAppProfileDataBoostIsolationReadOnly\n        attr_reader :compute_billing_owner\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @compute_billing_owner = args['computeBillingOwner']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAppProfileDataBoostIsolationReadOnly\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/instanceappprofile_multi_cluster_routing_use_any.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class InstanceAppProfileMultiClusterRoutingUseAny\n        attr_reader :cluster_ids\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cluster_ids = args['clusterIds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAppProfileMultiClusterRoutingUseAny\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/instanceappprofile_single_cluster_routing.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class InstanceAppProfileSingleClusterRouting\n        attr_reader :cluster_id\n\n        attr_reader :allow_transactional_writes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cluster_id = args['clusterId']\n          @allow_transactional_writes = args['allowTransactionalWrites']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAppProfileSingleClusterRouting\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/bigtableadmin/property/instanceappprofile_standard_isolation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Bigtableadmin\n    module Property\n      class InstanceAppProfileStandardIsolation\n        attr_reader :priority\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @priority = args['priority']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAppProfileStandardIsolation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_artifacts'\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects'\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects_timing'\nrequire 'google/cloudbuild/property/trigger_build_options'\nrequire 'google/cloudbuild/property/trigger_build_options_volumes'\nrequire 'google/cloudbuild/property/trigger_build_secrets'\nrequire 'google/cloudbuild/property/trigger_build_source'\nrequire 'google/cloudbuild/property/trigger_build_source_repo_source'\nrequire 'google/cloudbuild/property/trigger_build_source_storage_source'\nrequire 'google/cloudbuild/property/trigger_build_steps'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuild\n        attr_reader :source\n\n        attr_reader :tags\n\n        attr_reader :images\n\n        attr_reader :substitutions\n\n        attr_reader :queue_ttl\n\n        attr_reader :logs_bucket\n\n        attr_reader :timeout\n\n        attr_reader :secrets\n\n        attr_reader :steps\n\n        attr_reader :artifacts\n\n        attr_reader :options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source = GoogleInSpec::CloudBuild::Property::TriggerBuildSource.new(args['source'], to_s)\n          @tags = args['tags']\n          @images = args['images']\n          @substitutions = args['substitutions']\n          @queue_ttl = args['queueTtl']\n          @logs_bucket = args['logsBucket']\n          @timeout = args['timeout']\n          @secrets = GoogleInSpec::CloudBuild::Property::TriggerBuildSecretsArray.parse(args['secrets'], to_s)\n          @steps = GoogleInSpec::CloudBuild::Property::TriggerBuildStepsArray.parse(args['steps'], to_s)\n          @artifacts = GoogleInSpec::CloudBuild::Property::TriggerBuildArtifacts.new(args['artifacts'], to_s)\n          @options = GoogleInSpec::CloudBuild::Property::TriggerBuildOptions.new(args['options'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuild\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_artifacts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects'\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects_timing'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildArtifacts\n        attr_reader :images\n\n        attr_reader :objects\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @images = args['images']\n          @objects = GoogleInSpec::CloudBuild::Property::TriggerBuildArtifactsObjects.new(args['objects'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildArtifacts\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_artifacts_objects.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects_timing'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildArtifactsObjects\n        attr_reader :location\n\n        attr_reader :paths\n\n        attr_reader :timing\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @location = args['location']\n          @paths = args['paths']\n          @timing = GoogleInSpec::CloudBuild::Property::TriggerBuildArtifactsObjectsTiming.new(args['timing'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildArtifactsObjects\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_artifacts_objects_timing.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildArtifactsObjectsTiming\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildArtifactsObjectsTiming\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_options_volumes'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildOptions\n        attr_reader :source_provenance_hash\n\n        attr_reader :requested_verify_option\n\n        attr_reader :machine_type\n\n        attr_reader :disk_size_gb\n\n        attr_reader :substitution_option\n\n        attr_reader :dynamic_substitutions\n\n        attr_reader :log_streaming_option\n\n        attr_reader :worker_pool\n\n        attr_reader :logging\n\n        attr_reader :env\n\n        attr_reader :secret_env\n\n        attr_reader :volumes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source_provenance_hash = args['sourceProvenanceHash']\n          @requested_verify_option = args['requestedVerifyOption']\n          @machine_type = args['machineType']\n          @disk_size_gb = args['diskSizeGb']\n          @substitution_option = args['substitutionOption']\n          @dynamic_substitutions = args['dynamicSubstitutions']\n          @log_streaming_option = args['logStreamingOption']\n          @worker_pool = args['workerPool']\n          @logging = args['logging']\n          @env = args['env']\n          @secret_env = args['secretEnv']\n          @volumes = GoogleInSpec::CloudBuild::Property::TriggerBuildOptionsVolumesArray.parse(args['volumes'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_options_volumes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildOptionsVolumes\n        attr_reader :name\n\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildOptionsVolumes\"\n        end\n      end\n\n      class TriggerBuildOptionsVolumesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildOptionsVolumes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildOptionsVolumes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_secrets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSecrets\n        attr_reader :kms_key_name\n\n        attr_reader :secret_env\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n          @secret_env = args['secretEnv']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSecrets\"\n        end\n      end\n\n      class TriggerBuildSecretsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildSecrets.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildSecrets.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_source_repo_source'\nrequire 'google/cloudbuild/property/trigger_build_source_storage_source'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSource\n        attr_reader :storage_source\n\n        attr_reader :repo_source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @storage_source = GoogleInSpec::CloudBuild::Property::TriggerBuildSourceStorageSource.new(args['storageSource'], to_s)\n          @repo_source = GoogleInSpec::CloudBuild::Property::TriggerBuildSourceRepoSource.new(args['repoSource'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_source_repo_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSourceRepoSource\n        attr_reader :project_id\n\n        attr_reader :repo_name\n\n        attr_reader :dir\n\n        attr_reader :invert_regex\n\n        attr_reader :substitutions\n\n        attr_reader :branch_name\n\n        attr_reader :tag_name\n\n        attr_reader :commit_sha\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @repo_name = args['repoName']\n          @dir = args['dir']\n          @invert_regex = args['invertRegex']\n          @substitutions = args['substitutions']\n          @branch_name = args['branchName']\n          @tag_name = args['tagName']\n          @commit_sha = args['commitSha']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSourceRepoSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_source_storage_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSourceStorageSource\n        attr_reader :bucket\n\n        attr_reader :object\n\n        attr_reader :generation\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n          @object = args['object']\n          @generation = args['generation']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSourceStorageSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_steps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_build_steps_volumes'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildSteps\n        attr_reader :name\n\n        attr_reader :args\n\n        attr_reader :env\n\n        attr_reader :id\n\n        attr_reader :entrypoint\n\n        attr_reader :dir\n\n        attr_reader :secret_env\n\n        attr_reader :timeout\n\n        attr_reader :timing\n\n        attr_reader :volumes\n\n        attr_reader :wait_for\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @args = args['args']\n          @env = args['env']\n          @id = args['id']\n          @entrypoint = args['entrypoint']\n          @dir = args['dir']\n          @secret_env = args['secretEnv']\n          @timeout = args['timeout']\n          @timing = args['timing']\n          @volumes = GoogleInSpec::CloudBuild::Property::TriggerBuildStepsVolumesArray.parse(args['volumes'], to_s)\n          @wait_for = args['waitFor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildSteps\"\n        end\n      end\n\n      class TriggerBuildStepsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildSteps.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildSteps.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_build_steps_volumes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerBuildStepsVolumes\n        attr_reader :name\n\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerBuildStepsVolumes\"\n        end\n      end\n\n      class TriggerBuildStepsVolumesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TriggerBuildStepsVolumes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TriggerBuildStepsVolumes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_github.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudbuild/property/trigger_github_pull_request'\nrequire 'google/cloudbuild/property/trigger_github_push'\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerGithub\n        attr_reader :owner\n\n        attr_reader :name\n\n        attr_reader :pull_request\n\n        attr_reader :push\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @owner = args['owner']\n          @name = args['name']\n          @pull_request = GoogleInSpec::CloudBuild::Property::TriggerGithubPullRequest.new(args['pullRequest'], to_s)\n          @push = GoogleInSpec::CloudBuild::Property::TriggerGithubPush.new(args['push'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerGithub\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_github_pull_request.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerGithubPullRequest\n        attr_reader :branch\n\n        attr_reader :comment_control\n\n        attr_reader :invert_regex\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @branch = args['branch']\n          @comment_control = args['commentControl']\n          @invert_regex = args['invertRegex']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerGithubPullRequest\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_github_push.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerGithubPush\n        attr_reader :invert_regex\n\n        attr_reader :branch\n\n        attr_reader :tag\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @invert_regex = args['invertRegex']\n          @branch = args['branch']\n          @tag = args['tag']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerGithubPush\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudbuild/property/trigger_trigger_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudBuild\n    module Property\n      class TriggerTriggerTemplate\n        attr_reader :project_id\n\n        attr_reader :repo_name\n\n        attr_reader :dir\n\n        attr_reader :invert_regex\n\n        attr_reader :branch_name\n\n        attr_reader :tag_name\n\n        attr_reader :commit_sha\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @repo_name = args['repoName']\n          @dir = args['dir']\n          @invert_regex = args['invertRegex']\n          @branch_name = args['branchName']\n          @tag_name = args['tagName']\n          @commit_sha = args['commitSha']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TriggerTriggerTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudfunctions/property/cloudfunction_event_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionEventTrigger\n        attr_reader :event_type\n\n        attr_reader :resource\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @event_type = args['eventType']\n          @resource = args['resource']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionEventTrigger\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudfunctions/property/cloudfunction_https_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionHttpsTrigger\n        attr_reader :url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionHttpsTrigger\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudfunctions/property/cloudfunction_source_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudFunctions\n    module Property\n      class CloudFunctionSourceRepository\n        attr_reader :url\n\n        attr_reader :deployed_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @deployed_url = args['deployedUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CloudFunctionSourceRepository\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_app_engine_http_target.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing'\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobAppEngineHttpTarget\n        attr_reader :http_method\n\n        attr_reader :app_engine_routing\n\n        attr_reader :relative_uri\n\n        attr_reader :body\n\n        attr_reader :headers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_method = args['httpMethod']\n          @app_engine_routing = GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTargetAppEngineRouting.new(args['appEngineRouting'], to_s)\n          @relative_uri = args['relativeUri']\n          @body = args['body']\n          @headers = args['headers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobAppEngineHttpTarget\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobAppEngineHttpTargetAppEngineRouting\n        attr_reader :service\n\n        attr_reader :version\n\n        attr_reader :instance\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @version = args['version']\n          @instance = args['instance']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobAppEngineHttpTargetAppEngineRouting\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_http_target.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/cloudscheduler/property/job_http_target_oauth_token'\nrequire 'google/cloudscheduler/property/job_http_target_oidc_token'\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobHttpTarget\n        attr_reader :uri\n\n        attr_reader :http_method\n\n        attr_reader :body\n\n        attr_reader :headers\n\n        attr_reader :oauth_token\n\n        attr_reader :oidc_token\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uri = args['uri']\n          @http_method = args['httpMethod']\n          @body = args['body']\n          @headers = args['headers']\n          @oauth_token = GoogleInSpec::CloudScheduler::Property::JobHttpTargetOauthToken.new(args['oauthToken'], to_s)\n          @oidc_token = GoogleInSpec::CloudScheduler::Property::JobHttpTargetOidcToken.new(args['oidcToken'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHttpTarget\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_http_target_oauth_token.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobHttpTargetOauthToken\n        attr_reader :service_account_email\n\n        attr_reader :scope\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_account_email = args['serviceAccountEmail']\n          @scope = args['scope']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHttpTargetOauthToken\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_http_target_oidc_token.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobHttpTargetOidcToken\n        attr_reader :service_account_email\n\n        attr_reader :audience\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_account_email = args['serviceAccountEmail']\n          @audience = args['audience']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHttpTargetOidcToken\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_pubsub_target.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobPubsubTarget\n        attr_reader :topic_name\n\n        attr_reader :data\n\n        attr_reader :attributes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @topic_name = args['topicName']\n          @data = args['data']\n          @attributes = args['attributes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPubsubTarget\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/cloudscheduler/property/job_retry_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module CloudScheduler\n    module Property\n      class JobRetryConfig\n        attr_reader :retry_count\n\n        attr_reader :max_retry_duration\n\n        attr_reader :min_backoff_duration\n\n        attr_reader :max_backoff_duration\n\n        attr_reader :max_doublings\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_count = args['retryCount']\n          @max_retry_duration = args['maxRetryDuration']\n          @min_backoff_duration = args['minBackoffDuration']\n          @max_backoff_duration = args['maxBackoffDuration']\n          @max_doublings = args['maxDoublings']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobRetryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_database_config'\nrequire 'google/composer/property/projectlocationenvironment_config_encryption_config'\nrequire 'google/composer/property/projectlocationenvironment_config_maintenance_window'\nrequire 'google/composer/property/projectlocationenvironment_config_master_authorized_networks_config'\nrequire 'google/composer/property/projectlocationenvironment_config_master_authorized_networks_config_cidr_blocks'\nrequire 'google/composer/property/projectlocationenvironment_config_node_config'\nrequire 'google/composer/property/projectlocationenvironment_config_node_config_ip_allocation_policy'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_networking_config'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_private_cluster_config'\nrequire 'google/composer/property/projectlocationenvironment_config_recovery_config'\nrequire 'google/composer/property/projectlocationenvironment_config_recovery_config_scheduled_snapshots_config'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_airflow_config_overrides'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_env_variables'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_pypi_packages'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_config'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_network_access_control'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_network_access_control_allowed_ip_ranges'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_scheduler'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_triggerer'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_web_server'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_worker'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfig\n        attr_reader :gke_cluster\n\n        attr_reader :dag_gcs_prefix\n\n        attr_reader :node_count\n\n        attr_reader :software_config\n\n        attr_reader :node_config\n\n        attr_reader :private_environment_config\n\n        attr_reader :web_server_network_access_control\n\n        attr_reader :database_config\n\n        attr_reader :web_server_config\n\n        attr_reader :encryption_config\n\n        attr_reader :maintenance_window\n\n        attr_reader :workloads_config\n\n        attr_reader :environment_size\n\n        attr_reader :airflow_uri\n\n        attr_reader :airflow_byoid_uri\n\n        attr_reader :master_authorized_networks_config\n\n        attr_reader :recovery_config\n\n        attr_reader :resilience_mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gke_cluster = args['gkeCluster']\n          @dag_gcs_prefix = args['dagGcsPrefix']\n          @node_count = args['nodeCount']\n          @software_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigSoftwareConfig.new(args['softwareConfig'], to_s)\n          @node_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigNodeConfig.new(args['nodeConfig'], to_s)\n          @private_environment_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigPrivateEnvironmentConfig.new(args['privateEnvironmentConfig'], to_s)\n          @web_server_network_access_control = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWebServerNetworkAccessControl.new(args['webServerNetworkAccessControl'], to_s)\n          @database_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigDatabaseConfig.new(args['databaseConfig'], to_s)\n          @web_server_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWebServerConfig.new(args['webServerConfig'], to_s)\n          @encryption_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigEncryptionConfig.new(args['encryptionConfig'], to_s)\n          @maintenance_window = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigMaintenanceWindow.new(args['maintenanceWindow'], to_s)\n          @workloads_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWorkloadsConfig.new(args['workloadsConfig'], to_s)\n          @environment_size = args['environmentSize']\n          @airflow_uri = args['airflowUri']\n          @airflow_byoid_uri = args['airflowByoidUri']\n          @master_authorized_networks_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfig.new(args['masterAuthorizedNetworksConfig'], to_s)\n          @recovery_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigRecoveryConfig.new(args['recoveryConfig'], to_s)\n          @resilience_mode = args['resilienceMode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_database_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigDatabaseConfig\n        attr_reader :machine_type\n\n        attr_reader :zone\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @zone = args['zone']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigDatabaseConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigEncryptionConfig\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigMaintenanceWindow\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :recurrence\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @recurrence = args['recurrence']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_master_authorized_networks_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_master_authorized_networks_config_cidr_blocks'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfig\n        attr_reader :enabled\n\n        attr_reader :cidr_blocks\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @cidr_blocks = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocksArray.parse(args['cidrBlocks'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_master_authorized_networks_config_cidr_blocks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocks\n        attr_reader :display_name\n\n        attr_reader :cidr_block\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @display_name = args['displayName']\n          @cidr_block = args['cidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocks\"\n        end\n      end\n\n      class ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationEnvironmentConfigMasterAuthorizedNetworksConfigCidrBlocks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_node_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_node_config_ip_allocation_policy'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigNodeConfig\n        attr_reader :location\n\n        attr_reader :machine_type\n\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :disk_size_gb\n\n        attr_reader :oauth_scopes\n\n        attr_reader :service_account\n\n        attr_reader :tags\n\n        attr_reader :ip_allocation_policy\n\n        attr_reader :enable_ip_masq_agent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @location = args['location']\n          @machine_type = args['machineType']\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @disk_size_gb = args['diskSizeGb']\n          @oauth_scopes = args['oauthScopes']\n          @service_account = args['serviceAccount']\n          @tags = args['tags']\n          @ip_allocation_policy = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigNodeConfigIpAllocationPolicy.new(args['ipAllocationPolicy'], to_s)\n          @enable_ip_masq_agent = args['enableIpMasqAgent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigNodeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_node_config_ip_allocation_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigNodeConfigIpAllocationPolicy\n        attr_reader :use_ip_aliases\n\n        attr_reader :cluster_secondary_range_name\n\n        attr_reader :cluster_ipv4_cidr_block\n\n        attr_reader :services_secondary_range_name\n\n        attr_reader :services_ipv4_cidr_block\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @use_ip_aliases = args['useIpAliases']\n          @cluster_secondary_range_name = args['clusterSecondaryRangeName']\n          @cluster_ipv4_cidr_block = args['clusterIpv4CidrBlock']\n          @services_secondary_range_name = args['servicesSecondaryRangeName']\n          @services_ipv4_cidr_block = args['servicesIpv4CidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigNodeConfigIpAllocationPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_private_environment_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_networking_config'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_private_cluster_config'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigPrivateEnvironmentConfig\n        attr_reader :enable_private_environment\n\n        attr_reader :private_cluster_config\n\n        attr_reader :web_server_ipv4_cidr_block\n\n        attr_reader :cloud_sql_ipv4_cidr_block\n\n        attr_reader :web_server_ipv4_reserved_range\n\n        attr_reader :cloud_composer_network_ipv4_cidr_block\n\n        attr_reader :cloud_composer_network_ipv4_reserved_range\n\n        attr_reader :enable_privately_used_public_ips\n\n        attr_reader :cloud_composer_connection_subnetwork\n\n        attr_reader :networking_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_private_environment = args['enablePrivateEnvironment']\n          @private_cluster_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigPrivateEnvironmentConfigPrivateClusterConfig.new(args['privateClusterConfig'], to_s)\n          @web_server_ipv4_cidr_block = args['webServerIpv4CidrBlock']\n          @cloud_sql_ipv4_cidr_block = args['cloudSqlIpv4CidrBlock']\n          @web_server_ipv4_reserved_range = args['webServerIpv4ReservedRange']\n          @cloud_composer_network_ipv4_cidr_block = args['cloudComposerNetworkIpv4CidrBlock']\n          @cloud_composer_network_ipv4_reserved_range = args['cloudComposerNetworkIpv4ReservedRange']\n          @enable_privately_used_public_ips = args['enablePrivatelyUsedPublicIps']\n          @cloud_composer_connection_subnetwork = args['cloudComposerConnectionSubnetwork']\n          @networking_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigPrivateEnvironmentConfigNetworkingConfig.new(args['networkingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigPrivateEnvironmentConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_private_environment_config_networking_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigPrivateEnvironmentConfigNetworkingConfig\n        attr_reader :connection_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @connection_type = args['connectionType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigPrivateEnvironmentConfigNetworkingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_private_environment_config_private_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigPrivateEnvironmentConfigPrivateClusterConfig\n        attr_reader :enable_private_endpoint\n\n        attr_reader :master_ipv4_cidr_block\n\n        attr_reader :master_ipv4_reserved_range\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_private_endpoint = args['enablePrivateEndpoint']\n          @master_ipv4_cidr_block = args['masterIpv4CidrBlock']\n          @master_ipv4_reserved_range = args['masterIpv4ReservedRange']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigPrivateEnvironmentConfigPrivateClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_recovery_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_recovery_config_scheduled_snapshots_config'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigRecoveryConfig\n        attr_reader :scheduled_snapshots_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @scheduled_snapshots_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigRecoveryConfigScheduledSnapshotsConfig.new(args['scheduledSnapshotsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigRecoveryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_recovery_config_scheduled_snapshots_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigRecoveryConfigScheduledSnapshotsConfig\n        attr_reader :enabled\n\n        attr_reader :snapshot_location\n\n        attr_reader :snapshot_creation_schedule\n\n        attr_reader :time_zone\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @snapshot_location = args['snapshotLocation']\n          @snapshot_creation_schedule = args['snapshotCreationSchedule']\n          @time_zone = args['timeZone']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigRecoveryConfigScheduledSnapshotsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_software_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_airflow_config_overrides'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_env_variables'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_pypi_packages'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigSoftwareConfig\n        attr_reader :image_version\n\n        attr_reader :airflow_config_overrides\n\n        attr_reader :pypi_packages\n\n        attr_reader :env_variables\n\n        attr_reader :python_version\n\n        attr_reader :scheduler_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @image_version = args['imageVersion']\n          @airflow_config_overrides = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigSoftwareConfigAirflowConfigOverrides.new(args['airflowConfigOverrides'], to_s)\n          @pypi_packages = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigSoftwareConfigPypiPackages.new(args['pypiPackages'], to_s)\n          @env_variables = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigSoftwareConfigEnvVariables.new(args['envVariables'], to_s)\n          @python_version = args['pythonVersion']\n          @scheduler_count = args['schedulerCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigSoftwareConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_software_config_airflow_config_overrides.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigSoftwareConfigAirflowConfigOverrides\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigSoftwareConfigAirflowConfigOverrides\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_software_config_env_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigSoftwareConfigEnvVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigSoftwareConfigEnvVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_software_config_pypi_packages.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigSoftwareConfigPypiPackages\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigSoftwareConfigPypiPackages\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_web_server_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWebServerConfig\n        attr_reader :machine_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWebServerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_web_server_network_access_control.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_network_access_control_allowed_ip_ranges'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWebServerNetworkAccessControl\n        attr_reader :allowed_ip_ranges\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allowed_ip_ranges = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRangesArray.parse(args['allowedIpRanges'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWebServerNetworkAccessControl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_web_server_network_access_control_allowed_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRanges\n        attr_reader :value\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRanges\"\n        end\n      end\n\n      class ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationEnvironmentConfigWebServerNetworkAccessControlAllowedIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_workloads_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_scheduler'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_triggerer'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_web_server'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_worker'\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWorkloadsConfig\n        attr_reader :scheduler\n\n        attr_reader :web_server\n\n        attr_reader :worker\n\n        attr_reader :triggerer\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @scheduler = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWorkloadsConfigScheduler.new(args['scheduler'], to_s)\n          @web_server = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWorkloadsConfigWebServer.new(args['webServer'], to_s)\n          @worker = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWorkloadsConfigWorker.new(args['worker'], to_s)\n          @triggerer = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfigWorkloadsConfigTriggerer.new(args['triggerer'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWorkloadsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_workloads_config_scheduler.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWorkloadsConfigScheduler\n        attr_reader :cpu\n\n        attr_reader :memory_gb\n\n        attr_reader :storage_gb\n\n        attr_reader :count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpu = args['cpu']\n          @memory_gb = args['memoryGb']\n          @storage_gb = args['storageGb']\n          @count = args['count']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWorkloadsConfigScheduler\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_workloads_config_triggerer.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWorkloadsConfigTriggerer\n        attr_reader :count\n\n        attr_reader :cpu\n\n        attr_reader :memory_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @count = args['count']\n          @cpu = args['cpu']\n          @memory_gb = args['memoryGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWorkloadsConfigTriggerer\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_workloads_config_web_server.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWorkloadsConfigWebServer\n        attr_reader :cpu\n\n        attr_reader :memory_gb\n\n        attr_reader :storage_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpu = args['cpu']\n          @memory_gb = args['memoryGb']\n          @storage_gb = args['storageGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWorkloadsConfigWebServer\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_config_workloads_config_worker.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentConfigWorkloadsConfigWorker\n        attr_reader :cpu\n\n        attr_reader :memory_gb\n\n        attr_reader :storage_gb\n\n        attr_reader :min_count\n\n        attr_reader :max_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpu = args['cpu']\n          @memory_gb = args['memoryGb']\n          @storage_gb = args['storageGb']\n          @min_count = args['minCount']\n          @max_count = args['maxCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentConfigWorkloadsConfigWorker\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n\n          @parent_identifier = parent_identifier\n          @additional_properties = args\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/composer/property/projectlocationenvironment_storage_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Composer\n    module Property\n      class ProjectLocationEnvironmentStorageConfig\n        attr_reader :bucket\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationEnvironmentStorageConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/acceleratortype_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AcceleratorTypeDeprecated\n        attr_reader :state\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = parse_time_string(args['state'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AcceleratorTypeDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/autoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_down_control'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_in_control'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scaling_schedules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicy\n        attr_reader :min_num_replicas\n\n        attr_reader :max_num_replicas\n\n        attr_reader :cool_down_period_sec\n\n        attr_reader :mode\n\n        attr_reader :scale_down_control\n\n        attr_reader :scale_in_control\n\n        attr_reader :cpu_utilization\n\n        attr_reader :custom_metric_utilizations\n\n        attr_reader :load_balancing_utilization\n\n        attr_reader :scaling_schedules\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_num_replicas = args['minNumReplicas']\n          @max_num_replicas = args['maxNumReplicas']\n          @cool_down_period_sec = args['coolDownPeriodSec']\n          @mode = args['mode']\n          @scale_down_control = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyScaleDownControl.new(args['scaleDownControl'], to_s)\n          @scale_in_control = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyScaleInControl.new(args['scaleInControl'], to_s)\n          @cpu_utilization = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyCpuUtilization.new(args['cpuUtilization'], to_s)\n          @custom_metric_utilizations = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyCustomMetricUtilizationsArray.parse(args['customMetricUtilizations'], to_s)\n          @load_balancing_utilization = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyLoadBalancingUtilization.new(args['loadBalancingUtilization'], to_s)\n          @scaling_schedules = args['scalingSchedules']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_cpu_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyCpuUtilization\n        attr_reader :utilization_target\n\n        attr_reader :predictive_method\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = args['utilizationTarget']\n          @predictive_method = args['predictiveMethod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyCpuUtilization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyCustomMetricUtilizations\n        attr_reader :metric\n\n        attr_reader :single_instance_assignment\n\n        attr_reader :utilization_target\n\n        attr_reader :utilization_target_type\n\n        attr_reader :filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric = args['metric']\n          @single_instance_assignment = args['singleInstanceAssignment']\n          @utilization_target = args['utilizationTarget']\n          @utilization_target_type = args['utilizationTargetType']\n          @filter = args['filter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyCustomMetricUtilizations\"\n        end\n      end\n\n      class AutoscalerAutoscalingPolicyCustomMetricUtilizationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AutoscalerAutoscalingPolicyCustomMetricUtilizations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AutoscalerAutoscalingPolicyCustomMetricUtilizations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyLoadBalancingUtilization\n        attr_reader :utilization_target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = args['utilizationTarget']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyLoadBalancingUtilization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_scale_down_control.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyScaleDownControl\n        attr_reader :max_scaled_down_replicas\n\n        attr_reader :time_window_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaled_down_replicas = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas.new(args['maxScaledDownReplicas'], to_s)\n          @time_window_sec = args['timeWindowSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyScaleDownControl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas\n        attr_reader :fixed\n\n        attr_reader :percent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed = args['fixed']\n          @percent = args['percent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_scale_in_control.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyScaleInControl\n        attr_reader :max_scaled_in_replicas\n\n        attr_reader :time_window_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaled_in_replicas = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas.new(args['maxScaledInReplicas'], to_s)\n          @time_window_sec = args['timeWindowSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyScaleInControl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas\n        attr_reader :fixed\n\n        attr_reader :percent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed = args['fixed']\n          @percent = args['percent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/autoscaler_autoscaling_policy_scaling_schedules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class AutoscalerAutoscalingPolicyScalingSchedules\n        attr_reader :min_required_replicas\n\n        attr_reader :schedule\n\n        attr_reader :time_zone\n\n        attr_reader :duration_sec\n\n        attr_reader :disabled\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_required_replicas = args['minRequiredReplicas']\n          @schedule = args['schedule']\n          @time_zone = args['timeZone']\n          @duration_sec = args['durationSec']\n          @disabled = args['disabled']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalerAutoscalingPolicyScalingSchedules\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendbucket_cdn_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendbucket_cdn_policy_negative_caching_policy'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendBucketCdnPolicy\n        attr_reader :signed_url_cache_max_age_sec\n\n        attr_reader :default_ttl\n\n        attr_reader :max_ttl\n\n        attr_reader :client_ttl\n\n        attr_reader :negative_caching\n\n        attr_reader :negative_caching_policy\n\n        attr_reader :cache_mode\n\n        attr_reader :serve_while_stale\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @signed_url_cache_max_age_sec = args['signedUrlCacheMaxAgeSec']\n          @default_ttl = args['defaultTtl']\n          @max_ttl = args['maxTtl']\n          @client_ttl = args['clientTtl']\n          @negative_caching = args['negativeCaching']\n          @negative_caching_policy = GoogleInSpec::Compute::Property::BackendBucketCdnPolicyNegativeCachingPolicyArray.parse(args['negativeCachingPolicy'], to_s)\n          @cache_mode = args['cacheMode']\n          @serve_while_stale = args['serveWhileStale']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendBucketCdnPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendbucket_cdn_policy_negative_caching_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendBucketCdnPolicyNegativeCachingPolicy\n        attr_reader :code\n\n        attr_reader :ttl\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @ttl = args['ttl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendBucketCdnPolicyNegativeCachingPolicy\"\n        end\n      end\n\n      class BackendBucketCdnPolicyNegativeCachingPolicyArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BackendBucketCdnPolicyNegativeCachingPolicy.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BackendBucketCdnPolicyNegativeCachingPolicy.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_backends.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceBackends\n        attr_reader :balancing_mode\n\n        attr_reader :capacity_scaler\n\n        attr_reader :description\n\n        attr_reader :group\n\n        attr_reader :max_connections\n\n        attr_reader :max_connections_per_instance\n\n        attr_reader :max_connections_per_endpoint\n\n        attr_reader :max_rate\n\n        attr_reader :max_rate_per_instance\n\n        attr_reader :max_rate_per_endpoint\n\n        attr_reader :max_utilization\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @balancing_mode = args['balancingMode']\n          @capacity_scaler = args['capacityScaler']\n          @description = args['description']\n          @group = args['group']\n          @max_connections = args['maxConnections']\n          @max_connections_per_instance = args['maxConnectionsPerInstance']\n          @max_connections_per_endpoint = args['maxConnectionsPerEndpoint']\n          @max_rate = args['maxRate']\n          @max_rate_per_instance = args['maxRatePerInstance']\n          @max_rate_per_endpoint = args['maxRatePerEndpoint']\n          @max_utilization = args['maxUtilization']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceBackends\"\n        end\n      end\n\n      class BackendServiceBackendsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BackendServiceBackends.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BackendServiceBackends.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_cdn_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_cdn_policy_cache_key_policy'\nrequire 'google/compute/property/backendservice_cdn_policy_negative_caching_policy'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCdnPolicy\n        attr_reader :cache_key_policy\n\n        attr_reader :signed_url_cache_max_age_sec\n\n        attr_reader :default_ttl\n\n        attr_reader :max_ttl\n\n        attr_reader :client_ttl\n\n        attr_reader :negative_caching\n\n        attr_reader :negative_caching_policy\n\n        attr_reader :cache_mode\n\n        attr_reader :serve_while_stale\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cache_key_policy = GoogleInSpec::Compute::Property::BackendServiceCdnPolicyCacheKeyPolicy.new(args['cacheKeyPolicy'], to_s)\n          @signed_url_cache_max_age_sec = args['signedUrlCacheMaxAgeSec']\n          @default_ttl = args['defaultTtl']\n          @max_ttl = args['maxTtl']\n          @client_ttl = args['clientTtl']\n          @negative_caching = args['negativeCaching']\n          @negative_caching_policy = GoogleInSpec::Compute::Property::BackendServiceCdnPolicyNegativeCachingPolicyArray.parse(args['negativeCachingPolicy'], to_s)\n          @cache_mode = args['cacheMode']\n          @serve_while_stale = args['serveWhileStale']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCdnPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_cdn_policy_cache_key_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCdnPolicyCacheKeyPolicy\n        attr_reader :include_host\n\n        attr_reader :include_protocol\n\n        attr_reader :include_query_string\n\n        attr_reader :query_string_blacklist\n\n        attr_reader :query_string_whitelist\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @include_host = args['includeHost']\n          @include_protocol = args['includeProtocol']\n          @include_query_string = args['includeQueryString']\n          @query_string_blacklist = args['queryStringBlacklist']\n          @query_string_whitelist = args['queryStringWhitelist']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCdnPolicyCacheKeyPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_cdn_policy_negative_caching_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCdnPolicyNegativeCachingPolicy\n        attr_reader :code\n\n        attr_reader :ttl\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @ttl = args['ttl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCdnPolicyNegativeCachingPolicy\"\n        end\n      end\n\n      class BackendServiceCdnPolicyNegativeCachingPolicyArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BackendServiceCdnPolicyNegativeCachingPolicy.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BackendServiceCdnPolicyNegativeCachingPolicy.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_circuit_breakers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_circuit_breakers_connect_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCircuitBreakers\n        attr_reader :connect_timeout\n\n        attr_reader :max_requests_per_connection\n\n        attr_reader :max_connections\n\n        attr_reader :max_pending_requests\n\n        attr_reader :max_requests\n\n        attr_reader :max_retries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @connect_timeout = GoogleInSpec::Compute::Property::BackendServiceCircuitBreakersConnectTimeout.new(args['connectTimeout'], to_s)\n          @max_requests_per_connection = args['maxRequestsPerConnection']\n          @max_connections = args['maxConnections']\n          @max_pending_requests = args['maxPendingRequests']\n          @max_requests = args['maxRequests']\n          @max_retries = args['maxRetries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCircuitBreakers\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_circuit_breakers_connect_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceCircuitBreakersConnectTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceCircuitBreakersConnectTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_connection_draining.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceConnectionDraining\n        attr_reader :draining_timeout_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @draining_timeout_sec = args['drainingTimeoutSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceConnectionDraining\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_consistent_hash.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_consistent_hash_http_cookie'\nrequire 'google/compute/property/backendservice_consistent_hash_http_cookie_ttl'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceConsistentHash\n        attr_reader :http_cookie\n\n        attr_reader :http_header_name\n\n        attr_reader :minimum_ring_size\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_cookie = GoogleInSpec::Compute::Property::BackendServiceConsistentHashHttpCookie.new(args['httpCookie'], to_s)\n          @http_header_name = args['httpHeaderName']\n          @minimum_ring_size = args['minimumRingSize']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceConsistentHash\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_consistent_hash_http_cookie.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_consistent_hash_http_cookie_ttl'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceConsistentHashHttpCookie\n        attr_reader :ttl\n\n        attr_reader :name\n\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ttl = GoogleInSpec::Compute::Property::BackendServiceConsistentHashHttpCookieTtl.new(args['ttl'], to_s)\n          @name = args['name']\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceConsistentHashHttpCookie\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_consistent_hash_http_cookie_ttl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceConsistentHashHttpCookieTtl\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceConsistentHashHttpCookieTtl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_iap.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceIap\n        attr_reader :enabled\n\n        attr_reader :oauth2_client_id\n\n        attr_reader :oauth2_client_secret\n\n        attr_reader :oauth2_client_secret_sha256\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @oauth2_client_id = args['oauth2ClientId']\n          @oauth2_client_secret = args['oauth2ClientSecret']\n          @oauth2_client_secret_sha256 = args['oauth2ClientSecretSha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceIap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceLogConfig\n        attr_reader :enable\n\n        attr_reader :sample_rate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @sample_rate = args['sampleRate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_outlier_detection.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/backendservice_outlier_detection_base_ejection_time'\nrequire 'google/compute/property/backendservice_outlier_detection_interval'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceOutlierDetection\n        attr_reader :base_ejection_time\n\n        attr_reader :consecutive_errors\n\n        attr_reader :consecutive_gateway_failure\n\n        attr_reader :enforcing_consecutive_errors\n\n        attr_reader :enforcing_consecutive_gateway_failure\n\n        attr_reader :enforcing_success_rate\n\n        attr_reader :interval\n\n        attr_reader :max_ejection_percent\n\n        attr_reader :success_rate_minimum_hosts\n\n        attr_reader :success_rate_request_volume\n\n        attr_reader :success_rate_stdev_factor\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @base_ejection_time = GoogleInSpec::Compute::Property::BackendServiceOutlierDetectionBaseEjectionTime.new(args['baseEjectionTime'], to_s)\n          @consecutive_errors = args['consecutiveErrors']\n          @consecutive_gateway_failure = args['consecutiveGatewayFailure']\n          @enforcing_consecutive_errors = args['enforcingConsecutiveErrors']\n          @enforcing_consecutive_gateway_failure = args['enforcingConsecutiveGatewayFailure']\n          @enforcing_success_rate = args['enforcingSuccessRate']\n          @interval = GoogleInSpec::Compute::Property::BackendServiceOutlierDetectionInterval.new(args['interval'], to_s)\n          @max_ejection_percent = args['maxEjectionPercent']\n          @success_rate_minimum_hosts = args['successRateMinimumHosts']\n          @success_rate_request_volume = args['successRateRequestVolume']\n          @success_rate_stdev_factor = args['successRateStdevFactor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceOutlierDetection\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_outlier_detection_base_ejection_time.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceOutlierDetectionBaseEjectionTime\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceOutlierDetectionBaseEjectionTime\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/backendservice_outlier_detection_interval.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class BackendServiceOutlierDetectionInterval\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BackendServiceOutlierDetectionInterval\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/disk_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n          @kms_key_name = args['kmsKeyName']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/disk_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskSourceImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n          @kms_key_name = args['kmsKeyName']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskSourceImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/disk_source_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskSourceSnapshotEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskSourceSnapshotEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/disktype_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class DiskTypeDeprecated\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(args['deleted'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DiskTypeDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/externalvpngateway_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ExternalVpnGatewayInterfaces\n        attr_reader :id\n\n        attr_reader :ip_address\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @ip_address = args['ipAddress']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ExternalVpnGatewayInterfaces\"\n        end\n      end\n\n      class ExternalVpnGatewayInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ExternalVpnGatewayInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ExternalVpnGatewayInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/firewall_allowed.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class FirewallAllowed\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = args['IPProtocol']\n          @ports = args['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FirewallAllowed\"\n        end\n      end\n\n      class FirewallAllowedArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return FirewallAllowed.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| FirewallAllowed.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/firewall_denied.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class FirewallDenied\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = args['IPProtocol']\n          @ports = args['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FirewallDenied\"\n        end\n      end\n\n      class FirewallDeniedArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return FirewallDenied.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| FirewallDenied.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/firewall_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class FirewallLogConfig\n        attr_reader :enable\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @metadata = args['metadata']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FirewallLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalforwardingrule_metadata_filters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/globalforwardingrule_metadata_filters_filter_labels'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalForwardingRuleMetadataFilters\n        attr_reader :filter_match_criteria\n\n        attr_reader :filter_labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @filter_match_criteria = args['filterMatchCriteria']\n          @filter_labels = GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersFilterLabelsArray.parse(args['filterLabels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalForwardingRuleMetadataFilters\"\n        end\n      end\n\n      class GlobalForwardingRuleMetadataFiltersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return GlobalForwardingRuleMetadataFilters.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| GlobalForwardingRuleMetadataFilters.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalforwardingrule_metadata_filters_filter_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalForwardingRuleMetadataFiltersFilterLabels\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalForwardingRuleMetadataFiltersFilterLabels\"\n        end\n      end\n\n      class GlobalForwardingRuleMetadataFiltersFilterLabelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return GlobalForwardingRuleMetadataFiltersFilterLabels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| GlobalForwardingRuleMetadataFiltersFilterLabels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalnetworkendpointgroup_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalNetworkEndpointGroupAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalNetworkEndpointGroupAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalnetworkendpointgroup_app_engine.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalNetworkEndpointGroupAppEngine\n        attr_reader :service\n\n        attr_reader :version\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @version = args['version']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalNetworkEndpointGroupAppEngine\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalnetworkendpointgroup_cloud_function.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalNetworkEndpointGroupCloudFunction\n        attr_reader :function\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @function = args['function']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalNetworkEndpointGroupCloudFunction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalnetworkendpointgroup_cloud_run.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalNetworkEndpointGroupCloudRun\n        attr_reader :service\n\n        attr_reader :tag\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @tag = args['tag']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalNetworkEndpointGroupCloudRun\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/globalnetworkendpointgroup_psc_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class GlobalNetworkEndpointGroupPscData\n        attr_reader :consumer_psc_address\n\n        attr_reader :psc_connection_id\n\n        attr_reader :psc_connection_status\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consumer_psc_address = args['consumerPscAddress']\n          @psc_connection_id = args['pscConnectionId']\n          @psc_connection_status = args['pscConnectionStatus']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GlobalNetworkEndpointGroupPscData\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_grpc_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckGrpcHealthCheck\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :port_specification\n\n        attr_reader :grpc_service_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @port_name = args['portName']\n          @port_specification = args['portSpecification']\n          @grpc_service_name = args['grpcServiceName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckGrpcHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_http2_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttp2HealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttp2HealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_http_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttpHealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttpHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_https_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckHttpsHealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckHttpsHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckLogConfig\n        attr_reader :enable\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_ssl_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckSslHealthCheck\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request = args['request']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckSslHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/healthcheck_tcp_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class HealthCheckTcpHealthCheck\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request = args['request']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HealthCheckTcpHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/image_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageDeprecated\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(args['deleted'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/image_guest_os_features.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageGuestOsFeatures\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageGuestOsFeatures\"\n        end\n      end\n\n      class ImageGuestOsFeaturesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ImageGuestOsFeatures.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ImageGuestOsFeatures.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/image_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/image_raw_disk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageRawDisk\n        attr_reader :container_type\n\n        attr_reader :sha1_checksum\n\n        attr_reader :source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_type = args['containerType']\n          @sha1_checksum = args['sha1Checksum']\n          @source = args['source']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageRawDisk\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/image_source_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageSourceDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageSourceDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/imagefamilyview_image_deprecated'\nrequire 'google/compute/property/imagefamilyview_image_image_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_raw_disk'\nrequire 'google/compute/property/imagefamilyview_image_source_disk_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbxs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_keks'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_pk'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImage\n        attr_reader :creation_timestamp\n\n        attr_reader :description\n\n        attr_reader :id\n\n        attr_reader :name\n\n        attr_reader :source_type\n\n        attr_reader :deprecated\n\n        attr_reader :raw_disk\n\n        attr_reader :status\n\n        attr_reader :archive_size_bytes\n\n        attr_reader :disk_size_gb\n\n        attr_reader :source_disk\n\n        attr_reader :source_disk_id\n\n        attr_reader :licenses\n\n        attr_reader :storage_locations\n\n        attr_reader :family\n\n        attr_reader :image_encryption_key\n\n        attr_reader :source_disk_encryption_key\n\n        attr_reader :source_snapshot_encryption_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @creation_timestamp = parse_time_string(args['creationTimestamp'])\n          @description = args['description']\n          @id = args['id']\n          @name = args['name']\n          @source_type = args['sourceType']\n          @deprecated = GoogleInSpec::Compute::Property::ImageFamilyViewImageDeprecated.new(args['deprecated'], to_s)\n          @raw_disk = GoogleInSpec::Compute::Property::ImageFamilyViewImageRawDisk.new(args['rawDisk'], to_s)\n          @status = args['status']\n          @archive_size_bytes = args['archiveSizeBytes']\n          @disk_size_gb = args['diskSizeGb']\n          @source_disk = args['sourceDisk']\n          @source_disk_id = args['sourceDiskId']\n          @licenses = args['licenses']\n          @storage_locations = args['storageLocations']\n          @family = args['family']\n          @image_encryption_key = GoogleInSpec::Compute::Property::ImageFamilyViewImageImageEncryptionKey.new(args['imageEncryptionKey'], to_s)\n          @source_disk_encryption_key = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceDiskEncryptionKey.new(args['sourceDiskEncryptionKey'], to_s)\n          @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceSnapshotEncryptionKey.new(args['sourceSnapshotEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImage\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageDeprecated\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(args['deleted'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageImageEncryptionKey\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_raw_disk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageRawDisk\n        attr_reader :source\n\n        attr_reader :sha1_checksum\n\n        attr_reader :container_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source = args['source']\n          @sha1_checksum = args['sha1Checksum']\n          @container_type = args['containerType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageRawDisk\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceDiskEncryptionKey\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbxs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_keks'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_pk'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceSnapshotEncryptionKey\n        attr_reader :pk\n\n        attr_reader :keks\n\n        attr_reader :dbs\n\n        attr_reader :dbxs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pk = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceSnapshotEncryptionKeyPk.new(args['pk'], to_s)\n          @keks = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceSnapshotEncryptionKeyKeksArray.parse(args['keks'], to_s)\n          @dbs = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceSnapshotEncryptionKeyDbsArray.parse(args['dbs'], to_s)\n          @dbxs = GoogleInSpec::Compute::Property::ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxsArray.parse(args['dbxs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceSnapshotEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyDbs\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceSnapshotEncryptionKeyDbs\"\n        end\n      end\n\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyDbsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ImageFamilyViewImageSourceSnapshotEncryptionKeyDbs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ImageFamilyViewImageSourceSnapshotEncryptionKeyDbs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbxs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxs\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxs\"\n        end\n      end\n\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ImageFamilyViewImageSourceSnapshotEncryptionKeyDbxs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_keks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyKeks\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceSnapshotEncryptionKeyKeks\"\n        end\n      end\n\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyKeksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ImageFamilyViewImageSourceSnapshotEncryptionKeyKeks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ImageFamilyViewImageSourceSnapshotEncryptionKeyKeks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_pk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ImageFamilyViewImageSourceSnapshotEncryptionKeyPk\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ImageFamilyViewImageSourceSnapshotEncryptionKeyPk\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_disks_disk_encryption_key'\nrequire 'google/compute/property/instance_disks_initialize_params'\nrequire 'google/compute/property/instance_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisks\n        attr_reader :auto_delete\n\n        attr_reader :boot\n\n        attr_reader :device_name\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :index\n\n        attr_reader :initialize_params\n\n        attr_reader :interface\n\n        attr_reader :mode\n\n        attr_reader :source\n\n        attr_reader :type\n\n        attr_reader :licenses\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @auto_delete = args['autoDelete']\n          @boot = args['boot']\n          @device_name = args['deviceName']\n          @disk_encryption_key = GoogleInSpec::Compute::Property::InstanceDisksDiskEncryptionKey.new(args['diskEncryptionKey'], to_s)\n          @index = args['index']\n          @initialize_params = GoogleInSpec::Compute::Property::InstanceDisksInitializeParams.new(args['initializeParams'], to_s)\n          @interface = args['interface']\n          @mode = args['mode']\n          @source = args['source']\n          @type = args['type']\n          @licenses = args['licenses']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisks\"\n        end\n      end\n\n      class InstanceDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :sha256\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @sha256 = args['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_disks_initialize_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksInitializeParams\n        attr_reader :disk_name\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :source_image\n\n        attr_reader :source_image_encryption_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_name = args['diskName']\n          @disk_size_gb = args['diskSizeGb']\n          @disk_type = args['diskType']\n          @source_image = args['sourceImage']\n          @source_image_encryption_key = GoogleInSpec::Compute::Property::InstanceDisksInitializeParamsSourceImageEncryptionKey.new(args['sourceImageEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksInitializeParams\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_disks_initialize_params_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceDisksInitializeParamsSourceImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceDisksInitializeParamsSourceImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGuestAccelerators\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGuestAccelerators\"\n        end\n      end\n\n      class InstanceGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instance_network_interfaces_access_configs'\nrequire 'google/compute/property/instance_network_interfaces_alias_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfaces\n        attr_reader :access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :name\n\n        attr_reader :network\n\n        attr_reader :network_ip\n\n        attr_reader :subnetwork\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @access_configs = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesAccessConfigsArray.parse(args['accessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesAliasIpRangesArray.parse(args['aliasIpRanges'], to_s)\n          @name = args['name']\n          @network = args['network']\n          @network_ip = args['networkIP']\n          @subnetwork = args['subnetwork']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfaces\"\n        end\n      end\n\n      class InstanceNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfacesAccessConfigs\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :type\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @type = args['type']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfacesAccessConfigs\"\n        end\n      end\n\n      class InstanceNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceNetworkInterfacesAliasIpRanges\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = args['ipCidrRange']\n          @subnetwork_range_name = args['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkInterfacesAliasIpRanges\"\n        end\n      end\n\n      class InstanceNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceScheduling\n        attr_reader :automatic_restart\n\n        attr_reader :on_host_maintenance\n\n        attr_reader :preemptible\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @automatic_restart = args['automaticRestart']\n          @on_host_maintenance = args['onHostMaintenance']\n          @preemptible = args['preemptible']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceServiceAccounts\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @email = args['email']\n          @scopes = args['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceServiceAccounts\"\n        end\n      end\n\n      class InstanceServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceServiceAccounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceShieldedInstanceConfig\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_vtpm\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = args['enableSecureBoot']\n          @enable_vtpm = args['enableVtpm']\n          @enable_integrity_monitoring = args['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceShieldedInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instance_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTags\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fingerprint = args['fingerprint']\n          @items = args['items']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancegroup_named_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGroupNamedPorts\n        attr_reader :name\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGroupNamedPorts\"\n        end\n      end\n\n      class InstanceGroupNamedPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceGroupNamedPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceGroupNamedPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancegroupmanager_current_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGroupManagerCurrentActions\n        attr_reader :abandoning\n\n        attr_reader :creating\n\n        attr_reader :creating_without_retries\n\n        attr_reader :deleting\n\n        attr_reader :none\n\n        attr_reader :recreating\n\n        attr_reader :refreshing\n\n        attr_reader :restarting\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @abandoning = args['abandoning']\n          @creating = args['creating']\n          @creating_without_retries = args['creatingWithoutRetries']\n          @deleting = args['deleting']\n          @none = args['none']\n          @recreating = args['recreating']\n          @refreshing = args['refreshing']\n          @restarting = args['restarting']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGroupManagerCurrentActions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancegroupmanager_named_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceGroupManagerNamedPorts\n        attr_reader :name\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceGroupManagerNamedPorts\"\n        end\n      end\n\n      class InstanceGroupManagerNamedPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceGroupManagerNamedPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceGroupManagerNamedPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks'\nrequire 'google/compute/property/instancetemplate_properties_guest_accelerators'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces'\nrequire 'google/compute/property/instancetemplate_properties_scheduling'\nrequire 'google/compute/property/instancetemplate_properties_service_accounts'\nrequire 'google/compute/property/instancetemplate_properties_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplateProperties\n        attr_reader :can_ip_forward\n\n        attr_reader :description\n\n        attr_reader :disks\n\n        attr_reader :labels\n\n        attr_reader :machine_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :metadata\n\n        attr_reader :guest_accelerators\n\n        attr_reader :network_interfaces\n\n        attr_reader :scheduling\n\n        attr_reader :service_accounts\n\n        attr_reader :tags\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @can_ip_forward = args['canIpForward']\n          @description = args['description']\n          @disks = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksArray.parse(args['disks'], to_s)\n          @labels = args['labels']\n          @machine_type = args['machineType']\n          @min_cpu_platform = args['minCpuPlatform']\n          @metadata = args['metadata']\n          @guest_accelerators = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesGuestAcceleratorsArray.parse(args['guestAccelerators'], to_s)\n          @network_interfaces = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesArray.parse(args['networkInterfaces'], to_s)\n          @scheduling = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesScheduling.new(args['scheduling'], to_s)\n          @service_accounts = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesServiceAccountsArray.parse(args['serviceAccounts'], to_s)\n          @tags = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesTags.new(args['tags'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplateProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks_disk_encryption_key'\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params'\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisks\n        attr_reader :licenses\n\n        attr_reader :auto_delete\n\n        attr_reader :boot\n\n        attr_reader :device_name\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :index\n\n        attr_reader :initialize_params\n\n        attr_reader :interface\n\n        attr_reader :mode\n\n        attr_reader :source\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @licenses = args['licenses']\n          @auto_delete = args['autoDelete']\n          @boot = args['boot']\n          @device_name = args['deviceName']\n          @disk_encryption_key = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksDiskEncryptionKey.new(args['diskEncryptionKey'], to_s)\n          @index = args['index']\n          @initialize_params = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParams.new(args['initializeParams'], to_s)\n          @interface = args['interface']\n          @mode = args['mode']\n          @source = args['source']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisks\"\n        end\n      end\n\n      class InstanceTemplatePropertiesDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :sha256\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @sha256 = args['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_disks_initialize_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksInitializeParams\n        attr_reader :disk_name\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :source_image\n\n        attr_reader :source_image_encryption_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_name = args['diskName']\n          @disk_size_gb = args['diskSizeGb']\n          @disk_type = args['diskType']\n          @source_image = args['sourceImage']\n          @source_image_encryption_key = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey.new(args['sourceImageEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksInitializeParams\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_disks_initialize_params_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesDisksInitializeParamsSourceImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesGuestAccelerators\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesGuestAccelerators\"\n        end\n      end\n\n      class InstanceTemplatePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces_access_configs'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces_alias_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfaces\n        attr_reader :access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :name\n\n        attr_reader :network\n\n        attr_reader :network_ip\n\n        attr_reader :subnetwork\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @access_configs = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesAccessConfigsArray.parse(args['accessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::InstanceTemplatePropertiesNetworkInterfacesAliasIpRangesArray.parse(args['aliasIpRanges'], to_s)\n          @name = args['name']\n          @network = args['network']\n          @network_ip = args['networkIP']\n          @subnetwork = args['subnetwork']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfaces\"\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfacesAccessConfigs\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :type\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @type = args['type']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfacesAccessConfigs\"\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = args['ipCidrRange']\n          @subnetwork_range_name = args['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges\"\n        end\n      end\n\n      class InstanceTemplatePropertiesNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesScheduling\n        attr_reader :automatic_restart\n\n        attr_reader :on_host_maintenance\n\n        attr_reader :preemptible\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @automatic_restart = args['automaticRestart']\n          @on_host_maintenance = args['onHostMaintenance']\n          @preemptible = args['preemptible']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesServiceAccounts\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @email = args['email']\n          @scopes = args['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesServiceAccounts\"\n        end\n      end\n\n      class InstanceTemplatePropertiesServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceTemplatePropertiesServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceTemplatePropertiesServiceAccounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/instancetemplate_properties_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InstanceTemplatePropertiesTags\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fingerprint = args['fingerprint']\n          @items = args['items']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceTemplatePropertiesTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnect_circuit_infos.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectCircuitInfos\n        attr_reader :google_circuit_id\n\n        attr_reader :google_demarc_id\n\n        attr_reader :customer_demarc_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @google_circuit_id = args['googleCircuitId']\n          @google_demarc_id = args['googleDemarcId']\n          @customer_demarc_id = args['customerDemarcId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectCircuitInfos\"\n        end\n      end\n\n      class InterconnectCircuitInfosArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InterconnectCircuitInfos.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InterconnectCircuitInfos.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnect_expected_outages.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectExpectedOutages\n        attr_reader :name\n\n        attr_reader :description\n\n        attr_reader :source\n\n        attr_reader :state\n\n        attr_reader :issue_type\n\n        attr_reader :affected_circuits\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @description = args['description']\n          @source = args['source']\n          @state = args['state']\n          @issue_type = args['issueType']\n          @affected_circuits = args['affectedCircuits']\n          @start_time = parse_time_string(args['startTime'])\n          @end_time = parse_time_string(args['endTime'])\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectExpectedOutages\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n\n      class InterconnectExpectedOutagesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InterconnectExpectedOutages.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InterconnectExpectedOutages.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnectattachment_configuration_constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/interconnectattachment_configuration_constraints_bgp_peer_asn_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectAttachmentConfigurationConstraints\n        attr_reader :bgp_md5\n\n        attr_reader :bgp_peer_asn_ranges\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bgp_md5 = args['bgpMd5']\n          @bgp_peer_asn_ranges = GoogleInSpec::Compute::Property::InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRangesArray.parse(args['bgpPeerAsnRanges'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectAttachmentConfigurationConstraints\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnectattachment_configuration_constraints_bgp_peer_asn_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRanges\n        attr_reader :min\n\n        attr_reader :max\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min = args['min']\n          @max = args['max']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRanges\"\n        end\n      end\n\n      class InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnectattachment_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectAttachmentLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectAttachmentLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnectattachment_partner_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectAttachmentPartnerMetadata\n        attr_reader :partner_name\n\n        attr_reader :interconnect_name\n\n        attr_reader :portal_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @partner_name = args['partnerName']\n          @interconnect_name = args['interconnectName']\n          @portal_url = args['portalUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectAttachmentPartnerMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/interconnectattachment_private_interconnect_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class InterconnectAttachmentPrivateInterconnectInfo\n        attr_reader :tag8021q\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tag8021q = args['tag8021q']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InterconnectAttachmentPrivateInterconnectInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/license_resource_requirements.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class LicenseResourceRequirements\n        attr_reader :min_guest_cpu_count\n\n        attr_reader :min_memory_mb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_guest_cpu_count = args['minGuestCpuCount']\n          @min_memory_mb = args['minMemoryMb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} LicenseResourceRequirements\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/licensecode_license_alias.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class LicenseCodeLicenseAlias\n        attr_reader :self_link\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @self_link = args['selfLink']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} LicenseCodeLicenseAlias\"\n        end\n      end\n\n      class LicenseCodeLicenseAliasArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return LicenseCodeLicenseAlias.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| LicenseCodeLicenseAlias.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_advanced_machine_features'\nrequire 'google/compute/property/machineimage_instance_properties_confidential_instance_config'\nrequire 'google/compute/property/machineimage_instance_properties_disks'\nrequire 'google/compute/property/machineimage_instance_properties_guest_accelerators'\nrequire 'google/compute/property/machineimage_instance_properties_labels'\nrequire 'google/compute/property/machineimage_instance_properties_metadata'\nrequire 'google/compute/property/machineimage_instance_properties_metadata_items'\nrequire 'google/compute/property/machineimage_instance_properties_network_interfaces'\nrequire 'google/compute/property/machineimage_instance_properties_network_performance_config'\nrequire 'google/compute/property/machineimage_instance_properties_reservation_affinity'\nrequire 'google/compute/property/machineimage_instance_properties_resource_manager_tags'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_node_affinities'\nrequire 'google/compute/property/machineimage_instance_properties_service_accounts'\nrequire 'google/compute/property/machineimage_instance_properties_shielded_instance_config'\nrequire 'google/compute/property/machineimage_instance_properties_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstanceProperties\n        attr_reader :description\n\n        attr_reader :tags\n\n        attr_reader :resource_manager_tags\n\n        attr_reader :machine_type\n\n        attr_reader :can_ip_forward\n\n        attr_reader :network_interfaces\n\n        attr_reader :disks\n\n        attr_reader :metadata\n\n        attr_reader :service_accounts\n\n        attr_reader :scheduling\n\n        attr_reader :labels\n\n        attr_reader :guest_accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :reservation_affinity\n\n        attr_reader :shielded_instance_config\n\n        attr_reader :resource_policies\n\n        attr_reader :confidential_instance_config\n\n        attr_reader :private_ipv6_google_access\n\n        attr_reader :advanced_machine_features\n\n        attr_reader :network_performance_config\n\n        attr_reader :key_revocation_action_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @tags = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesTags.new(args['tags'], to_s)\n          @resource_manager_tags = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesResourceManagerTags.new(args['resourceManagerTags'], to_s)\n          @machine_type = args['machineType']\n          @can_ip_forward = args['canIpForward']\n          @network_interfaces = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesNetworkInterfacesArray.parse(args['networkInterfaces'], to_s)\n          @disks = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksArray.parse(args['disks'], to_s)\n          @metadata = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesMetadata.new(args['metadata'], to_s)\n          @service_accounts = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesServiceAccountsArray.parse(args['serviceAccounts'], to_s)\n          @scheduling = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesScheduling.new(args['scheduling'], to_s)\n          @labels = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesLabels.new(args['labels'], to_s)\n          @guest_accelerators = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesGuestAcceleratorsArray.parse(args['guestAccelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @reservation_affinity = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesReservationAffinity.new(args['reservationAffinity'], to_s)\n          @shielded_instance_config = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesShieldedInstanceConfig.new(args['shieldedInstanceConfig'], to_s)\n          @resource_policies = args['resourcePolicies']\n          @confidential_instance_config = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesConfidentialInstanceConfig.new(args['confidentialInstanceConfig'], to_s)\n          @private_ipv6_google_access = args['privateIpv6GoogleAccess']\n          @advanced_machine_features = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesAdvancedMachineFeatures.new(args['advancedMachineFeatures'], to_s)\n          @network_performance_config = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesNetworkPerformanceConfig.new(args['networkPerformanceConfig'], to_s)\n          @key_revocation_action_type = args['keyRevocationActionType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstanceProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_advanced_machine_features.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesAdvancedMachineFeatures\n        attr_reader :enable_nested_virtualization\n\n        attr_reader :threads_per_core\n\n        attr_reader :visible_core_count\n\n        attr_reader :enable_uefi_networking\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_nested_virtualization = args['enableNestedVirtualization']\n          @threads_per_core = args['threadsPerCore']\n          @visible_core_count = args['visibleCoreCount']\n          @enable_uefi_networking = args['enableUefiNetworking']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesAdvancedMachineFeatures\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_confidential_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesConfidentialInstanceConfig\n        attr_reader :enable_confidential_compute\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_confidential_compute = args['enableConfidentialCompute']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesConfidentialInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_disks_disk_encryption_key'\nrequire 'google/compute/property/machineimage_instance_properties_disks_guest_os_features'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_labels'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_resource_manager_tags'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_source_image_encryption_key'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_source_snapshot_encryption_key'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbs'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbxs'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_keks'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_pk'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisks\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :mode\n\n        attr_reader :saved_state\n\n        attr_reader :source\n\n        attr_reader :device_name\n\n        attr_reader :index\n\n        attr_reader :boot\n\n        attr_reader :initialize_params\n\n        attr_reader :auto_delete\n\n        attr_reader :licenses\n\n        attr_reader :interface\n\n        attr_reader :guest_os_features\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :disk_size_gb\n\n        attr_reader :shielded_instance_initial_state\n\n        attr_reader :force_attach\n\n        attr_reader :architecture\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @mode = args['mode']\n          @saved_state = args['savedState']\n          @source = args['source']\n          @device_name = args['deviceName']\n          @index = args['index']\n          @boot = args['boot']\n          @initialize_params = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksInitializeParams.new(args['initializeParams'], to_s)\n          @auto_delete = args['autoDelete']\n          @licenses = args['licenses']\n          @interface = args['interface']\n          @guest_os_features = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksGuestOsFeaturesArray.parse(args['guestOsFeatures'], to_s)\n          @disk_encryption_key = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksDiskEncryptionKey.new(args['diskEncryptionKey'], to_s)\n          @disk_size_gb = args['diskSizeGb']\n          @shielded_instance_initial_state = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksShieldedInstanceInitialState.new(args['shieldedInstanceInitialState'], to_s)\n          @force_attach = args['forceAttach']\n          @architecture = args['architecture']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisks\"\n        end\n      end\n\n      class MachineImageInstancePropertiesDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_guest_os_features.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksGuestOsFeatures\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksGuestOsFeatures\"\n        end\n      end\n\n      class MachineImageInstancePropertiesDisksGuestOsFeaturesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesDisksGuestOsFeatures.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesDisksGuestOsFeatures.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_initialize_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_labels'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_resource_manager_tags'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_source_image_encryption_key'\nrequire 'google/compute/property/machineimage_instance_properties_disks_initialize_params_source_snapshot_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksInitializeParams\n        attr_reader :disk_name\n\n        attr_reader :source_image\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :source_image_encryption_key\n\n        attr_reader :labels\n\n        attr_reader :source_snapshot\n\n        attr_reader :source_snapshot_encryption_key\n\n        attr_reader :description\n\n        attr_reader :replica_zones\n\n        attr_reader :resource_policies\n\n        attr_reader :on_update_action\n\n        attr_reader :provisioned_iops\n\n        attr_reader :licenses\n\n        attr_reader :architecture\n\n        attr_reader :resource_manager_tags\n\n        attr_reader :provisioned_throughput\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_name = args['diskName']\n          @source_image = args['sourceImage']\n          @disk_size_gb = args['diskSizeGb']\n          @disk_type = args['diskType']\n          @source_image_encryption_key = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksInitializeParamsSourceImageEncryptionKey.new(args['sourceImageEncryptionKey'], to_s)\n          @labels = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksInitializeParamsLabels.new(args['labels'], to_s)\n          @source_snapshot = args['sourceSnapshot']\n          @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksInitializeParamsSourceSnapshotEncryptionKey.new(args['sourceSnapshotEncryptionKey'], to_s)\n          @description = args['description']\n          @replica_zones = args['replicaZones']\n          @resource_policies = args['resourcePolicies']\n          @on_update_action = args['onUpdateAction']\n          @provisioned_iops = args['provisionedIops']\n          @licenses = args['licenses']\n          @architecture = args['architecture']\n          @resource_manager_tags = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksInitializeParamsResourceManagerTags.new(args['resourceManagerTags'], to_s)\n          @provisioned_throughput = args['provisionedThroughput']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksInitializeParams\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_initialize_params_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksInitializeParamsLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksInitializeParamsLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_initialize_params_resource_manager_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksInitializeParamsResourceManagerTags\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksInitializeParamsResourceManagerTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_initialize_params_source_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksInitializeParamsSourceImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksInitializeParamsSourceImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_initialize_params_source_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksInitializeParamsSourceSnapshotEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksInitializeParamsSourceSnapshotEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbs'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbxs'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_keks'\nrequire 'google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_pk'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialState\n        attr_reader :pk\n\n        attr_reader :keks\n\n        attr_reader :dbs\n\n        attr_reader :dbxs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pk = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksShieldedInstanceInitialStatePk.new(args['pk'], to_s)\n          @keks = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeksArray.parse(args['keks'], to_s)\n          @dbs = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbsArray.parse(args['dbs'], to_s)\n          @dbxs = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxsArray.parse(args['dbxs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksShieldedInstanceInitialState\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbs\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbs\"\n        end\n      end\n\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_dbxs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxs\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxs\"\n        end\n      end\n\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesDisksShieldedInstanceInitialStateDbxs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_keks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeks\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeks\"\n        end\n      end\n\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesDisksShieldedInstanceInitialStateKeks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_disks_shielded_instance_initial_state_pk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesDisksShieldedInstanceInitialStatePk\n        attr_reader :content\n\n        attr_reader :file_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @file_type = args['fileType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesDisksShieldedInstanceInitialStatePk\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesGuestAccelerators\n        attr_reader :accelerator_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesGuestAccelerators\"\n        end\n      end\n\n      class MachineImageInstancePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_metadata_items'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesMetadata\n        attr_reader :kind\n\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @fingerprint = args['fingerprint']\n          @items = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesMetadataItemsArray.parse(args['items'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_metadata_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesMetadataItems\n        attr_reader :key\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesMetadataItems\"\n        end\n      end\n\n      class MachineImageInstancePropertiesMetadataItemsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesMetadataItems.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesMetadataItems.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_network_interfaces_access_configs'\nrequire 'google/compute/property/machineimage_instance_properties_network_interfaces_alias_ip_ranges'\nrequire 'google/compute/property/machineimage_instance_properties_network_interfaces_ipv6_access_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesNetworkInterfaces\n        attr_reader :kind\n\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :network_ip\n\n        attr_reader :ipv6_address\n\n        attr_reader :internal_ipv6_prefix_length\n\n        attr_reader :name\n\n        attr_reader :access_configs\n\n        attr_reader :ipv6_access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :fingerprint\n\n        attr_reader :stack_type\n\n        attr_reader :ipv6_access_type\n\n        attr_reader :queue_count\n\n        attr_reader :nic_type\n\n        attr_reader :network_attachment\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @network_ip = args['networkIP']\n          @ipv6_address = args['ipv6Address']\n          @internal_ipv6_prefix_length = args['internalIpv6PrefixLength']\n          @name = args['name']\n          @access_configs = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesNetworkInterfacesAccessConfigsArray.parse(args['accessConfigs'], to_s)\n          @ipv6_access_configs = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigsArray.parse(args['ipv6AccessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesNetworkInterfacesAliasIpRangesArray.parse(args['aliasIpRanges'], to_s)\n          @fingerprint = args['fingerprint']\n          @stack_type = args['stackType']\n          @ipv6_access_type = args['ipv6AccessType']\n          @queue_count = args['queueCount']\n          @nic_type = args['nicType']\n          @network_attachment = args['networkAttachment']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesNetworkInterfaces\"\n        end\n      end\n\n      class MachineImageInstancePropertiesNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesNetworkInterfacesAccessConfigs\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :external_ipv6\n\n        attr_reader :external_ipv6_prefix_length\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        attr_reader :security_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @external_ipv6 = args['externalIpv6']\n          @external_ipv6_prefix_length = args['externalIpv6PrefixLength']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n          @security_policy = args['securityPolicy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesNetworkInterfacesAccessConfigs\"\n        end\n      end\n\n      class MachineImageInstancePropertiesNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesNetworkInterfacesAliasIpRanges\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = args['ipCidrRange']\n          @subnetwork_range_name = args['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesNetworkInterfacesAliasIpRanges\"\n        end\n      end\n\n      class MachineImageInstancePropertiesNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_network_interfaces_ipv6_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigs\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :external_ipv6\n\n        attr_reader :external_ipv6_prefix_length\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        attr_reader :security_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @external_ipv6 = args['externalIpv6']\n          @external_ipv6_prefix_length = args['externalIpv6PrefixLength']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n          @security_policy = args['securityPolicy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigs\"\n        end\n      end\n\n      class MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesNetworkInterfacesIpv6AccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_network_performance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesNetworkPerformanceConfig\n        attr_reader :total_egress_bandwidth_tier\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @total_egress_bandwidth_tier = args['totalEgressBandwidthTier']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesNetworkPerformanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_reservation_affinity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesReservationAffinity\n        attr_reader :consume_reservation_type\n\n        attr_reader :key\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consume_reservation_type = args['consumeReservationType']\n          @key = args['key']\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesReservationAffinity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_resource_manager_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesResourceManagerTags\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesResourceManagerTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_node_affinities'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesScheduling\n        attr_reader :on_host_maintenance\n\n        attr_reader :automatic_restart\n\n        attr_reader :preemptible\n\n        attr_reader :node_affinities\n\n        attr_reader :min_node_cpus\n\n        attr_reader :location_hint\n\n        attr_reader :provisioning_model\n\n        attr_reader :instance_termination_action\n\n        attr_reader :local_ssd_recovery_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @on_host_maintenance = args['onHostMaintenance']\n          @automatic_restart = args['automaticRestart']\n          @preemptible = args['preemptible']\n          @node_affinities = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesSchedulingNodeAffinitiesArray.parse(args['nodeAffinities'], to_s)\n          @min_node_cpus = args['minNodeCpus']\n          @location_hint = args['locationHint']\n          @provisioning_model = args['provisioningModel']\n          @instance_termination_action = args['instanceTerminationAction']\n          @local_ssd_recovery_timeout = GoogleInSpec::Compute::Property::MachineImageInstancePropertiesSchedulingLocalSsdRecoveryTimeout.new(args['localSsdRecoveryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_scheduling_local_ssd_recovery_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesSchedulingLocalSsdRecoveryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesSchedulingLocalSsdRecoveryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_scheduling_node_affinities.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesSchedulingNodeAffinities\n        attr_reader :key\n\n        attr_reader :operator\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @operator = args['operator']\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesSchedulingNodeAffinities\"\n        end\n      end\n\n      class MachineImageInstancePropertiesSchedulingNodeAffinitiesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesSchedulingNodeAffinities.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesSchedulingNodeAffinities.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesServiceAccounts\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @email = args['email']\n          @scopes = args['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesServiceAccounts\"\n        end\n      end\n\n      class MachineImageInstancePropertiesServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageInstancePropertiesServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageInstancePropertiesServiceAccounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesShieldedInstanceConfig\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_vtpm\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = args['enableSecureBoot']\n          @enable_vtpm = args['enableVtpm']\n          @enable_integrity_monitoring = args['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesShieldedInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_instance_properties_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageInstancePropertiesTags\n        attr_reader :items\n\n        attr_reader :fingerprint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @items = args['items']\n          @fingerprint = args['fingerprint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageInstancePropertiesTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_machine_image_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageMachineImageEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageMachineImageEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_saved_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSavedDisks\n        attr_reader :kind\n\n        attr_reader :source_disk\n\n        attr_reader :storage_bytes\n\n        attr_reader :storage_bytes_status\n\n        attr_reader :architecture\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @source_disk = args['sourceDisk']\n          @storage_bytes = args['storageBytes']\n          @storage_bytes_status = args['storageBytesStatus']\n          @architecture = args['architecture']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSavedDisks\"\n        end\n      end\n\n      class MachineImageSavedDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSavedDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSavedDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_disk_encryption_keys.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_disk_encryption_keys_disk_encryption_key'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceDiskEncryptionKeys\n        attr_reader :source_disk\n\n        attr_reader :disk_encryption_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source_disk = args['sourceDisk']\n          @disk_encryption_key = GoogleInSpec::Compute::Property::MachineImageSourceDiskEncryptionKeysDiskEncryptionKey.new(args['diskEncryptionKey'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceDiskEncryptionKeys\"\n        end\n      end\n\n      class MachineImageSourceDiskEncryptionKeysArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceDiskEncryptionKeys.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceDiskEncryptionKeys.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_disk_encryption_keys_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceDiskEncryptionKeysDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceDiskEncryptionKeysDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_instance_properties_disks'\nrequire 'google/compute/property/machineimage_source_instance_properties_guest_accelerators'\nrequire 'google/compute/property/machineimage_source_instance_properties_labels'\nrequire 'google/compute/property/machineimage_source_instance_properties_metadata'\nrequire 'google/compute/property/machineimage_source_instance_properties_metadata_items'\nrequire 'google/compute/property/machineimage_source_instance_properties_network_interfaces'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_node_affinities'\nrequire 'google/compute/property/machineimage_source_instance_properties_service_accounts'\nrequire 'google/compute/property/machineimage_source_instance_properties_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstanceProperties\n        attr_reader :description\n\n        attr_reader :tags\n\n        attr_reader :machine_type\n\n        attr_reader :can_ip_forward\n\n        attr_reader :network_interfaces\n\n        attr_reader :disks\n\n        attr_reader :metadata\n\n        attr_reader :service_accounts\n\n        attr_reader :scheduling\n\n        attr_reader :labels\n\n        attr_reader :guest_accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :deletion_protection\n\n        attr_reader :key_revocation_action_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @tags = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesTags.new(args['tags'], to_s)\n          @machine_type = args['machineType']\n          @can_ip_forward = args['canIpForward']\n          @network_interfaces = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesNetworkInterfacesArray.parse(args['networkInterfaces'], to_s)\n          @disks = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesDisksArray.parse(args['disks'], to_s)\n          @metadata = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesMetadata.new(args['metadata'], to_s)\n          @service_accounts = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesServiceAccountsArray.parse(args['serviceAccounts'], to_s)\n          @scheduling = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesScheduling.new(args['scheduling'], to_s)\n          @labels = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesLabels.new(args['labels'], to_s)\n          @guest_accelerators = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesGuestAcceleratorsArray.parse(args['guestAccelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @deletion_protection = args['deletionProtection']\n          @key_revocation_action_type = args['keyRevocationActionType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstanceProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_instance_properties_disks_disk_encryption_key'\nrequire 'google/compute/property/machineimage_source_instance_properties_disks_guest_os_features'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesDisks\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :mode\n\n        attr_reader :source\n\n        attr_reader :device_name\n\n        attr_reader :index\n\n        attr_reader :boot\n\n        attr_reader :auto_delete\n\n        attr_reader :licenses\n\n        attr_reader :interface\n\n        attr_reader :guest_os_features\n\n        attr_reader :disk_encryption_key\n\n        attr_reader :disk_size_gb\n\n        attr_reader :storage_bytes\n\n        attr_reader :storage_bytes_status\n\n        attr_reader :disk_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @mode = args['mode']\n          @source = args['source']\n          @device_name = args['deviceName']\n          @index = args['index']\n          @boot = args['boot']\n          @auto_delete = args['autoDelete']\n          @licenses = args['licenses']\n          @interface = args['interface']\n          @guest_os_features = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesDisksGuestOsFeaturesArray.parse(args['guestOsFeatures'], to_s)\n          @disk_encryption_key = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesDisksDiskEncryptionKey.new(args['diskEncryptionKey'], to_s)\n          @disk_size_gb = args['diskSizeGb']\n          @storage_bytes = args['storageBytes']\n          @storage_bytes_status = args['storageBytesStatus']\n          @disk_type = args['diskType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesDisks\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_disks_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesDisksDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :rsa_encrypted_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @rsa_encrypted_key = args['rsaEncryptedKey']\n          @kms_key_name = args['kmsKeyName']\n          @sha256 = args['sha256']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesDisksDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_disks_guest_os_features.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesDisksGuestOsFeatures\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesDisksGuestOsFeatures\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesDisksGuestOsFeaturesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesDisksGuestOsFeatures.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesDisksGuestOsFeatures.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesGuestAccelerators\n        attr_reader :accelerator_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesGuestAccelerators\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_instance_properties_metadata_items'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesMetadata\n        attr_reader :kind\n\n        attr_reader :fingerprint\n\n        attr_reader :items\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @fingerprint = args['fingerprint']\n          @items = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesMetadataItemsArray.parse(args['items'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_metadata_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesMetadataItems\n        attr_reader :key\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesMetadataItems\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesMetadataItemsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesMetadataItems.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesMetadataItems.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_instance_properties_network_interfaces_access_configs'\nrequire 'google/compute/property/machineimage_source_instance_properties_network_interfaces_alias_ip_ranges'\nrequire 'google/compute/property/machineimage_source_instance_properties_network_interfaces_ipv6_access_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesNetworkInterfaces\n        attr_reader :kind\n\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :network_ip\n\n        attr_reader :ipv6_address\n\n        attr_reader :internal_ipv6_prefix_length\n\n        attr_reader :name\n\n        attr_reader :access_configs\n\n        attr_reader :ipv6_access_configs\n\n        attr_reader :alias_ip_ranges\n\n        attr_reader :fingerprint\n\n        attr_reader :stack_type\n\n        attr_reader :ipv6_access_type\n\n        attr_reader :queue_count\n\n        attr_reader :nic_type\n\n        attr_reader :network_attachment\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @network_ip = args['networkIP']\n          @ipv6_address = args['ipv6Address']\n          @internal_ipv6_prefix_length = args['internalIpv6PrefixLength']\n          @name = args['name']\n          @access_configs = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigsArray.parse(args['accessConfigs'], to_s)\n          @ipv6_access_configs = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigsArray.parse(args['ipv6AccessConfigs'], to_s)\n          @alias_ip_ranges = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRangesArray.parse(args['aliasIpRanges'], to_s)\n          @fingerprint = args['fingerprint']\n          @stack_type = args['stackType']\n          @ipv6_access_type = args['ipv6AccessType']\n          @queue_count = args['queueCount']\n          @nic_type = args['nicType']\n          @network_attachment = args['networkAttachment']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesNetworkInterfaces\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_network_interfaces_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigs\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :external_ipv6\n\n        attr_reader :external_ipv6_prefix_length\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        attr_reader :security_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @external_ipv6 = args['externalIpv6']\n          @external_ipv6_prefix_length = args['externalIpv6PrefixLength']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n          @security_policy = args['securityPolicy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigs\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesNetworkInterfacesAccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_network_interfaces_alias_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRanges\n        attr_reader :ip_cidr_range\n\n        attr_reader :subnetwork_range_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_cidr_range = args['ipCidrRange']\n          @subnetwork_range_name = args['subnetworkRangeName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRanges\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesNetworkInterfacesAliasIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_network_interfaces_ipv6_access_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigs\n        attr_reader :kind\n\n        attr_reader :type\n\n        attr_reader :name\n\n        attr_reader :nat_ip\n\n        attr_reader :external_ipv6\n\n        attr_reader :external_ipv6_prefix_length\n\n        attr_reader :set_public_ptr\n\n        attr_reader :public_ptr_domain_name\n\n        attr_reader :network_tier\n\n        attr_reader :security_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @type = args['type']\n          @name = args['name']\n          @nat_ip = args['natIP']\n          @external_ipv6 = args['externalIpv6']\n          @external_ipv6_prefix_length = args['externalIpv6PrefixLength']\n          @set_public_ptr = args['setPublicPtr']\n          @public_ptr_domain_name = args['publicPtrDomainName']\n          @network_tier = args['networkTier']\n          @security_policy = args['securityPolicy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigs\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesNetworkInterfacesIpv6AccessConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_node_affinities'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesScheduling\n        attr_reader :on_host_maintenance\n\n        attr_reader :automatic_restart\n\n        attr_reader :preemptible\n\n        attr_reader :node_affinities\n\n        attr_reader :min_node_cpus\n\n        attr_reader :location_hint\n\n        attr_reader :provisioning_model\n\n        attr_reader :instance_termination_action\n\n        attr_reader :local_ssd_recovery_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @on_host_maintenance = args['onHostMaintenance']\n          @automatic_restart = args['automaticRestart']\n          @preemptible = args['preemptible']\n          @node_affinities = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesSchedulingNodeAffinitiesArray.parse(args['nodeAffinities'], to_s)\n          @min_node_cpus = args['minNodeCpus']\n          @location_hint = args['locationHint']\n          @provisioning_model = args['provisioningModel']\n          @instance_termination_action = args['instanceTerminationAction']\n          @local_ssd_recovery_timeout = GoogleInSpec::Compute::Property::MachineImageSourceInstancePropertiesSchedulingLocalSsdRecoveryTimeout.new(args['localSsdRecoveryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_scheduling_local_ssd_recovery_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesSchedulingLocalSsdRecoveryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesSchedulingLocalSsdRecoveryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_scheduling_node_affinities.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesSchedulingNodeAffinities\n        attr_reader :key\n\n        attr_reader :operator\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @operator = args['operator']\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesSchedulingNodeAffinities\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesSchedulingNodeAffinitiesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesSchedulingNodeAffinities.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesSchedulingNodeAffinities.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesServiceAccounts\n        attr_reader :email\n\n        attr_reader :scopes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @email = args['email']\n          @scopes = args['scopes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesServiceAccounts\"\n        end\n      end\n\n      class MachineImageSourceInstancePropertiesServiceAccountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineImageSourceInstancePropertiesServiceAccounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineImageSourceInstancePropertiesServiceAccounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machineimage_source_instance_properties_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineImageSourceInstancePropertiesTags\n        attr_reader :items\n\n        attr_reader :fingerprint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @items = args['items']\n          @fingerprint = args['fingerprint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineImageSourceInstancePropertiesTags\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machinetype_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineTypeAccelerators\n        attr_reader :guest_accelerator_type\n\n        attr_reader :guest_accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @guest_accelerator_type = args['guestAcceleratorType']\n          @guest_accelerator_count = args['guestAcceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineTypeAccelerators\"\n        end\n      end\n\n      class MachineTypeAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineTypeAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineTypeAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machinetype_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineTypeDeprecated\n        attr_reader :state\n\n        attr_reader :replacement\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :deleted\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @replacement = args['replacement']\n          @deprecated = args['deprecated']\n          @obsolete = args['obsolete']\n          @deleted = args['deleted']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineTypeDeprecated\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/machinetype_scratch_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class MachineTypeScratchDisks\n        attr_reader :disk_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_gb = args['diskGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MachineTypeScratchDisks\"\n        end\n      end\n\n      class MachineTypeScratchDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MachineTypeScratchDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MachineTypeScratchDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/network_peerings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkPeerings\n        attr_reader :name\n\n        attr_reader :state\n\n        attr_reader :state_details\n\n        attr_reader :network\n\n        attr_reader :export_custom_routes\n\n        attr_reader :import_custom_routes\n\n        attr_reader :peer_mtu\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @state = args['state']\n          @state_details = args['stateDetails']\n          @network = args['network']\n          @export_custom_routes = args['exportCustomRoutes']\n          @import_custom_routes = args['importCustomRoutes']\n          @peer_mtu = args['peerMtu']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkPeerings\"\n        end\n      end\n\n      class NetworkPeeringsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkPeerings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkPeerings.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/network_routing_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkRoutingConfig\n        attr_reader :routing_mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @routing_mode = args['routingMode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkRoutingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkattachment_connection_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkAttachmentConnectionEndpoints\n        attr_reader :status\n\n        attr_reader :project_id_or_num\n\n        attr_reader :subnetwork\n\n        attr_reader :ip_address\n\n        attr_reader :ipv6_address\n\n        attr_reader :secondary_ip_cidr_ranges\n\n        attr_reader :subnetwork_cidr_range\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @status = args['status']\n          @project_id_or_num = args['projectIdOrNum']\n          @subnetwork = args['subnetwork']\n          @ip_address = args['ipAddress']\n          @ipv6_address = args['ipv6Address']\n          @secondary_ip_cidr_ranges = args['secondaryIpCidrRanges']\n          @subnetwork_cidr_range = args['subnetworkCidrRange']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkAttachmentConnectionEndpoints\"\n        end\n      end\n\n      class NetworkAttachmentConnectionEndpointsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkAttachmentConnectionEndpoints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkAttachmentConnectionEndpoints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_associations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyAssociations\n        attr_reader :name\n\n        attr_reader :attachment_target\n\n        attr_reader :firewall_policy_id\n\n        attr_reader :short_name\n\n        attr_reader :display_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @attachment_target = args['attachmentTarget']\n          @firewall_policy_id = args['firewallPolicyId']\n          @short_name = args['shortName']\n          @display_name = args['displayName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyAssociations\"\n        end\n      end\n\n      class NetworkFirewallPolicyAssociationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkFirewallPolicyAssociations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkFirewallPolicyAssociations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/networkfirewallpolicy_rules_match'\nrequire 'google/compute/property/networkfirewallpolicy_rules_match_layer4_configs'\nrequire 'google/compute/property/networkfirewallpolicy_rules_match_src_secure_tags'\nrequire 'google/compute/property/networkfirewallpolicy_rules_target_secure_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyRules\n        attr_reader :kind\n\n        attr_reader :rule_name\n\n        attr_reader :description\n\n        attr_reader :priority\n\n        attr_reader :match\n\n        attr_reader :action\n\n        attr_reader :direction\n\n        attr_reader :target_resources\n\n        attr_reader :enable_logging\n\n        attr_reader :rule_tuple_count\n\n        attr_reader :target_service_accounts\n\n        attr_reader :target_secure_tags\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @rule_name = args['ruleName']\n          @description = args['description']\n          @priority = args['priority']\n          @match = GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesMatch.new(args['match'], to_s)\n          @action = args['action']\n          @direction = args['direction']\n          @target_resources = args['targetResources']\n          @enable_logging = args['enableLogging']\n          @rule_tuple_count = args['ruleTupleCount']\n          @target_service_accounts = args['targetServiceAccounts']\n          @target_secure_tags = GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesTargetSecureTagsArray.parse(args['targetSecureTags'], to_s)\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyRules\"\n        end\n      end\n\n      class NetworkFirewallPolicyRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkFirewallPolicyRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkFirewallPolicyRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_rules_match.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/networkfirewallpolicy_rules_match_layer4_configs'\nrequire 'google/compute/property/networkfirewallpolicy_rules_match_src_secure_tags'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyRulesMatch\n        attr_reader :src_ip_ranges\n\n        attr_reader :dest_ip_ranges\n\n        attr_reader :layer4_configs\n\n        attr_reader :src_secure_tags\n\n        attr_reader :dest_address_groups\n\n        attr_reader :src_address_groups\n\n        attr_reader :src_fqdns\n\n        attr_reader :dest_fqdns\n\n        attr_reader :src_region_codes\n\n        attr_reader :dest_region_codes\n\n        attr_reader :dest_threat_intelligences\n\n        attr_reader :src_threat_intelligences\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @src_ip_ranges = args['srcIpRanges']\n          @dest_ip_ranges = args['destIpRanges']\n          @layer4_configs = GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesMatchLayer4ConfigsArray.parse(args['layer4Configs'], to_s)\n          @src_secure_tags = GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesMatchSrcSecureTagsArray.parse(args['srcSecureTags'], to_s)\n          @dest_address_groups = args['destAddressGroups']\n          @src_address_groups = args['srcAddressGroups']\n          @src_fqdns = args['srcFqdns']\n          @dest_fqdns = args['destFqdns']\n          @src_region_codes = args['srcRegionCodes']\n          @dest_region_codes = args['destRegionCodes']\n          @dest_threat_intelligences = args['destThreatIntelligences']\n          @src_threat_intelligences = args['srcThreatIntelligences']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyRulesMatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_rules_match_layer4_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyRulesMatchLayer4Configs\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = args['ipProtocol']\n          @ports = args['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyRulesMatchLayer4Configs\"\n        end\n      end\n\n      class NetworkFirewallPolicyRulesMatchLayer4ConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkFirewallPolicyRulesMatchLayer4Configs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkFirewallPolicyRulesMatchLayer4Configs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_rules_match_src_secure_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyRulesMatchSrcSecureTags\n        attr_reader :name\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyRulesMatchSrcSecureTags\"\n        end\n      end\n\n      class NetworkFirewallPolicyRulesMatchSrcSecureTagsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkFirewallPolicyRulesMatchSrcSecureTags.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkFirewallPolicyRulesMatchSrcSecureTags.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/networkfirewallpolicy_rules_target_secure_tags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NetworkFirewallPolicyRulesTargetSecureTags\n        attr_reader :name\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NetworkFirewallPolicyRulesTargetSecureTags\"\n        end\n      end\n\n      class NetworkFirewallPolicyRulesTargetSecureTagsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NetworkFirewallPolicyRulesTargetSecureTags.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NetworkFirewallPolicyRulesTargetSecureTags.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/nodegroup_autoscaling_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NodeGroupAutoscalingPolicy\n        attr_reader :mode\n\n        attr_reader :min_nodes\n\n        attr_reader :max_nodes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @mode = args['mode']\n          @min_nodes = args['minNodes']\n          @max_nodes = args['maxNodes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodeGroupAutoscalingPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/nodetemplate_node_type_flexibility.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NodeTemplateNodeTypeFlexibility\n        attr_reader :cpus\n\n        attr_reader :memory\n\n        attr_reader :local_ssd\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpus = args['cpus']\n          @memory = args['memory']\n          @local_ssd = args['localSsd']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodeTemplateNodeTypeFlexibility\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/nodetemplate_server_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NodeTemplateServerBinding\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodeTemplateServerBinding\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/nodetype_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class NodeTypeDeprecated\n        attr_reader :state\n\n        attr_reader :replacement\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :deleted\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @replacement = args['replacement']\n          @deprecated = args['deprecated']\n          @obsolete = args['obsolete']\n          @deleted = args['deleted']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodeTypeDeprecated\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_collector_ilb.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringCollectorIlb\n        attr_reader :url\n\n        attr_reader :canonical_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @canonical_url = args['canonicalUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringCollectorIlb\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_filter.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringFilter\n        attr_reader :cidr_ranges\n\n        attr_reader :ip_protocols\n\n        attr_reader :direction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cidr_ranges = args['cidrRanges']\n          @ip_protocols = args['IPProtocols']\n          @direction = args['direction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringFilter\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_mirrored_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/packetmirroring_mirrored_resources_instances'\nrequire 'google/compute/property/packetmirroring_mirrored_resources_subnetworks'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringMirroredResources\n        attr_reader :subnetworks\n\n        attr_reader :instances\n\n        attr_reader :tags\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @subnetworks = GoogleInSpec::Compute::Property::PacketMirroringMirroredResourcesSubnetworksArray.parse(args['subnetworks'], to_s)\n          @instances = GoogleInSpec::Compute::Property::PacketMirroringMirroredResourcesInstancesArray.parse(args['instances'], to_s)\n          @tags = args['tags']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringMirroredResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_mirrored_resources_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringMirroredResourcesInstances\n        attr_reader :url\n\n        attr_reader :canonical_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @canonical_url = args['canonicalUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringMirroredResourcesInstances\"\n        end\n      end\n\n      class PacketMirroringMirroredResourcesInstancesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PacketMirroringMirroredResourcesInstances.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PacketMirroringMirroredResourcesInstances.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_mirrored_resources_subnetworks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringMirroredResourcesSubnetworks\n        attr_reader :url\n\n        attr_reader :canonical_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @canonical_url = args['canonicalUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringMirroredResourcesSubnetworks\"\n        end\n      end\n\n      class PacketMirroringMirroredResourcesSubnetworksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PacketMirroringMirroredResourcesSubnetworks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PacketMirroringMirroredResourcesSubnetworks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/packetmirroring_network.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class PacketMirroringNetwork\n        attr_reader :url\n\n        attr_reader :canonical_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @canonical_url = args['canonicalUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PacketMirroringNetwork\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/projectinfo_common_instance_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/projectinfo_common_instance_metadata_items'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ProjectInfoCommonInstanceMetadata\n        attr_reader :items\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @items = GoogleInSpec::Compute::Property::ProjectInfoCommonInstanceMetadataItemsArray.parse(args['items'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectInfoCommonInstanceMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/projectinfo_common_instance_metadata_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ProjectInfoCommonInstanceMetadataItems\n        attr_reader :key\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectInfoCommonInstanceMetadataItems\"\n        end\n      end\n\n      class ProjectInfoCommonInstanceMetadataItemsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectInfoCommonInstanceMetadataItems.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectInfoCommonInstanceMetadataItems.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/projectinfo_quotas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ProjectInfoQuotas\n        attr_reader :metric\n\n        attr_reader :limit\n\n        attr_reader :usage\n\n        attr_reader :owner\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric = args['metric']\n          @limit = args['limit']\n          @usage = args['usage']\n          @owner = args['owner']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectInfoQuotas\"\n        end\n      end\n\n      class ProjectInfoQuotasArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectInfoQuotas.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectInfoQuotas.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/region_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionDeprecated\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(args['deleted'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/region_quotas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionQuotas\n        attr_reader :metric\n\n        attr_reader :limit\n\n        attr_reader :usage\n\n        attr_reader :owner\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric = args['metric']\n          @limit = args['limit']\n          @usage = args['usage']\n          @owner = args['owner']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionQuotas\"\n        end\n      end\n\n      class RegionQuotasArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionQuotas.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionQuotas.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_load_balancing_utilization'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scaling_schedules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicy\n        attr_reader :min_num_replicas\n\n        attr_reader :max_num_replicas\n\n        attr_reader :scale_down_control\n\n        attr_reader :scale_in_control\n\n        attr_reader :cool_down_period_sec\n\n        attr_reader :cpu_utilization\n\n        attr_reader :custom_metric_utilizations\n\n        attr_reader :load_balancing_utilization\n\n        attr_reader :mode\n\n        attr_reader :scaling_schedules\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_num_replicas = args['minNumReplicas']\n          @max_num_replicas = args['maxNumReplicas']\n          @scale_down_control = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyScaleDownControl.new(args['scaleDownControl'], to_s)\n          @scale_in_control = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyScaleInControl.new(args['scaleInControl'], to_s)\n          @cool_down_period_sec = args['coolDownPeriodSec']\n          @cpu_utilization = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyCpuUtilization.new(args['cpuUtilization'], to_s)\n          @custom_metric_utilizations = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyCustomMetricUtilizationsArray.parse(args['customMetricUtilizations'], to_s)\n          @load_balancing_utilization = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyLoadBalancingUtilization.new(args['loadBalancingUtilization'], to_s)\n          @mode = args['mode']\n          @scaling_schedules = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyScalingSchedules.new(args['scalingSchedules'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_cpu_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyCpuUtilization\n        attr_reader :utilization_target\n\n        attr_reader :predictive_method\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = args['utilizationTarget']\n          @predictive_method = args['predictiveMethod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyCpuUtilization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_custom_metric_utilizations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyCustomMetricUtilizations\n        attr_reader :metric\n\n        attr_reader :filter\n\n        attr_reader :utilization_target\n\n        attr_reader :single_instance_assignment\n\n        attr_reader :utilization_target_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric = args['metric']\n          @filter = args['filter']\n          @utilization_target = args['utilizationTarget']\n          @single_instance_assignment = args['singleInstanceAssignment']\n          @utilization_target_type = args['utilizationTargetType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyCustomMetricUtilizations\"\n        end\n      end\n\n      class RegionAutoscalerAutoscalingPolicyCustomMetricUtilizationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionAutoscalerAutoscalingPolicyCustomMetricUtilizations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionAutoscalerAutoscalingPolicyCustomMetricUtilizations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_load_balancing_utilization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyLoadBalancingUtilization\n        attr_reader :utilization_target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @utilization_target = args['utilizationTarget']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyLoadBalancingUtilization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyScaleDownControl\n        attr_reader :max_scaled_down_replicas\n\n        attr_reader :time_window_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaled_down_replicas = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas.new(args['maxScaledDownReplicas'], to_s)\n          @time_window_sec = args['timeWindowSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyScaleDownControl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas\n        attr_reader :fixed\n\n        attr_reader :percent\n\n        attr_reader :calculated\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed = args['fixed']\n          @percent = args['percent']\n          @calculated = args['calculated']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyScaleInControl\n        attr_reader :max_scaled_in_replicas\n\n        attr_reader :time_window_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaled_in_replicas = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas.new(args['maxScaledInReplicas'], to_s)\n          @time_window_sec = args['timeWindowSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyScaleInControl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas\n        attr_reader :fixed\n\n        attr_reader :percent\n\n        attr_reader :calculated\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed = args['fixed']\n          @percent = args['percent']\n          @calculated = args['calculated']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_autoscaling_policy_scaling_schedules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerAutoscalingPolicyScalingSchedules\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerAutoscalingPolicyScalingSchedules\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_scaling_schedule_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerScalingScheduleStatus\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerScalingScheduleStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionautoscaler_status_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionAutoscalerStatusDetails\n        attr_reader :message\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @message = args['message']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionAutoscalerStatusDetails\"\n        end\n      end\n\n      class RegionAutoscalerStatusDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionAutoscalerStatusDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionAutoscalerStatusDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_backends.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceBackends\n        attr_reader :balancing_mode\n\n        attr_reader :capacity_scaler\n\n        attr_reader :description\n\n        attr_reader :failover\n\n        attr_reader :group\n\n        attr_reader :max_connections\n\n        attr_reader :max_connections_per_instance\n\n        attr_reader :max_connections_per_endpoint\n\n        attr_reader :max_rate\n\n        attr_reader :max_rate_per_instance\n\n        attr_reader :max_rate_per_endpoint\n\n        attr_reader :max_utilization\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @balancing_mode = args['balancingMode']\n          @capacity_scaler = args['capacityScaler']\n          @description = args['description']\n          @failover = args['failover']\n          @group = args['group']\n          @max_connections = args['maxConnections']\n          @max_connections_per_instance = args['maxConnectionsPerInstance']\n          @max_connections_per_endpoint = args['maxConnectionsPerEndpoint']\n          @max_rate = args['maxRate']\n          @max_rate_per_instance = args['maxRatePerInstance']\n          @max_rate_per_endpoint = args['maxRatePerEndpoint']\n          @max_utilization = args['maxUtilization']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceBackends\"\n        end\n      end\n\n      class RegionBackendServiceBackendsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionBackendServiceBackends.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionBackendServiceBackends.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_cdn_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionbackendservice_cdn_policy_cache_key_policy'\nrequire 'google/compute/property/regionbackendservice_cdn_policy_negative_caching_policy'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceCdnPolicy\n        attr_reader :cache_key_policy\n\n        attr_reader :signed_url_cache_max_age_sec\n\n        attr_reader :default_ttl\n\n        attr_reader :max_ttl\n\n        attr_reader :client_ttl\n\n        attr_reader :negative_caching\n\n        attr_reader :negative_caching_policy\n\n        attr_reader :cache_mode\n\n        attr_reader :serve_while_stale\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cache_key_policy = GoogleInSpec::Compute::Property::RegionBackendServiceCdnPolicyCacheKeyPolicy.new(args['cacheKeyPolicy'], to_s)\n          @signed_url_cache_max_age_sec = args['signedUrlCacheMaxAgeSec']\n          @default_ttl = args['defaultTtl']\n          @max_ttl = args['maxTtl']\n          @client_ttl = args['clientTtl']\n          @negative_caching = args['negativeCaching']\n          @negative_caching_policy = GoogleInSpec::Compute::Property::RegionBackendServiceCdnPolicyNegativeCachingPolicyArray.parse(args['negativeCachingPolicy'], to_s)\n          @cache_mode = args['cacheMode']\n          @serve_while_stale = args['serveWhileStale']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceCdnPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_cdn_policy_cache_key_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceCdnPolicyCacheKeyPolicy\n        attr_reader :include_host\n\n        attr_reader :include_protocol\n\n        attr_reader :include_query_string\n\n        attr_reader :query_string_blacklist\n\n        attr_reader :query_string_whitelist\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @include_host = args['includeHost']\n          @include_protocol = args['includeProtocol']\n          @include_query_string = args['includeQueryString']\n          @query_string_blacklist = args['queryStringBlacklist']\n          @query_string_whitelist = args['queryStringWhitelist']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceCdnPolicyCacheKeyPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_cdn_policy_negative_caching_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceCdnPolicyNegativeCachingPolicy\n        attr_reader :code\n\n        attr_reader :ttl\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @ttl = args['ttl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceCdnPolicyNegativeCachingPolicy\"\n        end\n      end\n\n      class RegionBackendServiceCdnPolicyNegativeCachingPolicyArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionBackendServiceCdnPolicyNegativeCachingPolicy.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionBackendServiceCdnPolicyNegativeCachingPolicy.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_circuit_breakers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionbackendservice_circuit_breakers_connect_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceCircuitBreakers\n        attr_reader :connect_timeout\n\n        attr_reader :max_requests_per_connection\n\n        attr_reader :max_connections\n\n        attr_reader :max_pending_requests\n\n        attr_reader :max_requests\n\n        attr_reader :max_retries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @connect_timeout = GoogleInSpec::Compute::Property::RegionBackendServiceCircuitBreakersConnectTimeout.new(args['connectTimeout'], to_s)\n          @max_requests_per_connection = args['maxRequestsPerConnection']\n          @max_connections = args['maxConnections']\n          @max_pending_requests = args['maxPendingRequests']\n          @max_requests = args['maxRequests']\n          @max_retries = args['maxRetries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceCircuitBreakers\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_circuit_breakers_connect_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceCircuitBreakersConnectTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceCircuitBreakersConnectTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_connection_draining.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceConnectionDraining\n        attr_reader :draining_timeout_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @draining_timeout_sec = args['drainingTimeoutSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceConnectionDraining\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_consistent_hash.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionbackendservice_consistent_hash_http_cookie'\nrequire 'google/compute/property/regionbackendservice_consistent_hash_http_cookie_ttl'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceConsistentHash\n        attr_reader :http_cookie\n\n        attr_reader :http_header_name\n\n        attr_reader :minimum_ring_size\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_cookie = GoogleInSpec::Compute::Property::RegionBackendServiceConsistentHashHttpCookie.new(args['httpCookie'], to_s)\n          @http_header_name = args['httpHeaderName']\n          @minimum_ring_size = args['minimumRingSize']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceConsistentHash\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_consistent_hash_http_cookie.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionbackendservice_consistent_hash_http_cookie_ttl'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceConsistentHashHttpCookie\n        attr_reader :ttl\n\n        attr_reader :name\n\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ttl = GoogleInSpec::Compute::Property::RegionBackendServiceConsistentHashHttpCookieTtl.new(args['ttl'], to_s)\n          @name = args['name']\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceConsistentHashHttpCookie\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_consistent_hash_http_cookie_ttl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceConsistentHashHttpCookieTtl\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceConsistentHashHttpCookieTtl\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_failover_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceFailoverPolicy\n        attr_reader :disable_connection_drain_on_failover\n\n        attr_reader :drop_traffic_if_unhealthy\n\n        attr_reader :failover_ratio\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disable_connection_drain_on_failover = args['disableConnectionDrainOnFailover']\n          @drop_traffic_if_unhealthy = args['dropTrafficIfUnhealthy']\n          @failover_ratio = args['failoverRatio']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceFailoverPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceLogConfig\n        attr_reader :enable\n\n        attr_reader :sample_rate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @sample_rate = args['sampleRate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_outlier_detection.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionbackendservice_outlier_detection_base_ejection_time'\nrequire 'google/compute/property/regionbackendservice_outlier_detection_interval'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceOutlierDetection\n        attr_reader :base_ejection_time\n\n        attr_reader :consecutive_errors\n\n        attr_reader :consecutive_gateway_failure\n\n        attr_reader :enforcing_consecutive_errors\n\n        attr_reader :enforcing_consecutive_gateway_failure\n\n        attr_reader :enforcing_success_rate\n\n        attr_reader :interval\n\n        attr_reader :max_ejection_percent\n\n        attr_reader :success_rate_minimum_hosts\n\n        attr_reader :success_rate_request_volume\n\n        attr_reader :success_rate_stdev_factor\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @base_ejection_time = GoogleInSpec::Compute::Property::RegionBackendServiceOutlierDetectionBaseEjectionTime.new(args['baseEjectionTime'], to_s)\n          @consecutive_errors = args['consecutiveErrors']\n          @consecutive_gateway_failure = args['consecutiveGatewayFailure']\n          @enforcing_consecutive_errors = args['enforcingConsecutiveErrors']\n          @enforcing_consecutive_gateway_failure = args['enforcingConsecutiveGatewayFailure']\n          @enforcing_success_rate = args['enforcingSuccessRate']\n          @interval = GoogleInSpec::Compute::Property::RegionBackendServiceOutlierDetectionInterval.new(args['interval'], to_s)\n          @max_ejection_percent = args['maxEjectionPercent']\n          @success_rate_minimum_hosts = args['successRateMinimumHosts']\n          @success_rate_request_volume = args['successRateRequestVolume']\n          @success_rate_stdev_factor = args['successRateStdevFactor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceOutlierDetection\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_outlier_detection_base_ejection_time.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceOutlierDetectionBaseEjectionTime\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceOutlierDetectionBaseEjectionTime\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionbackendservice_outlier_detection_interval.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionBackendServiceOutlierDetectionInterval\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionBackendServiceOutlierDetectionInterval\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_license_resource.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentLicenseResource\n        attr_reader :license\n\n        attr_reader :amount\n\n        attr_reader :cores_per_license\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @license = args['license']\n          @amount = args['amount']\n          @cores_per_license = args['coresPerLicense']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentLicenseResource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation'\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_in_use_resources'\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_reserved_resources'\nrequire 'google/compute/property/regioncommitment_reservations_delete_after_duration'\nrequire 'google/compute/property/regioncommitment_reservations_resource_policies'\nrequire 'google/compute/property/regioncommitment_reservations_resource_status'\nrequire 'google/compute/property/regioncommitment_reservations_resource_status_specific_sku_allocation'\nrequire 'google/compute/property/regioncommitment_reservations_share_settings'\nrequire 'google/compute/property/regioncommitment_reservations_share_settings_folder_map'\nrequire 'google/compute/property/regioncommitment_reservations_share_settings_project_map'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_local_ssds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservations\n        attr_reader :kind\n\n        attr_reader :id\n\n        attr_reader :creation_timestamp\n\n        attr_reader :self_link\n\n        attr_reader :self_link_with_id\n\n        attr_reader :zone\n\n        attr_reader :description\n\n        attr_reader :name\n\n        attr_reader :specific_reservation\n\n        attr_reader :aggregate_reservation\n\n        attr_reader :commitment\n\n        attr_reader :specific_reservation_required\n\n        attr_reader :status\n\n        attr_reader :share_settings\n\n        attr_reader :satisfies_pzs\n\n        attr_reader :resource_policies\n\n        attr_reader :resource_status\n\n        attr_reader :delete_at_time\n\n        attr_reader :delete_after_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @id = args['id']\n          @creation_timestamp = args['creationTimestamp']\n          @self_link = args['selfLink']\n          @self_link_with_id = args['selfLinkWithId']\n          @zone = args['zone']\n          @description = args['description']\n          @name = args['name']\n          @specific_reservation = GoogleInSpec::Compute::Property::RegionCommitmentReservationsSpecificReservation.new(args['specificReservation'], to_s)\n          @aggregate_reservation = GoogleInSpec::Compute::Property::RegionCommitmentReservationsAggregateReservation.new(args['aggregateReservation'], to_s)\n          @commitment = args['commitment']\n          @specific_reservation_required = args['specificReservationRequired']\n          @status = args['status']\n          @share_settings = GoogleInSpec::Compute::Property::RegionCommitmentReservationsShareSettings.new(args['shareSettings'], to_s)\n          @satisfies_pzs = args['satisfiesPzs']\n          @resource_policies = GoogleInSpec::Compute::Property::RegionCommitmentReservationsResourcePolicies.new(args['resourcePolicies'], to_s)\n          @resource_status = GoogleInSpec::Compute::Property::RegionCommitmentReservationsResourceStatus.new(args['resourceStatus'], to_s)\n          @delete_at_time = args['deleteAtTime']\n          @delete_after_duration = GoogleInSpec::Compute::Property::RegionCommitmentReservationsDeleteAfterDuration.new(args['deleteAfterDuration'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservations\"\n        end\n      end\n\n      class RegionCommitmentReservationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentReservations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentReservations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_aggregate_reservation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_in_use_resources'\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_reserved_resources'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsAggregateReservation\n        attr_reader :vm_family\n\n        attr_reader :reserved_resources\n\n        attr_reader :in_use_resources\n\n        attr_reader :workload_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @vm_family = args['vmFamily']\n          @reserved_resources = GoogleInSpec::Compute::Property::RegionCommitmentReservationsAggregateReservationReservedResourcesArray.parse(args['reservedResources'], to_s)\n          @in_use_resources = GoogleInSpec::Compute::Property::RegionCommitmentReservationsAggregateReservationInUseResourcesArray.parse(args['inUseResources'], to_s)\n          @workload_type = args['workloadType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsAggregateReservation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_aggregate_reservation_in_use_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_in_use_resources_accelerator'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsAggregateReservationInUseResources\n        attr_reader :accelerator\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator = GoogleInSpec::Compute::Property::RegionCommitmentReservationsAggregateReservationInUseResourcesAccelerator.new(args['accelerator'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsAggregateReservationInUseResources\"\n        end\n      end\n\n      class RegionCommitmentReservationsAggregateReservationInUseResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentReservationsAggregateReservationInUseResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentReservationsAggregateReservationInUseResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_aggregate_reservation_in_use_resources_accelerator.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsAggregateReservationInUseResourcesAccelerator\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsAggregateReservationInUseResourcesAccelerator\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_aggregate_reservation_reserved_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_aggregate_reservation_reserved_resources_accelerator'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsAggregateReservationReservedResources\n        attr_reader :accelerator\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator = GoogleInSpec::Compute::Property::RegionCommitmentReservationsAggregateReservationReservedResourcesAccelerator.new(args['accelerator'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsAggregateReservationReservedResources\"\n        end\n      end\n\n      class RegionCommitmentReservationsAggregateReservationReservedResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentReservationsAggregateReservationReservedResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentReservationsAggregateReservationReservedResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_aggregate_reservation_reserved_resources_accelerator.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsAggregateReservationReservedResourcesAccelerator\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsAggregateReservationReservedResourcesAccelerator\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_delete_after_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsDeleteAfterDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsDeleteAfterDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_resource_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsResourcePolicies\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsResourcePolicies\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_resource_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_resource_status_specific_sku_allocation'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsResourceStatus\n        attr_reader :specific_sku_allocation\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @specific_sku_allocation = GoogleInSpec::Compute::Property::RegionCommitmentReservationsResourceStatusSpecificSkuAllocation.new(args['specificSkuAllocation'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsResourceStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_resource_status_specific_sku_allocation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsResourceStatusSpecificSkuAllocation\n        attr_reader :source_instance_template_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source_instance_template_id = args['sourceInstanceTemplateId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsResourceStatusSpecificSkuAllocation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_share_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_share_settings_folder_map'\nrequire 'google/compute/property/regioncommitment_reservations_share_settings_project_map'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsShareSettings\n        attr_reader :share_type\n\n        attr_reader :projects\n\n        attr_reader :project_map\n\n        attr_reader :folder_map\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @share_type = args['shareType']\n          @projects = args['projects']\n          @project_map = GoogleInSpec::Compute::Property::RegionCommitmentReservationsShareSettingsProjectMap.new(args['projectMap'], to_s)\n          @folder_map = GoogleInSpec::Compute::Property::RegionCommitmentReservationsShareSettingsFolderMap.new(args['folderMap'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsShareSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_share_settings_folder_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsShareSettingsFolderMap\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsShareSettingsFolderMap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_share_settings_project_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsShareSettingsProjectMap\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsShareSettingsProjectMap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_specific_reservation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_local_ssds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsSpecificReservation\n        attr_reader :instance_properties\n\n        attr_reader :count\n\n        attr_reader :in_use_count\n\n        attr_reader :assured_count\n\n        attr_reader :source_instance_template\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_properties = GoogleInSpec::Compute::Property::RegionCommitmentReservationsSpecificReservationInstanceProperties.new(args['instanceProperties'], to_s)\n          @count = args['count']\n          @in_use_count = args['inUseCount']\n          @assured_count = args['assuredCount']\n          @source_instance_template = args['sourceInstanceTemplate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsSpecificReservation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_local_ssds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsSpecificReservationInstanceProperties\n        attr_reader :machine_type\n\n        attr_reader :guest_accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :local_ssds\n\n        attr_reader :maintenance_freeze_duration_hours\n\n        attr_reader :location_hint\n\n        attr_reader :maintenance_interval\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @guest_accelerators = GoogleInSpec::Compute::Property::RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAcceleratorsArray.parse(args['guestAccelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @local_ssds = GoogleInSpec::Compute::Property::RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsdsArray.parse(args['localSsds'], to_s)\n          @maintenance_freeze_duration_hours = args['maintenanceFreezeDurationHours']\n          @location_hint = args['locationHint']\n          @maintenance_interval = args['maintenanceInterval']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsSpecificReservationInstanceProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAccelerators\n        attr_reader :accelerator_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAccelerators\"\n        end\n      end\n\n      class RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentReservationsSpecificReservationInstancePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_reservations_specific_reservation_instance_properties_local_ssds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsds\n        attr_reader :disk_size_gb\n\n        attr_reader :interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_size_gb = args['diskSizeGb']\n          @interface = args['interface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsds\"\n        end\n      end\n\n      class RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsdsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsds.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentReservationsSpecificReservationInstancePropertiesLocalSsds.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resource_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_canceled_commitment'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_cap'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_fee'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResourceStatus\n        attr_reader :cancellation_information\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cancellation_information = GoogleInSpec::Compute::Property::RegionCommitmentResourceStatusCancellationInformation.new(args['cancellationInformation'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResourceStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resource_status_cancellation_information.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_canceled_commitment'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_cap'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_fee'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResourceStatusCancellationInformation\n        attr_reader :cancellation_fee\n\n        attr_reader :cancellation_fee_expiration_timestamp\n\n        attr_reader :cancellation_cap\n\n        attr_reader :canceled_commitment\n\n        attr_reader :canceled_commitment_last_updated_timestamp\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cancellation_fee = GoogleInSpec::Compute::Property::RegionCommitmentResourceStatusCancellationInformationCancellationFee.new(args['cancellationFee'], to_s)\n          @cancellation_fee_expiration_timestamp = args['cancellationFeeExpirationTimestamp']\n          @cancellation_cap = GoogleInSpec::Compute::Property::RegionCommitmentResourceStatusCancellationInformationCancellationCap.new(args['cancellationCap'], to_s)\n          @canceled_commitment = GoogleInSpec::Compute::Property::RegionCommitmentResourceStatusCancellationInformationCanceledCommitment.new(args['canceledCommitment'], to_s)\n          @canceled_commitment_last_updated_timestamp = args['canceledCommitmentLastUpdatedTimestamp']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResourceStatusCancellationInformation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resource_status_cancellation_information_canceled_commitment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResourceStatusCancellationInformationCanceledCommitment\n        attr_reader :currency_code\n\n        attr_reader :units\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @currency_code = args['currencyCode']\n          @units = args['units']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResourceStatusCancellationInformationCanceledCommitment\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_cap.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResourceStatusCancellationInformationCancellationCap\n        attr_reader :currency_code\n\n        attr_reader :units\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @currency_code = args['currencyCode']\n          @units = args['units']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResourceStatusCancellationInformationCancellationCap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_fee.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResourceStatusCancellationInformationCancellationFee\n        attr_reader :currency_code\n\n        attr_reader :units\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @currency_code = args['currencyCode']\n          @units = args['units']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResourceStatusCancellationInformationCancellationFee\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioncommitment_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionCommitmentResources\n        attr_reader :type\n\n        attr_reader :amount\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @amount = args['amount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionCommitmentResources\"\n        end\n      end\n\n      class RegionCommitmentResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionCommitmentResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionCommitmentResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regiondisktype_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionDiskTypeDeprecated\n        attr_reader :state\n\n        attr_reader :replacement\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :deleted\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @replacement = args['replacement']\n          @deprecated = args['deprecated']\n          @obsolete = args['obsolete']\n          @deleted = args['deleted']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionDiskTypeDeprecated\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_grpc_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckGrpcHealthCheck\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :port_specification\n\n        attr_reader :grpc_service_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @port_name = args['portName']\n          @port_specification = args['portSpecification']\n          @grpc_service_name = args['grpcServiceName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckGrpcHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_http2_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckHttp2HealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckHttp2HealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_http_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckHttpHealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckHttpHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_https_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckHttpsHealthCheck\n        attr_reader :host\n\n        attr_reader :request_path\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host = args['host']\n          @request_path = args['requestPath']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckHttpsHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckLogConfig\n        attr_reader :enable\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_ssl_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckSslHealthCheck\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request = args['request']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckSslHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionhealthcheck_tcp_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionHealthCheckTcpHealthCheck\n        attr_reader :request\n\n        attr_reader :response\n\n        attr_reader :port\n\n        attr_reader :port_name\n\n        attr_reader :proxy_header\n\n        attr_reader :port_specification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request = args['request']\n          @response = args['response']\n          @port = args['port']\n          @port_name = args['portName']\n          @proxy_header = args['proxyHeader']\n          @port_specification = args['portSpecification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionHealthCheckTcpHealthCheck\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioninstancegroup_named_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionInstanceGroupNamedPorts\n        attr_reader :name\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionInstanceGroupNamedPorts\"\n        end\n      end\n\n      class RegionInstanceGroupNamedPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionInstanceGroupNamedPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionInstanceGroupNamedPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioninstancegroupmanager_auto_healing_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionInstanceGroupManagerAutoHealingPolicies\n        attr_reader :health_check\n\n        attr_reader :initial_delay_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @health_check = args['healthCheck']\n          @initial_delay_sec = args['initialDelaySec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionInstanceGroupManagerAutoHealingPolicies\"\n        end\n      end\n\n      class RegionInstanceGroupManagerAutoHealingPoliciesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionInstanceGroupManagerAutoHealingPolicies.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionInstanceGroupManagerAutoHealingPolicies.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioninstancegroupmanager_current_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionInstanceGroupManagerCurrentActions\n        attr_reader :abandoning\n\n        attr_reader :creating\n\n        attr_reader :creating_without_retries\n\n        attr_reader :deleting\n\n        attr_reader :none\n\n        attr_reader :recreating\n\n        attr_reader :refreshing\n\n        attr_reader :restarting\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @abandoning = args['abandoning']\n          @creating = args['creating']\n          @creating_without_retries = args['creatingWithoutRetries']\n          @deleting = args['deleting']\n          @none = args['none']\n          @recreating = args['recreating']\n          @refreshing = args['refreshing']\n          @restarting = args['restarting']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionInstanceGroupManagerCurrentActions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regioninstancegroupmanager_named_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionInstanceGroupManagerNamedPorts\n        attr_reader :name\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionInstanceGroupManagerNamedPorts\"\n        end\n      end\n\n      class RegionInstanceGroupManagerNamedPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionInstanceGroupManagerNamedPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionInstanceGroupManagerNamedPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionnetworkendpointgroup_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionNetworkEndpointGroupAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionNetworkEndpointGroupAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionnetworkendpointgroup_app_engine.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionNetworkEndpointGroupAppEngine\n        attr_reader :service\n\n        attr_reader :version\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @version = args['version']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionNetworkEndpointGroupAppEngine\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionnetworkendpointgroup_cloud_function.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionNetworkEndpointGroupCloudFunction\n        attr_reader :function\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @function = args['function']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionNetworkEndpointGroupCloudFunction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionnetworkendpointgroup_cloud_run.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionNetworkEndpointGroupCloudRun\n        attr_reader :service\n\n        attr_reader :tag\n\n        attr_reader :url_mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @tag = args['tag']\n          @url_mask = args['urlMask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionNetworkEndpointGroupCloudRun\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionnetworkendpointgroup_psc_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionNetworkEndpointGroupPscData\n        attr_reader :consumer_psc_address\n\n        attr_reader :psc_connection_id\n\n        attr_reader :psc_connection_status\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consumer_psc_address = args['consumerPscAddress']\n          @psc_connection_id = args['pscConnectionId']\n          @psc_connection_status = args['pscConnectionStatus']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionNetworkEndpointGroupPscData\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_adaptive_protection_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_auto_deploy_config'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config_threshold_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdaptiveProtectionConfig\n        attr_reader :layer7_ddos_defense_config\n\n        attr_reader :auto_deploy_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @layer7_ddos_defense_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.new(args['layer7DdosDefenseConfig'], to_s)\n          @auto_deploy_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.new(args['autoDeployConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdaptiveProtectionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_adaptive_protection_config_auto_deploy_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig\n        attr_reader :load_threshold\n\n        attr_reader :confidence_threshold\n\n        attr_reader :impacted_baseline_threshold\n\n        attr_reader :expiration_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @load_threshold = args['loadThreshold']\n          @confidence_threshold = args['confidenceThreshold']\n          @impacted_baseline_threshold = args['impactedBaselineThreshold']\n          @expiration_sec = args['expirationSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config_threshold_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig\n        attr_reader :enable\n\n        attr_reader :rule_visibility\n\n        attr_reader :threshold_configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @rule_visibility = args['ruleVisibility']\n          @threshold_configs = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsArray.parse(args['thresholdConfigs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config_threshold_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_apclddctctg_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigs\n        attr_reader :name\n\n        attr_reader :auto_deploy_load_threshold\n\n        attr_reader :auto_deploy_confidence_threshold\n\n        attr_reader :auto_deploy_impacted_baseline_threshold\n\n        attr_reader :auto_deploy_expiration_sec\n\n        attr_reader :detection_load_threshold\n\n        attr_reader :detection_absolute_qps\n\n        attr_reader :detection_relative_to_baseline_qps\n\n        attr_reader :traffic_granularity_configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @auto_deploy_load_threshold = args['autoDeployLoadThreshold']\n          @auto_deploy_confidence_threshold = args['autoDeployConfidenceThreshold']\n          @auto_deploy_impacted_baseline_threshold = args['autoDeployImpactedBaselineThreshold']\n          @auto_deploy_expiration_sec = args['autoDeployExpirationSec']\n          @detection_load_threshold = args['detectionLoadThreshold']\n          @detection_absolute_qps = args['detectionAbsoluteQps']\n          @detection_relative_to_baseline_qps = args['detectionRelativeToBaselineQps']\n          @traffic_granularity_configs = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigsArray.parse(args['trafficGranularityConfigs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigs\"\n        end\n      end\n\n      class RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_advanced_options_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_advanced_options_config_json_custom_config'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdvancedOptionsConfig\n        attr_reader :json_parsing\n\n        attr_reader :json_custom_config\n\n        attr_reader :log_level\n\n        attr_reader :user_ip_request_headers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @json_parsing = args['jsonParsing']\n          @json_custom_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdvancedOptionsConfigJsonCustomConfig.new(args['jsonCustomConfig'], to_s)\n          @log_level = args['logLevel']\n          @user_ip_request_headers = args['userIpRequestHeaders']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdvancedOptionsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_advanced_options_config_json_custom_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdvancedOptionsConfigJsonCustomConfig\n        attr_reader :content_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content_types = args['contentTypes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdvancedOptionsConfigJsonCustomConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_apclddctctg_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigs\n        attr_reader :type\n\n        attr_reader :value\n\n        attr_reader :enable_each_unique_value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @value = args['value']\n          @enable_each_unique_value = args['enableEachUniqueValue']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigs\"\n        end\n      end\n\n      class RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigsTrafficGranularityConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_associations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyAssociations\n        attr_reader :name\n\n        attr_reader :attachment_id\n\n        attr_reader :security_policy_id\n\n        attr_reader :display_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @attachment_id = args['attachmentId']\n          @security_policy_id = args['securityPolicyId']\n          @display_name = args['displayName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyAssociations\"\n        end\n      end\n\n      class RegionSecurityPolicyAssociationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyAssociations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyAssociations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_cloud_armor_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyCloudArmorConfig\n        attr_reader :enable_ml\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_ml = args['enableMl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyCloudArmorConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_ddos_protection_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyDdosProtectionConfig\n        attr_reader :ddos_protection\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ddos_protection = args['ddosProtection']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyDdosProtectionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_recaptcha_options_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRecaptchaOptionsConfig\n        attr_reader :redirect_site_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @redirect_site_key = args['redirectSiteKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRecaptchaOptionsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_header_action'\nrequire 'google/compute/property/regionsecuritypolicy_rules_header_action_request_headers_to_adds'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_dest_ports'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_layer4_configs'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr_options_recaptcha_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_network_match'\nrequire 'google/compute/property/regionsecuritypolicy_rules_network_match_user_defined_fields'\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config'\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_ban_threshold'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_enforce_on_key_configs'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_action_rpc_status'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_redirect_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_rate_limit_threshold'\nrequire 'google/compute/property/regionsecuritypolicy_rules_redirect_options'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRules\n        attr_reader :kind\n\n        attr_reader :description\n\n        attr_reader :priority\n\n        attr_reader :match\n\n        attr_reader :network_match\n\n        attr_reader :action\n\n        attr_reader :preview\n\n        attr_reader :direction\n\n        attr_reader :target_resources\n\n        attr_reader :enable_logging\n\n        attr_reader :rule_tuple_count\n\n        attr_reader :rate_limit_options\n\n        attr_reader :target_service_accounts\n\n        attr_reader :rule_number\n\n        attr_reader :redirect_target\n\n        attr_reader :header_action\n\n        attr_reader :redirect_options\n\n        attr_reader :rule_managed_protection_tier\n\n        attr_reader :preconfigured_waf_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @description = args['description']\n          @priority = args['priority']\n          @match = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatch.new(args['match'], to_s)\n          @network_match = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesNetworkMatch.new(args['networkMatch'], to_s)\n          @action = args['action']\n          @preview = args['preview']\n          @direction = args['direction']\n          @target_resources = args['targetResources']\n          @enable_logging = args['enableLogging']\n          @rule_tuple_count = args['ruleTupleCount']\n          @rate_limit_options = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptions.new(args['rateLimitOptions'], to_s)\n          @target_service_accounts = args['targetServiceAccounts']\n          @rule_number = args['ruleNumber']\n          @redirect_target = args['redirectTarget']\n          @header_action = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesHeaderAction.new(args['headerAction'], to_s)\n          @redirect_options = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRedirectOptions.new(args['redirectOptions'], to_s)\n          @rule_managed_protection_tier = args['ruleManagedProtectionTier']\n          @preconfigured_waf_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfig.new(args['preconfiguredWafConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRules\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_header_action_request_headers_to_adds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesHeaderAction\n        attr_reader :request_headers_to_adds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_adds = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesHeaderActionRequestHeadersToAddsArray.parse(args['requestHeadersToAdds'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_header_action_request_headers_to_adds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesHeaderActionRequestHeadersToAdds\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesHeaderActionRequestHeadersToAdds\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesHeaderActionRequestHeadersToAddsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesHeaderActionRequestHeadersToAdds.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesHeaderActionRequestHeadersToAdds.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_dest_ports'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_layer4_configs'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr_options_recaptcha_options'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatch\n        attr_reader :expr\n\n        attr_reader :expr_options\n\n        attr_reader :versioned_expr\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expr = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchExpr.new(args['expr'], to_s)\n          @expr_options = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchExprOptions.new(args['exprOptions'], to_s)\n          @versioned_expr = args['versionedExpr']\n          @config = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchConfig.new(args['config'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_dest_ports'\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_config_layer4_configs'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchConfig\n        attr_reader :src_ip_ranges\n\n        attr_reader :dest_ip_ranges\n\n        attr_reader :dest_ports\n\n        attr_reader :layer4_configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @src_ip_ranges = args['srcIpRanges']\n          @dest_ip_ranges = args['destIpRanges']\n          @dest_ports = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchConfigDestPortsArray.parse(args['destPorts'], to_s)\n          @layer4_configs = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchConfigLayer4ConfigsArray.parse(args['layer4Configs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_config_dest_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchConfigDestPorts\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = args['ipProtocol']\n          @ports = args['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchConfigDestPorts\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesMatchConfigDestPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesMatchConfigDestPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesMatchConfigDestPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_config_layer4_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchConfigLayer4Configs\n        attr_reader :ip_protocol\n\n        attr_reader :ports\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_protocol = args['ipProtocol']\n          @ports = args['ports']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchConfigLayer4Configs\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesMatchConfigLayer4ConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesMatchConfigLayer4Configs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesMatchConfigLayer4Configs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_expr.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchExpr\n        attr_reader :expression\n\n        attr_reader :title\n\n        attr_reader :description\n\n        attr_reader :location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expression = args['expression']\n          @title = args['title']\n          @description = args['description']\n          @location = args['location']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchExpr\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_expr_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_match_expr_options_recaptcha_options'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchExprOptions\n        attr_reader :recaptcha_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @recaptcha_options = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesMatchExprOptionsRecaptchaOptions.new(args['recaptchaOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchExprOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_match_expr_options_recaptcha_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesMatchExprOptionsRecaptchaOptions\n        attr_reader :action_token_site_keys\n\n        attr_reader :session_token_site_keys\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @action_token_site_keys = args['actionTokenSiteKeys']\n          @session_token_site_keys = args['sessionTokenSiteKeys']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesMatchExprOptionsRecaptchaOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_network_match.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_network_match_user_defined_fields'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesNetworkMatch\n        attr_reader :user_defined_fields\n\n        attr_reader :src_ip_ranges\n\n        attr_reader :dest_ip_ranges\n\n        attr_reader :ip_protocols\n\n        attr_reader :src_ports\n\n        attr_reader :dest_ports\n\n        attr_reader :src_region_codes\n\n        attr_reader :src_asns\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_defined_fields = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesNetworkMatchUserDefinedFieldsArray.parse(args['userDefinedFields'], to_s)\n          @src_ip_ranges = args['srcIpRanges']\n          @dest_ip_ranges = args['destIpRanges']\n          @ip_protocols = args['ipProtocols']\n          @src_ports = args['srcPorts']\n          @dest_ports = args['destPorts']\n          @src_region_codes = args['srcRegionCodes']\n          @src_asns = args['srcAsns']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesNetworkMatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_network_match_user_defined_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesNetworkMatchUserDefinedFields\n        attr_reader :name\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesNetworkMatchUserDefinedFields\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesNetworkMatchUserDefinedFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesNetworkMatchUserDefinedFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesNetworkMatchUserDefinedFields.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfig\n        attr_reader :exclusions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exclusions = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsArray.parse(args['exclusions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_cookies_to_exclude'\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_headers_to_exclude'\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_query_params_to_exclude'\nrequire 'google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_uris_to_exclude'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusions\n        attr_reader :target_rule_set\n\n        attr_reader :target_rule_ids\n\n        attr_reader :request_headers_to_exclude\n\n        attr_reader :request_cookies_to_exclude\n\n        attr_reader :request_query_params_to_exclude\n\n        attr_reader :request_uris_to_exclude\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_rule_set = args['targetRuleSet']\n          @target_rule_ids = args['targetRuleIds']\n          @request_headers_to_exclude = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExcludeArray.parse(args['requestHeadersToExclude'], to_s)\n          @request_cookies_to_exclude = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExcludeArray.parse(args['requestCookiesToExclude'], to_s)\n          @request_query_params_to_exclude = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExcludeArray.parse(args['requestQueryParamsToExclude'], to_s)\n          @request_uris_to_exclude = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExcludeArray.parse(args['requestUrisToExclude'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfigExclusions\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesPreconfiguredWafConfigExclusions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesPreconfiguredWafConfigExclusions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_cookies_to_exclude.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExclude\n        attr_reader :val\n\n        attr_reader :op\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @val = args['val']\n          @op = args['op']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExclude\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExcludeArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExclude.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestCookiesToExclude.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_headers_to_exclude.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExclude\n        attr_reader :val\n\n        attr_reader :op\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @val = args['val']\n          @op = args['op']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExclude\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExcludeArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExclude.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestHeadersToExclude.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_query_params_to_exclude.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExclude\n        attr_reader :val\n\n        attr_reader :op\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @val = args['val']\n          @op = args['op']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExclude\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExcludeArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExclude.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestQueryParamsToExclude.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_preconfigured_waf_config_exclusions_request_uris_to_exclude.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExclude\n        attr_reader :val\n\n        attr_reader :op\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @val = args['val']\n          @op = args['op']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExclude\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExcludeArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExclude.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesPreconfiguredWafConfigExclusionsRequestUrisToExclude.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_ban_threshold'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_enforce_on_key_configs'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_action_rpc_status'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_redirect_options'\nrequire 'google/compute/property/regionsecuritypolicy_rules_rate_limit_options_rate_limit_threshold'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptions\n        attr_reader :rate_limit_threshold\n\n        attr_reader :conform_action\n\n        attr_reader :exceed_action\n\n        attr_reader :exceed_redirect_options\n\n        attr_reader :exceed_action_rpc_status\n\n        attr_reader :enforce_on_key\n\n        attr_reader :enforce_on_key_name\n\n        attr_reader :enforce_on_key_configs\n\n        attr_reader :ban_threshold\n\n        attr_reader :ban_duration_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @rate_limit_threshold = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptionsRateLimitThreshold.new(args['rateLimitThreshold'], to_s)\n          @conform_action = args['conformAction']\n          @exceed_action = args['exceedAction']\n          @exceed_redirect_options = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptionsExceedRedirectOptions.new(args['exceedRedirectOptions'], to_s)\n          @exceed_action_rpc_status = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptionsExceedActionRpcStatus.new(args['exceedActionRpcStatus'], to_s)\n          @enforce_on_key = args['enforceOnKey']\n          @enforce_on_key_name = args['enforceOnKeyName']\n          @enforce_on_key_configs = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigsArray.parse(args['enforceOnKeyConfigs'], to_s)\n          @ban_threshold = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesRateLimitOptionsBanThreshold.new(args['banThreshold'], to_s)\n          @ban_duration_sec = args['banDurationSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options_ban_threshold.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptionsBanThreshold\n        attr_reader :count\n\n        attr_reader :interval_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @count = args['count']\n          @interval_sec = args['intervalSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptionsBanThreshold\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options_enforce_on_key_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigs\n        attr_reader :enforce_on_key_type\n\n        attr_reader :enforce_on_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enforce_on_key_type = args['enforceOnKeyType']\n          @enforce_on_key_name = args['enforceOnKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigs\"\n        end\n      end\n\n      class RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyRulesRateLimitOptionsEnforceOnKeyConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_action_rpc_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptionsExceedActionRpcStatus\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptionsExceedActionRpcStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options_exceed_redirect_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptionsExceedRedirectOptions\n        attr_reader :type\n\n        attr_reader :target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @target = args['target']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptionsExceedRedirectOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_rate_limit_options_rate_limit_threshold.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRateLimitOptionsRateLimitThreshold\n        attr_reader :count\n\n        attr_reader :interval_sec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @count = args['count']\n          @interval_sec = args['intervalSec']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRateLimitOptionsRateLimitThreshold\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_rules_redirect_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyRulesRedirectOptions\n        attr_reader :type\n\n        attr_reader :target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @target = args['target']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyRulesRedirectOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsecuritypolicy_user_defined_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSecurityPolicyUserDefinedFields\n        attr_reader :name\n\n        attr_reader :base\n\n        attr_reader :offset\n\n        attr_reader :size\n\n        attr_reader :mask\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @base = args['base']\n          @offset = args['offset']\n          @size = args['size']\n          @mask = args['mask']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSecurityPolicyUserDefinedFields\"\n        end\n      end\n\n      class RegionSecurityPolicyUserDefinedFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSecurityPolicyUserDefinedFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSecurityPolicyUserDefinedFields.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_certificate_paths'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettings\n        attr_reader :tls_mode\n\n        attr_reader :proxy_tls_context\n\n        attr_reader :subject_alt_names\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tls_mode = args['tlsMode']\n          @proxy_tls_context = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContext.new(args['proxyTlsContext'], to_s)\n          @subject_alt_names = args['subjectAltNames']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_certificate_paths'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContext\n        attr_reader :certificate_context\n\n        attr_reader :validation_context\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @certificate_context = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContext.new(args['certificateContext'], to_s)\n          @validation_context = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContext.new(args['validationContext'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_certificate_paths'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContext\n        attr_reader :certificate_source\n\n        attr_reader :certificate_paths\n\n        attr_reader :sds_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @certificate_source = args['certificateSource']\n          @certificate_paths = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextCertificatePaths.new(args['certificatePaths'], to_s)\n          @sds_config = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfig.new(args['sdsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_certificate_paths.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextCertificatePaths\n        attr_reader :certificate_path\n\n        attr_reader :private_key_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @certificate_path = args['certificatePath']\n          @private_key_path = args['privateKeyPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextCertificatePaths\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfig\n        attr_reader :grpc_service_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @grpc_service_config = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfig.new(args['grpcServiceConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfig\n        attr_reader :target_uri\n\n        attr_reader :channel_credentials\n\n        attr_reader :call_credentials\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_uri = args['targetUri']\n          @channel_credentials = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentials.new(args['channelCredentials'], to_s)\n          @call_credentials = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigCallCredentials.new(args['callCredentials'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContext\n        attr_reader :validation_source\n\n        attr_reader :certificate_path\n\n        attr_reader :sds_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @validation_source = args['validationSource']\n          @certificate_path = args['certificatePath']\n          @sds_config = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfig.new(args['sdsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfig\n        attr_reader :grpc_service_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @grpc_service_config = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfig.new(args['grpcServiceConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfig\n        attr_reader :target_uri\n\n        attr_reader :channel_credentials\n\n        attr_reader :call_credentials\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_uri = args['targetUri']\n          @channel_credentials = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentials.new(args['channelCredentials'], to_s)\n          @call_credentials = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigCallCredentials.new(args['callCredentials'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcccscgscc_credentials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentials\n        attr_reader :channel_credential_type\n\n        attr_reader :certificates\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @channel_credential_type = args['channelCredentialType']\n          @certificates = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates.new(args['certificates'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentials\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates\n        attr_reader :certificate_path\n\n        attr_reader :private_key_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @certificate_path = args['certificatePath']\n          @private_key_path = args['privateKeyPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigCallCredentialsFromPlugin\n        attr_reader :name\n\n        attr_reader :struct_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @struct_config = args['structConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextCertificateContextSdsConfigGrpcServiceConfigCallCredentialsFromPlugin\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentials\n        attr_reader :channel_credential_type\n\n        attr_reader :certificates\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @channel_credential_type = args['channelCredentialType']\n          @certificates = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates.new(args['certificates'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentials\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates\n        attr_reader :certificate_path\n\n        attr_reader :private_key_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @certificate_path = args['certificatePath']\n          @private_key_path = args['privateKeyPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigChannelCredentialsCertificates\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigCallCredentialsFromPlugin\n        attr_reader :name\n\n        attr_reader :struct_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @struct_config = args['structConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyTlsSettingsProxyTlsContextValidationContextSdsConfigGrpcServiceConfigCallCredentialsFromPlugin\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_warnings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionsslpolicy_warnings_data'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyWarnings\n        attr_reader :code\n\n        attr_reader :message\n\n        attr_reader :data\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n          @data = GoogleInSpec::Compute::Property::RegionSslPolicyWarningsDataArray.parse(args['data'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyWarnings\"\n        end\n      end\n\n      class RegionSslPolicyWarningsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSslPolicyWarnings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSslPolicyWarnings.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionsslpolicy_warnings_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionSslPolicyWarningsData\n        attr_reader :key\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionSslPolicyWarningsData\"\n        end\n      end\n\n      class RegionSslPolicyWarningsDataArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionSslPolicyWarningsData.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionSslPolicyWarningsData.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_custom_error_response_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_custom_error_response_policy_error_response_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultCustomErrorResponsePolicy\n        attr_reader :error_response_rules\n\n        attr_reader :error_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @error_response_rules = GoogleInSpec::Compute::Property::RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRulesArray.parse(args['errorResponseRules'], to_s)\n          @error_service = args['errorService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultCustomErrorResponsePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_custom_error_response_policy_error_response_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRules\n        attr_reader :match_response_codes\n\n        attr_reader :path\n\n        attr_reader :override_response_code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @match_response_codes = args['matchResponseCodes']\n          @path = args['path']\n          @override_response_code = args['overrideResponseCode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRules\"\n        end\n      end\n\n      class RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapDefaultCustomErrorResponsePolicyErrorResponseRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_default_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_default_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_default_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteAction\n        attr_reader :weighted_backend_services\n\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        attr_reader :max_stream_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @weighted_backend_services = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionWeightedBackendServicesArray.parse(args['weightedBackendServices'], to_s)\n          @url_rewrite = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n          @max_stream_duration = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionMaxStreamDuration.new(args['maxStreamDuration'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_max_stream_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionMaxStreamDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionMaxStreamDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        attr_reader :path_template_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n          @path_template_rewrite = args['pathTemplateRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_weighted_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action'\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionWeightedBackendServices\n        attr_reader :backend_service\n\n        attr_reader :weight\n\n        attr_reader :header_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n          @weight = args['weight']\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderAction.new(args['headerAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionWeightedBackendServices\"\n        end\n      end\n\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapDefaultRouteActionWeightedBackendServices.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapDefaultRouteActionWeightedBackendServices.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_default_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapDefaultUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :https_redirect\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @https_redirect = args['httpsRedirect']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapDefaultUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_host_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapHostRules\n        attr_reader :description\n\n        attr_reader :hosts\n\n        attr_reader :path_matcher\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @hosts = args['hosts']\n          @path_matcher = args['pathMatcher']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapHostRules\"\n        end\n      end\n\n      class RegionUrlMapHostRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapHostRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapHostRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_custom_error_response_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_custom_error_response_policy_error_response_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_weighted_backend_services'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_url_redirect'\nrequire 'google/compute/property/regionurlmap_path_matchers_header_action'\nrequire 'google/compute/property/regionurlmap_path_matchers_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_header_action_response_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchers\n        attr_reader :name\n\n        attr_reader :description\n\n        attr_reader :default_service\n\n        attr_reader :default_route_action\n\n        attr_reader :default_url_redirect\n\n        attr_reader :path_rules\n\n        attr_reader :route_rules\n\n        attr_reader :header_action\n\n        attr_reader :default_custom_error_response_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @description = args['description']\n          @default_service = args['defaultService']\n          @default_route_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteAction.new(args['defaultRouteAction'], to_s)\n          @default_url_redirect = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultUrlRedirect.new(args['defaultUrlRedirect'], to_s)\n          @path_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesArray.parse(args['pathRules'], to_s)\n          @route_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesArray.parse(args['routeRules'], to_s)\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersHeaderAction.new(args['headerAction'], to_s)\n          @default_custom_error_response_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicy.new(args['defaultCustomErrorResponsePolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchers\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_custom_error_response_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_custom_error_response_policy_error_response_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicy\n        attr_reader :error_response_rules\n\n        attr_reader :error_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @error_response_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRulesArray.parse(args['errorResponseRules'], to_s)\n          @error_service = args['errorService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_custom_error_response_policy_error_response_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRules\n        attr_reader :match_response_codes\n\n        attr_reader :path\n\n        attr_reader :override_response_code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @match_response_codes = args['matchResponseCodes']\n          @path = args['path']\n          @override_response_code = args['overrideResponseCode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersDefaultCustomErrorResponsePolicyErrorResponseRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_weighted_backend_services'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteAction\n        attr_reader :weighted_backend_services\n\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        attr_reader :max_stream_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @weighted_backend_services = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesArray.parse(args['weightedBackendServices'], to_s)\n          @url_rewrite = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n          @max_stream_duration = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionMaxStreamDuration.new(args['maxStreamDuration'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_max_stream_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionMaxStreamDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionMaxStreamDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        attr_reader :path_template_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n          @path_template_rewrite = args['pathTemplateRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_weighted_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_default_route_action_weighted_backend_services_header_action'\nrequire 'google/compute/property/regionurlmap_pmdrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServices\n        attr_reader :backend_service\n\n        attr_reader :weight\n\n        attr_reader :header_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n          @weight = args['weight']\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderAction.new(args['headerAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServices\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServices.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServices.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_route_action_weighted_backend_services_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_pmdrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_default_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :https_redirect\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @https_redirect = args['httpsRedirect']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_custom_error_response_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_custom_error_response_policy_error_response_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_weighted_backend_services'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_url_redirect'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRules\n        attr_reader :service\n\n        attr_reader :route_action\n\n        attr_reader :url_redirect\n\n        attr_reader :paths\n\n        attr_reader :custom_error_response_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @route_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteAction.new(args['routeAction'], to_s)\n          @url_redirect = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesUrlRedirect.new(args['urlRedirect'], to_s)\n          @paths = args['paths']\n          @custom_error_response_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicy.new(args['customErrorResponsePolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersPathRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersPathRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersPathRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_custom_error_response_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_custom_error_response_policy_error_response_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicy\n        attr_reader :error_response_rules\n\n        attr_reader :error_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @error_response_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRulesArray.parse(args['errorResponseRules'], to_s)\n          @error_service = args['errorService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_custom_error_response_policy_error_response_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRules\n        attr_reader :match_response_codes\n\n        attr_reader :path\n\n        attr_reader :override_response_code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @match_response_codes = args['matchResponseCodes']\n          @path = args['path']\n          @override_response_code = args['overrideResponseCode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersPathRulesCustomErrorResponsePolicyErrorResponseRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_weighted_backend_services'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteAction\n        attr_reader :weighted_backend_services\n\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        attr_reader :max_stream_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @weighted_backend_services = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesArray.parse(args['weightedBackendServices'], to_s)\n          @url_rewrite = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n          @max_stream_duration = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionMaxStreamDuration.new(args['maxStreamDuration'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_max_stream_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionMaxStreamDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionMaxStreamDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        attr_reader :path_template_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n          @path_template_rewrite = args['pathTemplateRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_weighted_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_path_rules_route_action_weighted_backend_services_header_action'\nrequire 'google/compute/property/regionurlmap_pmprrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServices\n        attr_reader :backend_service\n\n        attr_reader :weight\n\n        attr_reader :header_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n          @weight = args['weight']\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderAction.new(args['headerAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServices\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServices.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServices.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_route_action_weighted_backend_services_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_pmprrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_path_rules_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :https_redirect\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @https_redirect = args['httpsRedirect']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_custom_error_response_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_custom_error_response_policy_error_response_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_header_action'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_header_action_response_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_http_filter_configs'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_http_filter_metadata'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_weighted_backend_services'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_url_redirect'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRules\n        attr_reader :priority\n\n        attr_reader :description\n\n        attr_reader :match_rules\n\n        attr_reader :service\n\n        attr_reader :route_action\n\n        attr_reader :url_redirect\n\n        attr_reader :header_action\n\n        attr_reader :http_filter_configs\n\n        attr_reader :http_filter_metadata\n\n        attr_reader :custom_error_response_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @priority = args['priority']\n          @description = args['description']\n          @match_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesArray.parse(args['matchRules'], to_s)\n          @service = args['service']\n          @route_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteAction.new(args['routeAction'], to_s)\n          @url_redirect = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesUrlRedirect.new(args['urlRedirect'], to_s)\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesHeaderAction.new(args['headerAction'], to_s)\n          @http_filter_configs = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesHttpFilterConfigsArray.parse(args['httpFilterConfigs'], to_s)\n          @http_filter_metadata = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesHttpFilterMetadataArray.parse(args['httpFilterMetadata'], to_s)\n          @custom_error_response_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicy.new(args['customErrorResponsePolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_custom_error_response_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_custom_error_response_policy_error_response_rules'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicy\n        attr_reader :error_response_rules\n\n        attr_reader :error_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @error_response_rules = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRulesArray.parse(args['errorResponseRules'], to_s)\n          @error_service = args['errorService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_custom_error_response_policy_error_response_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRules\n        attr_reader :match_response_codes\n\n        attr_reader :path\n\n        attr_reader :override_response_code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @match_response_codes = args['matchResponseCodes']\n          @path = args['path']\n          @override_response_code = args['overrideResponseCode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesCustomErrorResponsePolicyErrorResponseRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_http_filter_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesHttpFilterConfigs\n        attr_reader :filter_name\n\n        attr_reader :config_type_url\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @filter_name = args['filterName']\n          @config_type_url = args['configTypeUrl']\n          @config = args['config']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesHttpFilterConfigs\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesHttpFilterConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesHttpFilterConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesHttpFilterConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_http_filter_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesHttpFilterMetadata\n        attr_reader :filter_name\n\n        attr_reader :config_type_url\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @filter_name = args['filterName']\n          @config_type_url = args['configTypeUrl']\n          @config = args['config']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesHttpFilterMetadata\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesHttpFilterMetadataArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesHttpFilterMetadata.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesHttpFilterMetadata.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_header_matches'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_metadata_filters'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_query_parameter_matches'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRules\n        attr_reader :prefix_match\n\n        attr_reader :full_path_match\n\n        attr_reader :regex_match\n\n        attr_reader :ignore_case\n\n        attr_reader :header_matches\n\n        attr_reader :query_parameter_matches\n\n        attr_reader :metadata_filters\n\n        attr_reader :path_template_match\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @prefix_match = args['prefixMatch']\n          @full_path_match = args['fullPathMatch']\n          @regex_match = args['regexMatch']\n          @ignore_case = args['ignoreCase']\n          @header_matches = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatchesArray.parse(args['headerMatches'], to_s)\n          @query_parameter_matches = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatchesArray.parse(args['queryParameterMatches'], to_s)\n          @metadata_filters = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersArray.parse(args['metadataFilters'], to_s)\n          @path_template_match = args['pathTemplateMatch']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRules\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesMatchRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesMatchRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_header_matches.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_header_matches_range_match'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatches\n        attr_reader :header_name\n\n        attr_reader :exact_match\n\n        attr_reader :regex_match\n\n        attr_reader :range_match\n\n        attr_reader :present_match\n\n        attr_reader :prefix_match\n\n        attr_reader :suffix_match\n\n        attr_reader :invert_match\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @exact_match = args['exactMatch']\n          @regex_match = args['regexMatch']\n          @range_match = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatchesRangeMatch.new(args['rangeMatch'], to_s)\n          @present_match = args['presentMatch']\n          @prefix_match = args['prefixMatch']\n          @suffix_match = args['suffixMatch']\n          @invert_match = args['invertMatch']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatches\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatchesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatches.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatches.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_header_matches_range_match.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatchesRangeMatch\n        attr_reader :range_start\n\n        attr_reader :range_end\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @range_start = args['rangeStart']\n          @range_end = args['rangeEnd']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRulesHeaderMatchesRangeMatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_metadata_filters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_metadata_filters_filter_labels'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFilters\n        attr_reader :filter_match_criteria\n\n        attr_reader :filter_labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @filter_match_criteria = args['filterMatchCriteria']\n          @filter_labels = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabelsArray.parse(args['filterLabels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFilters\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFilters.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFilters.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_metadata_filters_filter_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabels\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabels\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesMatchRulesMetadataFiltersFilterLabels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_match_rules_query_parameter_matches.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatches\n        attr_reader :name\n\n        attr_reader :present_match\n\n        attr_reader :exact_match\n\n        attr_reader :regex_match\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @present_match = args['presentMatch']\n          @exact_match = args['exactMatch']\n          @regex_match = args['regexMatch']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatches\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatchesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatches.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesMatchRulesQueryParameterMatches.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_weighted_backend_services'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteAction\n        attr_reader :weighted_backend_services\n\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        attr_reader :max_stream_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @weighted_backend_services = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesArray.parse(args['weightedBackendServices'], to_s)\n          @url_rewrite = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n          @max_stream_duration = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionMaxStreamDuration.new(args['maxStreamDuration'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_max_stream_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionMaxStreamDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionMaxStreamDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        attr_reader :path_template_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n          @path_template_rewrite = args['pathTemplateRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_weighted_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_path_matchers_route_rules_route_action_weighted_backend_services_header_action'\nrequire 'google/compute/property/regionurlmap_pmrrrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServices\n        attr_reader :backend_service\n\n        attr_reader :weight\n\n        attr_reader :header_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n          @weight = args['weight']\n          @header_action = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderAction.new(args['headerAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServices\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServices.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServices.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_route_action_weighted_backend_services_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_pmrrrawbsharht_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_path_matchers_route_rules_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :https_redirect\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @https_redirect = args['httpsRedirect']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_pmdrawbsharht_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_pmprrawbsharht_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersPathRulesRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_pmrrrawbsharht_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapPathMatchersRouteRulesRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_tests.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/regionurlmap_tests_headers'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapTests\n        attr_reader :description\n\n        attr_reader :host\n\n        attr_reader :path\n\n        attr_reader :backend_service_weight\n\n        attr_reader :headers\n\n        attr_reader :service\n\n        attr_reader :expected_url_redirect\n\n        attr_reader :expected_output_url\n\n        attr_reader :expected_redirect_response_code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @host = args['host']\n          @path = args['path']\n          @backend_service_weight = args['backendServiceWeight']\n          @headers = GoogleInSpec::Compute::Property::RegionUrlMapTestsHeadersArray.parse(args['headers'], to_s)\n          @service = args['service']\n          @expected_url_redirect = args['expectedUrlRedirect']\n          @expected_output_url = args['expectedOutputUrl']\n          @expected_redirect_response_code = args['expectedRedirectResponseCode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapTests\"\n        end\n      end\n\n      class RegionUrlMapTestsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapTests.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapTests.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/regionurlmap_tests_headers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RegionUrlMapTestsHeaders\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RegionUrlMapTestsHeaders\"\n        end\n      end\n\n      class RegionUrlMapTestsHeadersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RegionUrlMapTestsHeaders.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RegionUrlMapTestsHeaders.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_aggregate_reservation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_aggregate_reservation_in_use_resources'\nrequire 'google/compute/property/reservation_aggregate_reservation_reserved_resources'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationAggregateReservation\n        attr_reader :vm_family\n\n        attr_reader :reserved_resources\n\n        attr_reader :in_use_resources\n\n        attr_reader :workload_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @vm_family = args['vmFamily']\n          @reserved_resources = GoogleInSpec::Compute::Property::ReservationAggregateReservationReservedResourcesArray.parse(args['reservedResources'], to_s)\n          @in_use_resources = GoogleInSpec::Compute::Property::ReservationAggregateReservationInUseResourcesArray.parse(args['inUseResources'], to_s)\n          @workload_type = args['workloadType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationAggregateReservation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_aggregate_reservation_in_use_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_aggregate_reservation_in_use_resources_accelerator'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationAggregateReservationInUseResources\n        attr_reader :accelerator\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator = GoogleInSpec::Compute::Property::ReservationAggregateReservationInUseResourcesAccelerator.new(args['accelerator'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationAggregateReservationInUseResources\"\n        end\n      end\n\n      class ReservationAggregateReservationInUseResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ReservationAggregateReservationInUseResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ReservationAggregateReservationInUseResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_aggregate_reservation_in_use_resources_accelerator.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationAggregateReservationInUseResourcesAccelerator\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationAggregateReservationInUseResourcesAccelerator\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_aggregate_reservation_reserved_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_aggregate_reservation_reserved_resources_accelerator'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationAggregateReservationReservedResources\n        attr_reader :accelerator\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator = GoogleInSpec::Compute::Property::ReservationAggregateReservationReservedResourcesAccelerator.new(args['accelerator'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationAggregateReservationReservedResources\"\n        end\n      end\n\n      class ReservationAggregateReservationReservedResourcesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ReservationAggregateReservationReservedResources.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ReservationAggregateReservationReservedResources.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_aggregate_reservation_reserved_resources_accelerator.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationAggregateReservationReservedResourcesAccelerator\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationAggregateReservationReservedResourcesAccelerator\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_delete_after_duration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationDeleteAfterDuration\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationDeleteAfterDuration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_resource_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationResourcePolicies\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationResourcePolicies\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_resource_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_resource_status_specific_sku_allocation'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationResourceStatus\n        attr_reader :specific_sku_allocation\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @specific_sku_allocation = GoogleInSpec::Compute::Property::ReservationResourceStatusSpecificSkuAllocation.new(args['specificSkuAllocation'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationResourceStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_resource_status_specific_sku_allocation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationResourceStatusSpecificSkuAllocation\n        attr_reader :source_instance_template_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @source_instance_template_id = args['sourceInstanceTemplateId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationResourceStatusSpecificSkuAllocation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_share_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_share_settings_folder_map'\nrequire 'google/compute/property/reservation_share_settings_project_map'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationShareSettings\n        attr_reader :share_type\n\n        attr_reader :projects\n\n        attr_reader :project_map\n\n        attr_reader :folder_map\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @share_type = args['shareType']\n          @projects = args['projects']\n          @project_map = GoogleInSpec::Compute::Property::ReservationShareSettingsProjectMap.new(args['projectMap'], to_s)\n          @folder_map = GoogleInSpec::Compute::Property::ReservationShareSettingsFolderMap.new(args['folderMap'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationShareSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_share_settings_folder_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationShareSettingsFolderMap\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationShareSettingsFolderMap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_share_settings_project_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationShareSettingsProjectMap\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationShareSettingsProjectMap\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_specific_reservation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_local_ssds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationSpecificReservation\n        attr_reader :instance_properties\n\n        attr_reader :count\n\n        attr_reader :in_use_count\n\n        attr_reader :assured_count\n\n        attr_reader :source_instance_template\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_properties = GoogleInSpec::Compute::Property::ReservationSpecificReservationInstanceProperties.new(args['instanceProperties'], to_s)\n          @count = args['count']\n          @in_use_count = args['inUseCount']\n          @assured_count = args['assuredCount']\n          @source_instance_template = args['sourceInstanceTemplate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationSpecificReservation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_specific_reservation_instance_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_local_ssds'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationSpecificReservationInstanceProperties\n        attr_reader :machine_type\n\n        attr_reader :guest_accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :local_ssds\n\n        attr_reader :maintenance_freeze_duration_hours\n\n        attr_reader :location_hint\n\n        attr_reader :maintenance_interval\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @guest_accelerators = GoogleInSpec::Compute::Property::ReservationSpecificReservationInstancePropertiesGuestAcceleratorsArray.parse(args['guestAccelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @local_ssds = GoogleInSpec::Compute::Property::ReservationSpecificReservationInstancePropertiesLocalSsdsArray.parse(args['localSsds'], to_s)\n          @maintenance_freeze_duration_hours = args['maintenanceFreezeDurationHours']\n          @location_hint = args['locationHint']\n          @maintenance_interval = args['maintenanceInterval']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationSpecificReservationInstanceProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_specific_reservation_instance_properties_guest_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationSpecificReservationInstancePropertiesGuestAccelerators\n        attr_reader :accelerator_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationSpecificReservationInstancePropertiesGuestAccelerators\"\n        end\n      end\n\n      class ReservationSpecificReservationInstancePropertiesGuestAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ReservationSpecificReservationInstancePropertiesGuestAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ReservationSpecificReservationInstancePropertiesGuestAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/reservation_specific_reservation_instance_properties_local_ssds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ReservationSpecificReservationInstancePropertiesLocalSsds\n        attr_reader :disk_size_gb\n\n        attr_reader :interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_size_gb = args['diskSizeGb']\n          @interface = args['interface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ReservationSpecificReservationInstancePropertiesLocalSsds\"\n        end\n      end\n\n      class ReservationSpecificReservationInstancePropertiesLocalSsdsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ReservationSpecificReservationInstancePropertiesLocalSsds.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ReservationSpecificReservationInstancePropertiesLocalSsds.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_group_placement_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyGroupPlacementPolicy\n        attr_reader :style\n\n        attr_reader :locality\n\n        attr_reader :vm_count\n\n        attr_reader :availability_domain_count\n\n        attr_reader :collocation\n\n        attr_reader :scope\n\n        attr_reader :tpu_topology\n\n        attr_reader :max_distance\n\n        attr_reader :slice_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @style = args['style']\n          @locality = args['locality']\n          @vm_count = args['vmCount']\n          @availability_domain_count = args['availabilityDomainCount']\n          @collocation = args['collocation']\n          @scope = args['scope']\n          @tpu_topology = args['tpuTopology']\n          @max_distance = args['maxDistance']\n          @slice_count = args['sliceCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyGroupPlacementPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_instance_schedule_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_instance_schedule_policy_vm_start_schedule'\nrequire 'google/compute/property/resourcepolicy_instance_schedule_policy_vm_stop_schedule'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyInstanceSchedulePolicy\n        attr_reader :vm_start_schedule\n\n        attr_reader :vm_stop_schedule\n\n        attr_reader :time_zone\n\n        attr_reader :start_time\n\n        attr_reader :expiration_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @vm_start_schedule = GoogleInSpec::Compute::Property::ResourcePolicyInstanceSchedulePolicyVmStartSchedule.new(args['vmStartSchedule'], to_s)\n          @vm_stop_schedule = GoogleInSpec::Compute::Property::ResourcePolicyInstanceSchedulePolicyVmStopSchedule.new(args['vmStopSchedule'], to_s)\n          @time_zone = args['timeZone']\n          @start_time = args['startTime']\n          @expiration_time = args['expirationTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyInstanceSchedulePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_instance_schedule_policy_vm_start_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyInstanceSchedulePolicyVmStartSchedule\n        attr_reader :schedule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @schedule = args['schedule']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyInstanceSchedulePolicyVmStartSchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_instance_schedule_policy_vm_stop_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyInstanceSchedulePolicyVmStopSchedule\n        attr_reader :schedule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @schedule = args['schedule']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyInstanceSchedulePolicyVmStopSchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_resource_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_resource_status_instance_schedule_policy'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyResourceStatus\n        attr_reader :instance_schedule_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_schedule_policy = GoogleInSpec::Compute::Property::ResourcePolicyResourceStatusInstanceSchedulePolicy.new(args['instanceSchedulePolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyResourceStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_resource_status_instance_schedule_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyResourceStatusInstanceSchedulePolicy\n        attr_reader :next_run_start_time\n\n        attr_reader :last_run_start_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @next_run_start_time = args['nextRunStartTime']\n          @last_run_start_time = args['lastRunStartTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyResourceStatusInstanceSchedulePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_retention_policy'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_daily_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_hourly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule_day_of_weeks'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties_labels'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicy\n        attr_reader :schedule\n\n        attr_reader :retention_policy\n\n        attr_reader :snapshot_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @schedule = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicySchedule.new(args['schedule'], to_s)\n          @retention_policy = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicyRetentionPolicy.new(args['retentionPolicy'], to_s)\n          @snapshot_properties = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicySnapshotProperties.new(args['snapshotProperties'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_retention_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicyRetentionPolicy\n        attr_reader :max_retention_days\n\n        attr_reader :on_policy_switch\n\n        attr_reader :on_source_disk_delete\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_retention_days = args['maxRetentionDays']\n          @on_policy_switch = args['onPolicySwitch']\n          @on_source_disk_delete = args['onSourceDiskDelete']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicyRetentionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_daily_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_hourly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule_day_of_weeks'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicySchedule\n        attr_reader :hourly_schedule\n\n        attr_reader :daily_schedule\n\n        attr_reader :weekly_schedule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hourly_schedule = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicyScheduleHourlySchedule.new(args['hourlySchedule'], to_s)\n          @daily_schedule = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicyScheduleDailySchedule.new(args['dailySchedule'], to_s)\n          @weekly_schedule = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicyScheduleWeeklySchedule.new(args['weeklySchedule'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicySchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_daily_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicyScheduleDailySchedule\n        attr_reader :days_in_cycle\n\n        attr_reader :start_time\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @days_in_cycle = args['daysInCycle']\n          @start_time = args['startTime']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicyScheduleDailySchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_hourly_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicyScheduleHourlySchedule\n        attr_reader :hours_in_cycle\n\n        attr_reader :start_time\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hours_in_cycle = args['hoursInCycle']\n          @start_time = args['startTime']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicyScheduleHourlySchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule_day_of_weeks'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicyScheduleWeeklySchedule\n        attr_reader :day_of_weeks\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @day_of_weeks = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeksArray.parse(args['dayOfWeeks'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicyScheduleWeeklySchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule_day_of_weeks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeks\n        attr_reader :day\n\n        attr_reader :start_time\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @day = args['day']\n          @start_time = args['startTime']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeks\"\n        end\n      end\n\n      class ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ResourcePolicySnapshotSchedulePolicyScheduleWeeklyScheduleDayOfWeeks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties_labels'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicySnapshotProperties\n        attr_reader :labels\n\n        attr_reader :storage_locations\n\n        attr_reader :guest_flush\n\n        attr_reader :chain_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @labels = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicySnapshotPropertiesLabels.new(args['labels'], to_s)\n          @storage_locations = args['storageLocations']\n          @guest_flush = args['guestFlush']\n          @chain_name = args['chainName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicySnapshotProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicySnapshotSchedulePolicySnapshotPropertiesLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicySnapshotSchedulePolicySnapshotPropertiesLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_vm_maintenance_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_concurrency_control_group'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window_daily_maintenance_window'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyVmMaintenancePolicy\n        attr_reader :maintenance_window\n\n        attr_reader :concurrency_control_group\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @maintenance_window = GoogleInSpec::Compute::Property::ResourcePolicyVmMaintenancePolicyMaintenanceWindow.new(args['maintenanceWindow'], to_s)\n          @concurrency_control_group = GoogleInSpec::Compute::Property::ResourcePolicyVmMaintenancePolicyConcurrencyControlGroup.new(args['concurrencyControlGroup'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyVmMaintenancePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_vm_maintenance_policy_concurrency_control_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyVmMaintenancePolicyConcurrencyControlGroup\n        attr_reader :concurrency_limit\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @concurrency_limit = args['concurrencyLimit']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyVmMaintenancePolicyConcurrencyControlGroup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window_daily_maintenance_window'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyVmMaintenancePolicyMaintenanceWindow\n        attr_reader :daily_maintenance_window\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @daily_maintenance_window = GoogleInSpec::Compute::Property::ResourcePolicyVmMaintenancePolicyMaintenanceWindowDailyMaintenanceWindow.new(args['dailyMaintenanceWindow'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyVmMaintenancePolicyMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window_daily_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ResourcePolicyVmMaintenancePolicyMaintenanceWindowDailyMaintenanceWindow\n        attr_reader :days_in_cycle\n\n        attr_reader :start_time\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @days_in_cycle = args['daysInCycle']\n          @start_time = args['startTime']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ResourcePolicyVmMaintenancePolicyMaintenanceWindowDailyMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/router_bgp.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/router_bgp_advertised_ip_ranges'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterBgp\n        attr_reader :asn\n\n        attr_reader :advertise_mode\n\n        attr_reader :advertised_groups\n\n        attr_reader :advertised_ip_ranges\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @asn = args['asn']\n          @advertise_mode = args['advertiseMode']\n          @advertised_groups = args['advertisedGroups']\n          @advertised_ip_ranges = GoogleInSpec::Compute::Property::RouterBgpAdvertisedIpRangesArray.parse(args['advertisedIpRanges'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterBgp\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/router_bgp_advertised_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterBgpAdvertisedIpRanges\n        attr_reader :range\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @range = args['range']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterBgpAdvertisedIpRanges\"\n        end\n      end\n\n      class RouterBgpAdvertisedIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RouterBgpAdvertisedIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RouterBgpAdvertisedIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/routernat_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterNatLogConfig\n        attr_reader :enable\n\n        attr_reader :filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @filter = args['filter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterNatLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/routernat_subnetwork.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class RouterNatSubnetwork\n        attr_reader :name\n\n        attr_reader :source_ip_ranges_to_nat\n\n        attr_reader :secondary_ip_range_names\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @source_ip_ranges_to_nat = args['sourceIpRangesToNat']\n          @secondary_ip_range_names = args['secondaryIpRangeNames']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RouterNatSubnetwork\"\n        end\n      end\n\n      class RouterNatSubnetworkArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return RouterNatSubnetwork.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| RouterNatSubnetwork.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/securitypolicy_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/securitypolicy_rules_match'\nrequire 'google/compute/property/securitypolicy_rules_match_config'\nrequire 'google/compute/property/securitypolicy_rules_match_expr'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SecurityPolicyRules\n        attr_reader :description\n\n        attr_reader :priority\n\n        attr_reader :action\n\n        attr_reader :preview\n\n        attr_reader :match\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @priority = args['priority']\n          @action = args['action']\n          @preview = args['preview']\n          @match = GoogleInSpec::Compute::Property::SecurityPolicyRulesMatch.new(args['match'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecurityPolicyRules\"\n        end\n      end\n\n      class SecurityPolicyRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SecurityPolicyRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SecurityPolicyRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/securitypolicy_rules_match.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/securitypolicy_rules_match_config'\nrequire 'google/compute/property/securitypolicy_rules_match_expr'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SecurityPolicyRulesMatch\n        attr_reader :description\n\n        attr_reader :expr\n\n        attr_reader :versioned_expr\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @expr = GoogleInSpec::Compute::Property::SecurityPolicyRulesMatchExpr.new(args['expr'], to_s)\n          @versioned_expr = args['versionedExpr']\n          @config = GoogleInSpec::Compute::Property::SecurityPolicyRulesMatchConfig.new(args['config'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecurityPolicyRulesMatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/securitypolicy_rules_match_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SecurityPolicyRulesMatchConfig\n        attr_reader :src_ip_ranges\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @src_ip_ranges = args['srcIpRanges']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecurityPolicyRulesMatchConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/securitypolicy_rules_match_expr.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SecurityPolicyRulesMatchExpr\n        attr_reader :expression\n\n        attr_reader :title\n\n        attr_reader :description\n\n        attr_reader :location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expression = args['expression']\n          @title = args['title']\n          @description = args['description']\n          @location = args['location']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecurityPolicyRulesMatchExpr\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/serviceattachment_connected_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ServiceAttachmentConnectedEndpoints\n        attr_reader :status\n\n        attr_reader :psc_connection_id\n\n        attr_reader :endpoint\n\n        attr_reader :consumer_network\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @status = args['status']\n          @psc_connection_id = args['pscConnectionId']\n          @endpoint = args['endpoint']\n          @consumer_network = args['consumerNetwork']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceAttachmentConnectedEndpoints\"\n        end\n      end\n\n      class ServiceAttachmentConnectedEndpointsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceAttachmentConnectedEndpoints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceAttachmentConnectedEndpoints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/serviceattachment_consumer_accept_lists.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ServiceAttachmentConsumerAcceptLists\n        attr_reader :project_id_or_num\n\n        attr_reader :network_url\n\n        attr_reader :connection_limit\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id_or_num = args['projectIdOrNum']\n          @network_url = args['networkUrl']\n          @connection_limit = args['connectionLimit']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceAttachmentConsumerAcceptLists\"\n        end\n      end\n\n      class ServiceAttachmentConsumerAcceptListsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceAttachmentConsumerAcceptLists.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceAttachmentConsumerAcceptLists.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/serviceattachment_psc_service_attachment_id.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ServiceAttachmentPscServiceAttachmentId\n        attr_reader :high\n\n        attr_reader :low\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @high = args['high']\n          @low = args['low']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceAttachmentPscServiceAttachmentId\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/snapshot_snapshot_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SnapshotSnapshotEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :sha256\n\n        attr_reader :kms_key_name\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @sha256 = args['sha256']\n          @kms_key_name = args['kmsKeyName']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SnapshotSnapshotEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/snapshot_source_disk_encryption_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SnapshotSourceDiskEncryptionKey\n        attr_reader :raw_key\n\n        attr_reader :kms_key_name\n\n        attr_reader :kms_key_service_account\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_key = args['rawKey']\n          @kms_key_name = args['kmsKeyName']\n          @kms_key_service_account = args['kmsKeyServiceAccount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SnapshotSourceDiskEncryptionKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/sslpolicy_warnings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SslPolicyWarnings\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SslPolicyWarnings\"\n        end\n      end\n\n      class SslPolicyWarningsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SslPolicyWarnings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SslPolicyWarnings.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/subnetwork_log_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SubnetworkLogConfig\n        attr_reader :enable\n\n        attr_reader :aggregation_interval\n\n        attr_reader :flow_sampling\n\n        attr_reader :metadata\n\n        attr_reader :metadata_fields\n\n        attr_reader :filter_expr\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable = args['enable']\n          @aggregation_interval = args['aggregationInterval']\n          @flow_sampling = args['flowSampling']\n          @metadata = args['metadata']\n          @metadata_fields = args['metadataFields']\n          @filter_expr = args['filterExpr']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubnetworkLogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/subnetwork_secondary_ip_ranges.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class SubnetworkSecondaryIpRanges\n        attr_reader :range_name\n\n        attr_reader :ip_cidr_range\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @range_name = args['rangeName']\n          @ip_cidr_range = args['ipCidrRange']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubnetworkSecondaryIpRanges\"\n        end\n      end\n\n      class SubnetworkSecondaryIpRangesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SubnetworkSecondaryIpRanges.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SubnetworkSecondaryIpRanges.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/targetvpngateway_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class TargetVpnGatewayLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TargetVpnGatewayLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_cors_policy'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/urlmap_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/urlmap_default_route_action_retry_policy'\nrequire 'google/compute/property/urlmap_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/urlmap_default_route_action_timeout'\nrequire 'google/compute/property/urlmap_default_route_action_url_rewrite'\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteAction\n        attr_reader :weighted_backend_services\n\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @weighted_backend_services = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionWeightedBackendServicesArray.parse(args['weightedBackendServices'], to_s)\n          @url_rewrite = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_weighted_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action'\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionWeightedBackendServices\n        attr_reader :backend_service\n\n        attr_reader :weight\n\n        attr_reader :header_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n          @weight = args['weight']\n          @header_action = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionWeightedBackendServicesHeaderAction.new(args['headerAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionWeightedBackendServices\"\n        end\n      end\n\n      class UrlMapDefaultRouteActionWeightedBackendServicesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapDefaultRouteActionWeightedBackendServices.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapDefaultRouteActionWeightedBackendServices.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionWeightedBackendServicesHeaderAction\n        attr_reader :request_headers_to_remove\n\n        attr_reader :request_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @request_headers_to_add = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionWeightedBackendServicesHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_route_action_weighted_backend_services_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapDefaultRouteActionWeightedBackendServicesHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_default_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapDefaultUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :https_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @https_redirect = args['httpsRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapDefaultUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapHeaderAction\n        attr_reader :request_headers_to_add\n\n        attr_reader :request_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_add = GoogleInSpec::Compute::Property::UrlMapHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::UrlMapHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class UrlMapHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class UrlMapHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_host_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapHostRules\n        attr_reader :description\n\n        attr_reader :hosts\n\n        attr_reader :path_matcher\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @hosts = args['hosts']\n          @path_matcher = args['pathMatcher']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapHostRules\"\n        end\n      end\n\n      class UrlMapHostRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapHostRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapHostRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_cors_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_retry_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_timeout'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_url_rewrite'\nrequire 'google/compute/property/urlmap_path_matchers_default_url_redirect'\nrequire 'google/compute/property/urlmap_path_matchers_header_action'\nrequire 'google/compute/property/urlmap_path_matchers_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_path_matchers_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchers\n        attr_reader :default_service\n\n        attr_reader :description\n\n        attr_reader :header_action\n\n        attr_reader :name\n\n        attr_reader :default_url_redirect\n\n        attr_reader :default_route_action\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @default_service = args['defaultService']\n          @description = args['description']\n          @header_action = GoogleInSpec::Compute::Property::UrlMapPathMatchersHeaderAction.new(args['headerAction'], to_s)\n          @name = args['name']\n          @default_url_redirect = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultUrlRedirect.new(args['defaultUrlRedirect'], to_s)\n          @default_route_action = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteAction.new(args['defaultRouteAction'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchers\"\n        end\n      end\n\n      class UrlMapPathMatchersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapPathMatchers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapPathMatchers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_cors_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_retry_policy'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_timeout'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_url_rewrite'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteAction\n        attr_reader :url_rewrite\n\n        attr_reader :timeout\n\n        attr_reader :retry_policy\n\n        attr_reader :request_mirror_policy\n\n        attr_reader :cors_policy\n\n        attr_reader :fault_injection_policy\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url_rewrite = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionUrlRewrite.new(args['urlRewrite'], to_s)\n          @timeout = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionTimeout.new(args['timeout'], to_s)\n          @retry_policy = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionRetryPolicy.new(args['retryPolicy'], to_s)\n          @request_mirror_policy = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy.new(args['requestMirrorPolicy'], to_s)\n          @cors_policy = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionCorsPolicy.new(args['corsPolicy'], to_s)\n          @fault_injection_policy = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy.new(args['faultInjectionPolicy'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_cors_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionCorsPolicy\n        attr_reader :allow_origins\n\n        attr_reader :allow_origin_regexes\n\n        attr_reader :allow_methods\n\n        attr_reader :allow_headers\n\n        attr_reader :expose_headers\n\n        attr_reader :max_age\n\n        attr_reader :allow_credentials\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allow_origins = args['allowOrigins']\n          @allow_origin_regexes = args['allowOriginRegexes']\n          @allow_methods = args['allowMethods']\n          @allow_headers = args['allowHeaders']\n          @expose_headers = args['exposeHeaders']\n          @max_age = args['maxAge']\n          @allow_credentials = args['allowCredentials']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionCorsPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy\n        attr_reader :delay\n\n        attr_reader :abort\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @delay = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay.new(args['delay'], to_s)\n          @abort = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort.new(args['abort'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_abort.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort\n        attr_reader :http_status\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_status = args['httpStatus']\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyAbort\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay\n        attr_reader :fixed_delay\n\n        attr_reader :percentage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_delay = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay.new(args['fixedDelay'], to_s)\n          @percentage = args['percentage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_fault_injection_policy_delay_fixed_delay.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionFaultInjectionPolicyDelayFixedDelay\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_request_mirror_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy\n        attr_reader :backend_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backend_service = args['backendService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionRequestMirrorPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_default_route_action_retry_policy_per_try_timeout'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionRetryPolicy\n        attr_reader :retry_conditions\n\n        attr_reader :num_retries\n\n        attr_reader :per_try_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @retry_conditions = args['retryConditions']\n          @num_retries = args['numRetries']\n          @per_try_timeout = GoogleInSpec::Compute::Property::UrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout.new(args['perTryTimeout'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_retry_policy_per_try_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionRetryPolicyPerTryTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_timeout.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionTimeout\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionTimeout\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_route_action_url_rewrite.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultRouteActionUrlRewrite\n        attr_reader :path_prefix_rewrite\n\n        attr_reader :host_rewrite\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_prefix_rewrite = args['pathPrefixRewrite']\n          @host_rewrite = args['hostRewrite']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultRouteActionUrlRewrite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_default_url_redirect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersDefaultUrlRedirect\n        attr_reader :host_redirect\n\n        attr_reader :https_redirect\n\n        attr_reader :path_redirect\n\n        attr_reader :prefix_redirect\n\n        attr_reader :redirect_response_code\n\n        attr_reader :strip_query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @host_redirect = args['hostRedirect']\n          @https_redirect = args['httpsRedirect']\n          @path_redirect = args['pathRedirect']\n          @prefix_redirect = args['prefixRedirect']\n          @redirect_response_code = args['redirectResponseCode']\n          @strip_query = args['stripQuery']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersDefaultUrlRedirect\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_header_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/compute/property/urlmap_path_matchers_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_path_matchers_header_action_response_headers_to_add'\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersHeaderAction\n        attr_reader :request_headers_to_add\n\n        attr_reader :request_headers_to_remove\n\n        attr_reader :response_headers_to_add\n\n        attr_reader :response_headers_to_remove\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @request_headers_to_add = GoogleInSpec::Compute::Property::UrlMapPathMatchersHeaderActionRequestHeadersToAddArray.parse(args['requestHeadersToAdd'], to_s)\n          @request_headers_to_remove = args['requestHeadersToRemove']\n          @response_headers_to_add = GoogleInSpec::Compute::Property::UrlMapPathMatchersHeaderActionResponseHeadersToAddArray.parse(args['responseHeadersToAdd'], to_s)\n          @response_headers_to_remove = args['responseHeadersToRemove']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersHeaderAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_header_action_request_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersHeaderActionRequestHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersHeaderActionRequestHeadersToAdd\"\n        end\n      end\n\n      class UrlMapPathMatchersHeaderActionRequestHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapPathMatchersHeaderActionRequestHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapPathMatchersHeaderActionRequestHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_path_matchers_header_action_response_headers_to_add.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapPathMatchersHeaderActionResponseHeadersToAdd\n        attr_reader :header_name\n\n        attr_reader :header_value\n\n        attr_reader :replace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @header_name = args['headerName']\n          @header_value = args['headerValue']\n          @replace = args['replace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapPathMatchersHeaderActionResponseHeadersToAdd\"\n        end\n      end\n\n      class UrlMapPathMatchersHeaderActionResponseHeadersToAddArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapPathMatchersHeaderActionResponseHeadersToAdd.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapPathMatchersHeaderActionResponseHeadersToAdd.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/urlmap_tests.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class UrlMapTests\n        attr_reader :description\n\n        attr_reader :host\n\n        attr_reader :path\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @description = args['description']\n          @host = args['host']\n          @path = args['path']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} UrlMapTests\"\n        end\n      end\n\n      class UrlMapTestsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return UrlMapTests.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| UrlMapTests.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/vpngateway_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class VpnGatewayLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} VpnGatewayLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/vpngateway_vpn_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class VpnGatewayVpnInterfaces\n        attr_reader :id\n\n        attr_reader :ip_address\n\n        attr_reader :interconnect_attachment\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @ip_address = args['ipAddress']\n          @interconnect_attachment = args['interconnectAttachment']\n        end\n\n        def to_s\n          \"#{@parent_identifier} VpnGatewayVpnInterfaces\"\n        end\n      end\n\n      class VpnGatewayVpnInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return VpnGatewayVpnInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| VpnGatewayVpnInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/compute/property/zone_deprecated.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Compute\n    module Property\n      class ZoneDeprecated\n        attr_reader :deleted\n\n        attr_reader :deprecated\n\n        attr_reader :obsolete\n\n        attr_reader :replacement\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deleted = parse_time_string(args['deleted'])\n          @deprecated = parse_time_string(args['deprecated'])\n          @obsolete = parse_time_string(args['obsolete'])\n          @replacement = args['replacement']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ZoneDeprecated\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/cluster_addons_config_gce_persistent_disk_csi_driver_config'\nrequire 'google/container/property/cluster_addons_config_horizontal_pod_autoscaling'\nrequire 'google/container/property/cluster_addons_config_http_load_balancing'\nrequire 'google/container/property/cluster_addons_config_kubernetes_dashboard'\nrequire 'google/container/property/cluster_addons_config_network_policy_config'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfig\n        attr_reader :http_load_balancing\n\n        attr_reader :horizontal_pod_autoscaling\n\n        attr_reader :kubernetes_dashboard\n\n        attr_reader :network_policy_config\n\n        attr_reader :gce_persistent_disk_csi_driver_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_load_balancing = GoogleInSpec::Container::Property::ClusterAddonsConfigHttpLoadBalancing.new(args['httpLoadBalancing'], to_s)\n          @horizontal_pod_autoscaling = GoogleInSpec::Container::Property::ClusterAddonsConfigHorizontalPodAutoscaling.new(args['horizontalPodAutoscaling'], to_s)\n          @kubernetes_dashboard = GoogleInSpec::Container::Property::ClusterAddonsConfigKubernetesDashboard.new(args['kubernetesDashboard'], to_s)\n          @network_policy_config = GoogleInSpec::Container::Property::ClusterAddonsConfigNetworkPolicyConfig.new(args['networkPolicyConfig'], to_s)\n          @gce_persistent_disk_csi_driver_config = GoogleInSpec::Container::Property::ClusterAddonsConfigGcePersistentDiskCsiDriverConfig.new(args['gcePersistentDiskCsiDriverConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config_gce_persistent_disk_csi_driver_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfigGcePersistentDiskCsiDriverConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfigGcePersistentDiskCsiDriverConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config_horizontal_pod_autoscaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfigHorizontalPodAutoscaling\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfigHorizontalPodAutoscaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config_http_load_balancing.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfigHttpLoadBalancing\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfigHttpLoadBalancing\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config_kubernetes_dashboard.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfigKubernetesDashboard\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfigKubernetesDashboard\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_addons_config_network_policy_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterAddonsConfigNetworkPolicyConfig\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterAddonsConfigNetworkPolicyConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_binary_authorization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterBinaryAuthorization\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterBinaryAuthorization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterConditions\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConditions\"\n        end\n      end\n\n      class ClusterConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_database_encryption.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterDatabaseEncryption\n        attr_reader :state\n\n        attr_reader :key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @key_name = args['keyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterDatabaseEncryption\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_default_max_pods_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterDefaultMaxPodsConstraint\n        attr_reader :max_pods_per_node\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_pods_per_node = args['maxPodsPerNode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterDefaultMaxPodsConstraint\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_fleet.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterFleet\n        attr_reader :project\n\n        attr_reader :membership\n\n        attr_reader :pre_registered\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project = args['project']\n          @membership = args['membership']\n          @pre_registered = args['preRegistered']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterFleet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_ip_allocation_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterIpAllocationPolicy\n        attr_reader :use_ip_aliases\n\n        attr_reader :create_subnetwork\n\n        attr_reader :subnetwork_name\n\n        attr_reader :cluster_secondary_range_name\n\n        attr_reader :services_secondary_range_name\n\n        attr_reader :cluster_ipv4_cidr_block\n\n        attr_reader :node_ipv4_cidr_block\n\n        attr_reader :services_ipv4_cidr_block\n\n        attr_reader :tpu_ipv4_cidr_block\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @use_ip_aliases = args['useIpAliases']\n          @create_subnetwork = args['createSubnetwork']\n          @subnetwork_name = args['subnetworkName']\n          @cluster_secondary_range_name = args['clusterSecondaryRangeName']\n          @services_secondary_range_name = args['servicesSecondaryRangeName']\n          @cluster_ipv4_cidr_block = args['clusterIpv4CidrBlock']\n          @node_ipv4_cidr_block = args['nodeIpv4CidrBlock']\n          @services_ipv4_cidr_block = args['servicesIpv4CidrBlock']\n          @tpu_ipv4_cidr_block = args['tpuIpv4CidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterIpAllocationPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_legacy_abac.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterLegacyAbac\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterLegacyAbac\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_master_auth.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/cluster_master_auth_client_certificate_config'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterMasterAuth\n        attr_reader :username\n\n        attr_reader :password\n\n        attr_reader :client_certificate_config\n\n        attr_reader :cluster_ca_certificate\n\n        attr_reader :client_certificate\n\n        attr_reader :client_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @username = args['username']\n          @password = args['password']\n          @client_certificate_config = GoogleInSpec::Container::Property::ClusterMasterAuthClientCertificateConfig.new(args['clientCertificateConfig'], to_s)\n          @cluster_ca_certificate = args['clusterCaCertificate']\n          @client_certificate = args['clientCertificate']\n          @client_key = args['clientKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterMasterAuth\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_master_auth_client_certificate_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterMasterAuthClientCertificateConfig\n        attr_reader :issue_client_certificate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @issue_client_certificate = args['issueClientCertificate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterMasterAuthClientCertificateConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_master_authorized_networks_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/cluster_master_authorized_networks_config_cidr_blocks'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterMasterAuthorizedNetworksConfig\n        attr_reader :enabled\n\n        attr_reader :cidr_blocks\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @cidr_blocks = GoogleInSpec::Container::Property::ClusterMasterAuthorizedNetworksConfigCidrBlocksArray.parse(args['cidrBlocks'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterMasterAuthorizedNetworksConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_master_authorized_networks_config_cidr_blocks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterMasterAuthorizedNetworksConfigCidrBlocks\n        attr_reader :display_name\n\n        attr_reader :cidr_block\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @display_name = args['displayName']\n          @cidr_block = args['cidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterMasterAuthorizedNetworksConfigCidrBlocks\"\n        end\n      end\n\n      class ClusterMasterAuthorizedNetworksConfigCidrBlocksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterMasterAuthorizedNetworksConfigCidrBlocks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterMasterAuthorizedNetworksConfigCidrBlocks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_network_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNetworkConfig\n        attr_reader :enable_intra_node_visibility\n\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :default_snat_status\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_intra_node_visibility = args['enableIntraNodeVisibility']\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @default_snat_status = args['defaultSnatStatus']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNetworkConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_network_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNetworkPolicy\n        attr_reader :provider\n\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @provider = args['provider']\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNetworkPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_node_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/cluster_node_config_accelerators'\nrequire 'google/container/property/cluster_node_config_shielded_instance_config'\nrequire 'google/container/property/cluster_node_config_taints'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNodeConfig\n        attr_reader :machine_type\n\n        attr_reader :disk_size_gb\n\n        attr_reader :oauth_scopes\n\n        attr_reader :service_account\n\n        attr_reader :metadata\n\n        attr_reader :image_type\n\n        attr_reader :labels\n\n        attr_reader :local_ssd_count\n\n        attr_reader :tags\n\n        attr_reader :preemptible\n\n        attr_reader :accelerators\n\n        attr_reader :disk_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :taints\n\n        attr_reader :shielded_instance_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @disk_size_gb = args['diskSizeGb']\n          @oauth_scopes = args['oauthScopes']\n          @service_account = args['serviceAccount']\n          @metadata = args['metadata']\n          @image_type = args['imageType']\n          @labels = args['labels']\n          @local_ssd_count = args['localSsdCount']\n          @tags = args['tags']\n          @preemptible = args['preemptible']\n          @accelerators = GoogleInSpec::Container::Property::ClusterNodeConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @disk_type = args['diskType']\n          @min_cpu_platform = args['minCpuPlatform']\n          @taints = GoogleInSpec::Container::Property::ClusterNodeConfigTaintsArray.parse(args['taints'], to_s)\n          @shielded_instance_config = GoogleInSpec::Container::Property::ClusterNodeConfigShieldedInstanceConfig.new(args['shieldedInstanceConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNodeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_node_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNodeConfigAccelerators\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNodeConfigAccelerators\"\n        end\n      end\n\n      class ClusterNodeConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterNodeConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterNodeConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_node_config_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNodeConfigShieldedInstanceConfig\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = args['enableSecureBoot']\n          @enable_integrity_monitoring = args['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNodeConfigShieldedInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_node_config_taints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNodeConfigTaints\n        attr_reader :key\n\n        attr_reader :value\n\n        attr_reader :effect\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n          @effect = args['effect']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNodeConfigTaints\"\n        end\n      end\n\n      class ClusterNodeConfigTaintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterNodeConfigTaints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterNodeConfigTaints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_node_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterNodePools\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterNodePools\"\n        end\n      end\n\n      class ClusterNodePoolsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterNodePools.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterNodePools.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_pod_security_policy_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterPodSecurityPolicyConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterPodSecurityPolicyConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_private_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterPrivateClusterConfig\n        attr_reader :enable_private_nodes\n\n        attr_reader :enable_private_endpoint\n\n        attr_reader :master_ipv4_cidr_block\n\n        attr_reader :private_endpoint\n\n        attr_reader :public_endpoint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_private_nodes = args['enablePrivateNodes']\n          @enable_private_endpoint = args['enablePrivateEndpoint']\n          @master_ipv4_cidr_block = args['masterIpv4CidrBlock']\n          @private_endpoint = args['privateEndpoint']\n          @public_endpoint = args['publicEndpoint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterPrivateClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_release_channel.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterReleaseChannel\n        attr_reader :channel\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @channel = args['channel']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterReleaseChannel\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/cluster_shielded_nodes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ClusterShieldedNodes\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterShieldedNodes\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_autoscaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolAutoscaling\n        attr_reader :enabled\n\n        attr_reader :min_node_count\n\n        attr_reader :max_node_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @min_node_count = args['minNodeCount']\n          @max_node_count = args['maxNodeCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolAutoscaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConditions\n        attr_reader :code\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConditions\"\n        end\n      end\n\n      class NodePoolConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NodePoolConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NodePoolConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/nodepool_config_accelerators'\nrequire 'google/container/property/nodepool_config_shielded_instance_config'\nrequire 'google/container/property/nodepool_config_taints'\nrequire 'google/container/property/nodepool_config_workload_meta_config'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConfig\n        attr_reader :machine_type\n\n        attr_reader :disk_size_gb\n\n        attr_reader :oauth_scopes\n\n        attr_reader :service_account\n\n        attr_reader :metadata\n\n        attr_reader :image_type\n\n        attr_reader :labels\n\n        attr_reader :local_ssd_count\n\n        attr_reader :tags\n\n        attr_reader :preemptible\n\n        attr_reader :accelerators\n\n        attr_reader :disk_type\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :taints\n\n        attr_reader :shielded_instance_config\n\n        attr_reader :workload_meta_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @disk_size_gb = args['diskSizeGb']\n          @oauth_scopes = args['oauthScopes']\n          @service_account = args['serviceAccount']\n          @metadata = args['metadata']\n          @image_type = args['imageType']\n          @labels = args['labels']\n          @local_ssd_count = args['localSsdCount']\n          @tags = args['tags']\n          @preemptible = args['preemptible']\n          @accelerators = GoogleInSpec::Container::Property::NodePoolConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @disk_type = args['diskType']\n          @min_cpu_platform = args['minCpuPlatform']\n          @taints = GoogleInSpec::Container::Property::NodePoolConfigTaintsArray.parse(args['taints'], to_s)\n          @shielded_instance_config = GoogleInSpec::Container::Property::NodePoolConfigShieldedInstanceConfig.new(args['shieldedInstanceConfig'], to_s)\n          @workload_meta_config = GoogleInSpec::Container::Property::NodePoolConfigWorkloadMetaConfig.new(args['workloadMetadataConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConfigAccelerators\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConfigAccelerators\"\n        end\n      end\n\n      class NodePoolConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NodePoolConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NodePoolConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_config_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConfigShieldedInstanceConfig\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = args['enableSecureBoot']\n          @enable_integrity_monitoring = args['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConfigShieldedInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_config_taints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConfigTaints\n        attr_reader :key\n\n        attr_reader :value\n\n        attr_reader :effect\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @value = args['value']\n          @effect = args['effect']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConfigTaints\"\n        end\n      end\n\n      class NodePoolConfigTaintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NodePoolConfigTaints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NodePoolConfigTaints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_config_workload_meta_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolConfigWorkloadMetaConfig\n        attr_reader :mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @mode = args['mode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolConfigWorkloadMetaConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_management.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/container/property/nodepool_management_upgrade_options'\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolManagement\n        attr_reader :auto_upgrade\n\n        attr_reader :auto_repair\n\n        attr_reader :upgrade_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @auto_upgrade = args['autoUpgrade']\n          @auto_repair = args['autoRepair']\n          @upgrade_options = GoogleInSpec::Container::Property::NodePoolManagementUpgradeOptions.new(args['upgradeOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolManagement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_management_upgrade_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolManagementUpgradeOptions\n        attr_reader :auto_upgrade_start_time\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @auto_upgrade_start_time = parse_time_string(args['autoUpgradeStartTime'])\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolManagementUpgradeOptions\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/nodepool_max_pods_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class NodePoolMaxPodsConstraint\n        attr_reader :max_pods_per_node\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_pods_per_node = args['maxPodsPerNode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NodePoolMaxPodsConstraint\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/container/property/serverconfig_channels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Container\n    module Property\n      class ServerConfigChannels\n        attr_reader :channel\n\n        attr_reader :default_version\n\n        attr_reader :valid_versions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @channel = args['channel']\n          @default_version = args['defaultVersion']\n          @valid_versions = args['validVersions']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServerConfigChannels\"\n        end\n      end\n\n      class ServerConfigChannelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServerConfigChannels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServerConfigChannels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_environment_debug_options'\nrequire 'google/dataflow/property/projectlocationjob_environment_debug_options_data_sampling'\nrequire 'google/dataflow/property/projectlocationjob_environment_internal_experiments'\nrequire 'google/dataflow/property/projectlocationjob_environment_sdk_pipeline_options'\nrequire 'google/dataflow/property/projectlocationjob_environment_user_agent'\nrequire 'google/dataflow/property/projectlocationjob_environment_version'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironment\n        attr_reader :temp_storage_prefix\n\n        attr_reader :cluster_manager_api_service\n\n        attr_reader :experiments\n\n        attr_reader :service_options\n\n        attr_reader :service_kms_key_name\n\n        attr_reader :worker_pools\n\n        attr_reader :user_agent\n\n        attr_reader :version\n\n        attr_reader :dataset\n\n        attr_reader :sdk_pipeline_options\n\n        attr_reader :internal_experiments\n\n        attr_reader :service_account_email\n\n        attr_reader :flex_resource_scheduling_goal\n\n        attr_reader :worker_region\n\n        attr_reader :worker_zone\n\n        attr_reader :shuffle_mode\n\n        attr_reader :debug_options\n\n        attr_reader :use_streaming_engine_resource_based_billing\n\n        attr_reader :streaming_mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @temp_storage_prefix = args['tempStoragePrefix']\n          @cluster_manager_api_service = args['clusterManagerApiService']\n          @experiments = args['experiments']\n          @service_options = args['serviceOptions']\n          @service_kms_key_name = args['serviceKmsKeyName']\n          @worker_pools = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsArray.parse(args['workerPools'], to_s)\n          @user_agent = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentUserAgent.new(args['userAgent'], to_s)\n          @version = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentVersion.new(args['version'], to_s)\n          @dataset = args['dataset']\n          @sdk_pipeline_options = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentSdkPipelineOptions.new(args['sdkPipelineOptions'], to_s)\n          @internal_experiments = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentInternalExperiments.new(args['internalExperiments'], to_s)\n          @service_account_email = args['serviceAccountEmail']\n          @flex_resource_scheduling_goal = args['flexResourceSchedulingGoal']\n          @worker_region = args['workerRegion']\n          @worker_zone = args['workerZone']\n          @shuffle_mode = args['shuffleMode']\n          @debug_options = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentDebugOptions.new(args['debugOptions'], to_s)\n          @use_streaming_engine_resource_based_billing = args['useStreamingEngineResourceBasedBilling']\n          @streaming_mode = args['streamingMode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironment\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_debug_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_environment_debug_options_data_sampling'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentDebugOptions\n        attr_reader :enable_hot_key_logging\n\n        attr_reader :data_sampling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_hot_key_logging = args['enableHotKeyLogging']\n          @data_sampling = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentDebugOptionsDataSampling.new(args['dataSampling'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentDebugOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_debug_options_data_sampling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentDebugOptionsDataSampling\n        attr_reader :behaviors\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @behaviors = args['behaviors']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentDebugOptionsDataSampling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_internal_experiments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentInternalExperiments\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentInternalExperiments\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_sdk_pipeline_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentSdkPipelineOptions\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentSdkPipelineOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_user_agent.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentUserAgent\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentUserAgent\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentVersion\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentVersion\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_autoscaling_settings'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_data_disks'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_metadata'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_packages'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_pool_args'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_sdk_harness_container_images'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_taskrunner_settings'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_taskrunner_settings_parallel_worker_settings'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPools\n        attr_reader :kind\n\n        attr_reader :num_workers\n\n        attr_reader :packages\n\n        attr_reader :default_package_set\n\n        attr_reader :machine_type\n\n        attr_reader :teardown_policy\n\n        attr_reader :disk_size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :disk_source_image\n\n        attr_reader :zone\n\n        attr_reader :taskrunner_settings\n\n        attr_reader :on_host_maintenance\n\n        attr_reader :data_disks\n\n        attr_reader :metadata\n\n        attr_reader :autoscaling_settings\n\n        attr_reader :pool_args\n\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :worker_harness_container_image\n\n        attr_reader :num_threads_per_worker\n\n        attr_reader :ip_configuration\n\n        attr_reader :sdk_harness_container_images\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @num_workers = args['numWorkers']\n          @packages = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsPackagesArray.parse(args['packages'], to_s)\n          @default_package_set = args['defaultPackageSet']\n          @machine_type = args['machineType']\n          @teardown_policy = args['teardownPolicy']\n          @disk_size_gb = args['diskSizeGb']\n          @disk_type = args['diskType']\n          @disk_source_image = args['diskSourceImage']\n          @zone = args['zone']\n          @taskrunner_settings = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettings.new(args['taskrunnerSettings'], to_s)\n          @on_host_maintenance = args['onHostMaintenance']\n          @data_disks = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsDataDisksArray.parse(args['dataDisks'], to_s)\n          @metadata = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsMetadata.new(args['metadata'], to_s)\n          @autoscaling_settings = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsAutoscalingSettings.new(args['autoscalingSettings'], to_s)\n          @pool_args = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsPoolArgs.new(args['poolArgs'], to_s)\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @worker_harness_container_image = args['workerHarnessContainerImage']\n          @num_threads_per_worker = args['numThreadsPerWorker']\n          @ip_configuration = args['ipConfiguration']\n          @sdk_harness_container_images = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImagesArray.parse(args['sdkHarnessContainerImages'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPools\"\n        end\n      end\n\n      class ProjectLocationJobEnvironmentWorkerPoolsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobEnvironmentWorkerPools.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobEnvironmentWorkerPools.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_autoscaling_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsAutoscalingSettings\n        attr_reader :algorithm\n\n        attr_reader :max_num_workers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @algorithm = args['algorithm']\n          @max_num_workers = args['maxNumWorkers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsAutoscalingSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_data_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsDataDisks\n        attr_reader :size_gb\n\n        attr_reader :disk_type\n\n        attr_reader :mount_point\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @size_gb = args['sizeGb']\n          @disk_type = args['diskType']\n          @mount_point = args['mountPoint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsDataDisks\"\n        end\n      end\n\n      class ProjectLocationJobEnvironmentWorkerPoolsDataDisksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobEnvironmentWorkerPoolsDataDisks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobEnvironmentWorkerPoolsDataDisks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_packages.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsPackages\n        attr_reader :name\n\n        attr_reader :location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @location = args['location']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsPackages\"\n        end\n      end\n\n      class ProjectLocationJobEnvironmentWorkerPoolsPackagesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobEnvironmentWorkerPoolsPackages.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobEnvironmentWorkerPoolsPackages.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_pool_args.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsPoolArgs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsPoolArgs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_sdk_harness_container_images.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImages\n        attr_reader :container_image\n\n        attr_reader :use_single_core_per_container\n\n        attr_reader :environment_id\n\n        attr_reader :capabilities\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_image = args['containerImage']\n          @use_single_core_per_container = args['useSingleCorePerContainer']\n          @environment_id = args['environmentId']\n          @capabilities = args['capabilities']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImages\"\n        end\n      end\n\n      class ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImagesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImages.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobEnvironmentWorkerPoolsSdkHarnessContainerImages.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_taskrunner_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools_taskrunner_settings_parallel_worker_settings'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettings\n        attr_reader :task_user\n\n        attr_reader :task_group\n\n        attr_reader :oauth_scopes\n\n        attr_reader :base_url\n\n        attr_reader :dataflow_api_version\n\n        attr_reader :parallel_worker_settings\n\n        attr_reader :base_task_dir\n\n        attr_reader :continue_on_exception\n\n        attr_reader :log_to_serialconsole\n\n        attr_reader :alsologtostderr\n\n        attr_reader :log_upload_location\n\n        attr_reader :log_dir\n\n        attr_reader :temp_storage_prefix\n\n        attr_reader :harness_command\n\n        attr_reader :workflow_file_name\n\n        attr_reader :commandlines_file_name\n\n        attr_reader :vm_id\n\n        attr_reader :language_hint\n\n        attr_reader :streaming_worker_main_class\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @task_user = args['taskUser']\n          @task_group = args['taskGroup']\n          @oauth_scopes = args['oauthScopes']\n          @base_url = args['baseUrl']\n          @dataflow_api_version = args['dataflowApiVersion']\n          @parallel_worker_settings = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettingsParallelWorkerSettings.new(args['parallelWorkerSettings'], to_s)\n          @base_task_dir = args['baseTaskDir']\n          @continue_on_exception = args['continueOnException']\n          @log_to_serialconsole = args['logToSerialconsole']\n          @alsologtostderr = args['alsologtostderr']\n          @log_upload_location = args['logUploadLocation']\n          @log_dir = args['logDir']\n          @temp_storage_prefix = args['tempStoragePrefix']\n          @harness_command = args['harnessCommand']\n          @workflow_file_name = args['workflowFileName']\n          @commandlines_file_name = args['commandlinesFileName']\n          @vm_id = args['vmId']\n          @language_hint = args['languageHint']\n          @streaming_worker_main_class = args['streamingWorkerMainClass']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_environment_worker_pools_taskrunner_settings_parallel_worker_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettingsParallelWorkerSettings\n        attr_reader :base_url\n\n        attr_reader :reporting_enabled\n\n        attr_reader :service_path\n\n        attr_reader :shuffle_service_path\n\n        attr_reader :worker_id\n\n        attr_reader :temp_storage_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @base_url = args['baseUrl']\n          @reporting_enabled = args['reportingEnabled']\n          @service_path = args['servicePath']\n          @shuffle_service_path = args['shuffleServicePath']\n          @worker_id = args['workerId']\n          @temp_storage_prefix = args['tempStoragePrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobEnvironmentWorkerPoolsTaskrunnerSettingsParallelWorkerSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_execution_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_execution_info_stages'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobExecutionInfo\n        attr_reader :stages\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @stages = GoogleInSpec::Dataflow::Property::ProjectLocationJobExecutionInfoStages.new(args['stages'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobExecutionInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_execution_info_stages.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobExecutionInfoStages\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobExecutionInfoStages\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_big_table_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_bigquery_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_datastore_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_file_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_pubsub_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_sdk_version'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_sdk_version_bugs'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_spanner_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_user_display_properties'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadata\n        attr_reader :sdk_version\n\n        attr_reader :spanner_details\n\n        attr_reader :bigquery_details\n\n        attr_reader :big_table_details\n\n        attr_reader :pubsub_details\n\n        attr_reader :file_details\n\n        attr_reader :datastore_details\n\n        attr_reader :user_display_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sdk_version = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataSdkVersion.new(args['sdkVersion'], to_s)\n          @spanner_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataSpannerDetailsArray.parse(args['spannerDetails'], to_s)\n          @bigquery_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataBigqueryDetailsArray.parse(args['bigqueryDetails'], to_s)\n          @big_table_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataBigTableDetailsArray.parse(args['bigTableDetails'], to_s)\n          @pubsub_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataPubsubDetailsArray.parse(args['pubsubDetails'], to_s)\n          @file_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataFileDetailsArray.parse(args['fileDetails'], to_s)\n          @datastore_details = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataDatastoreDetailsArray.parse(args['datastoreDetails'], to_s)\n          @user_display_properties = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataUserDisplayProperties.new(args['userDisplayProperties'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_big_table_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataBigTableDetails\n        attr_reader :project_id\n\n        attr_reader :instance_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @instance_id = args['instanceId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataBigTableDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataBigTableDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataBigTableDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataBigTableDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_bigquery_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataBigqueryDetails\n        attr_reader :table\n\n        attr_reader :dataset\n\n        attr_reader :project_id\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @table = args['table']\n          @dataset = args['dataset']\n          @project_id = args['projectId']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataBigqueryDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataBigqueryDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataBigqueryDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataBigqueryDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_datastore_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataDatastoreDetails\n        attr_reader :namespace\n\n        attr_reader :project_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @namespace = args['namespace']\n          @project_id = args['projectId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataDatastoreDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataDatastoreDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataDatastoreDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataDatastoreDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_file_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataFileDetails\n        attr_reader :file_pattern\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @file_pattern = args['filePattern']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataFileDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataFileDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataFileDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataFileDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_pubsub_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataPubsubDetails\n        attr_reader :topic\n\n        attr_reader :subscription\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @topic = args['topic']\n          @subscription = args['subscription']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataPubsubDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataPubsubDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataPubsubDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataPubsubDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_sdk_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_sdk_version_bugs'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataSdkVersion\n        attr_reader :version\n\n        attr_reader :version_display_name\n\n        attr_reader :sdk_support_status\n\n        attr_reader :bugs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n          @version_display_name = args['versionDisplayName']\n          @sdk_support_status = args['sdkSupportStatus']\n          @bugs = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadataSdkVersionBugsArray.parse(args['bugs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataSdkVersion\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_sdk_version_bugs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataSdkVersionBugs\n        attr_reader :type\n\n        attr_reader :severity\n\n        attr_reader :uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @severity = args['severity']\n          @uri = args['uri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataSdkVersionBugs\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataSdkVersionBugsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataSdkVersionBugs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataSdkVersionBugs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_spanner_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataSpannerDetails\n        attr_reader :project_id\n\n        attr_reader :instance_id\n\n        attr_reader :database_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @instance_id = args['instanceId']\n          @database_id = args['databaseId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataSpannerDetails\"\n        end\n      end\n\n      class ProjectLocationJobJobMetadataSpannerDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobJobMetadataSpannerDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobJobMetadataSpannerDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_job_metadata_user_display_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobJobMetadataUserDisplayProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobJobMetadataUserDisplayProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_display_data'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_original_pipeline_transform'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescription\n        attr_reader :original_pipeline_transform\n\n        attr_reader :execution_pipeline_stage\n\n        attr_reader :display_data\n\n        attr_reader :step_names_hash\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @original_pipeline_transform = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionOriginalPipelineTransformArray.parse(args['originalPipelineTransform'], to_s)\n          @execution_pipeline_stage = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionExecutionPipelineStageArray.parse(args['executionPipelineStage'], to_s)\n          @display_data = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionDisplayDataArray.parse(args['displayData'], to_s)\n          @step_names_hash = args['stepNamesHash']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescription\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_display_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionDisplayData\n        attr_reader :key\n\n        attr_reader :namespace\n\n        attr_reader :str_value\n\n        attr_reader :int64_value\n\n        attr_reader :float_value\n\n        attr_reader :java_class_value\n\n        attr_reader :timestamp_value\n\n        attr_reader :duration_value\n\n        attr_reader :bool_value\n\n        attr_reader :short_str_value\n\n        attr_reader :url\n\n        attr_reader :label\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @namespace = args['namespace']\n          @str_value = args['strValue']\n          @int64_value = args['int64Value']\n          @float_value = args['floatValue']\n          @java_class_value = args['javaClassValue']\n          @timestamp_value = args['timestampValue']\n          @duration_value = args['durationValue']\n          @bool_value = args['boolValue']\n          @short_str_value = args['shortStrValue']\n          @url = args['url']\n          @label = args['label']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionDisplayData\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionDisplayDataArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionDisplayData.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionDisplayData.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_component_source'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_component_transform'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_input_source'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_output_source'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStage\n        attr_reader :name\n\n        attr_reader :id\n\n        attr_reader :kind\n\n        attr_reader :input_source\n\n        attr_reader :output_source\n\n        attr_reader :prerequisite_stage\n\n        attr_reader :component_transform\n\n        attr_reader :component_source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @id = args['id']\n          @kind = args['kind']\n          @input_source = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSourceArray.parse(args['inputSource'], to_s)\n          @output_source = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSourceArray.parse(args['outputSource'], to_s)\n          @prerequisite_stage = args['prerequisiteStage']\n          @component_transform = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransformArray.parse(args['componentTransform'], to_s)\n          @component_source = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSourceArray.parse(args['componentSource'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionExecutionPipelineStage\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionExecutionPipelineStage.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionExecutionPipelineStage.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_component_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSource\n        attr_reader :user_name\n\n        attr_reader :name\n\n        attr_reader :original_transform_or_collection\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_name = args['userName']\n          @name = args['name']\n          @original_transform_or_collection = args['originalTransformOrCollection']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSource\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSourceArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSource.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentSource.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_component_transform.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransform\n        attr_reader :user_name\n\n        attr_reader :name\n\n        attr_reader :original_transform\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_name = args['userName']\n          @name = args['name']\n          @original_transform = args['originalTransform']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransform\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransformArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransform.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionExecutionPipelineStageComponentTransform.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_input_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSource\n        attr_reader :user_name\n\n        attr_reader :name\n\n        attr_reader :original_transform_or_collection\n\n        attr_reader :size_bytes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_name = args['userName']\n          @name = args['name']\n          @original_transform_or_collection = args['originalTransformOrCollection']\n          @size_bytes = args['sizeBytes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSource\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSourceArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSource.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionExecutionPipelineStageInputSource.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage_output_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSource\n        attr_reader :user_name\n\n        attr_reader :name\n\n        attr_reader :original_transform_or_collection\n\n        attr_reader :size_bytes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_name = args['userName']\n          @name = args['name']\n          @original_transform_or_collection = args['originalTransformOrCollection']\n          @size_bytes = args['sizeBytes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSource\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSourceArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSource.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionExecutionPipelineStageOutputSource.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_original_pipeline_transform.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_original_pipeline_transform_display_data'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionOriginalPipelineTransform\n        attr_reader :kind\n\n        attr_reader :id\n\n        attr_reader :name\n\n        attr_reader :display_data\n\n        attr_reader :output_collection_name\n\n        attr_reader :input_collection_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @id = args['id']\n          @name = args['name']\n          @display_data = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayDataArray.parse(args['displayData'], to_s)\n          @output_collection_name = args['outputCollectionName']\n          @input_collection_name = args['inputCollectionName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionOriginalPipelineTransform\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionOriginalPipelineTransformArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionOriginalPipelineTransform.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionOriginalPipelineTransform.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_pipeline_description_original_pipeline_transform_display_data.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayData\n        attr_reader :key\n\n        attr_reader :namespace\n\n        attr_reader :str_value\n\n        attr_reader :int64_value\n\n        attr_reader :float_value\n\n        attr_reader :java_class_value\n\n        attr_reader :timestamp_value\n\n        attr_reader :duration_value\n\n        attr_reader :bool_value\n\n        attr_reader :short_str_value\n\n        attr_reader :url\n\n        attr_reader :label\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @namespace = args['namespace']\n          @str_value = args['strValue']\n          @int64_value = args['int64Value']\n          @float_value = args['floatValue']\n          @java_class_value = args['javaClassValue']\n          @timestamp_value = args['timestampValue']\n          @duration_value = args['durationValue']\n          @bool_value = args['boolValue']\n          @short_str_value = args['shortStrValue']\n          @url = args['url']\n          @label = args['label']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayData\"\n        end\n      end\n\n      class ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayDataArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayData.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobPipelineDescriptionOriginalPipelineTransformDisplayData.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_runtime_updatable_params.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobRuntimeUpdatableParams\n        attr_reader :max_num_workers\n\n        attr_reader :min_num_workers\n\n        attr_reader :worker_utilization_hint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_num_workers = args['maxNumWorkers']\n          @min_num_workers = args['minNumWorkers']\n          @worker_utilization_hint = args['workerUtilizationHint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobRuntimeUpdatableParams\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_stage_states.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobStageStates\n        attr_reader :execution_stage_name\n\n        attr_reader :execution_stage_state\n\n        attr_reader :current_state_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @execution_stage_name = args['executionStageName']\n          @execution_stage_state = args['executionStageState']\n          @current_state_time = args['currentStateTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobStageStates\"\n        end\n      end\n\n      class ProjectLocationJobStageStatesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobStageStates.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobStageStates.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_steps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataflow/property/projectlocationjob_steps_properties'\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobSteps\n        attr_reader :kind\n\n        attr_reader :name\n\n        attr_reader :properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @name = args['name']\n          @properties = GoogleInSpec::Dataflow::Property::ProjectLocationJobStepsProperties.new(args['properties'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobSteps\"\n        end\n      end\n\n      class ProjectLocationJobStepsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ProjectLocationJobSteps.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ProjectLocationJobSteps.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_steps_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobStepsProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobStepsProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataflow/property/projectlocationjob_transform_name_mapping.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataflow\n    module Property\n      class ProjectLocationJobTransformNameMapping\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectLocationJobTransformNameMapping\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceAccelerators\n        attr_reader :accelerator_type\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAccelerators\"\n        end\n      end\n\n      class InstanceAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_available_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceAvailableVersion\n        attr_reader :version_number\n\n        attr_reader :default_version\n\n        attr_reader :available_features\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version_number = args['versionNumber']\n          @default_version = args['defaultVersion']\n          @available_features = args['availableFeatures']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceAvailableVersion\"\n        end\n      end\n\n      class InstanceAvailableVersionArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceAvailableVersion.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceAvailableVersion.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_crypto_key_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceCryptoKeyConfig\n        attr_reader :key_reference\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key_reference = args['keyReference']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceCryptoKeyConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_event_publish_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceEventPublishConfig\n        attr_reader :enabled\n\n        attr_reader :topic\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @topic = args['topic']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceEventPublishConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_maintenance_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_exclusion_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window_window'\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceMaintenancePolicy\n        attr_reader :maintenance_window\n\n        attr_reader :maintenance_exclusion_window\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @maintenance_window = GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicyMaintenanceWindow.new(args['maintenanceWindow'], to_s)\n          @maintenance_exclusion_window = GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicyMaintenanceExclusionWindow.new(args['maintenanceExclusionWindow'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMaintenancePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_maintenance_policy_maintenance_exclusion_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceMaintenancePolicyMaintenanceExclusionWindow\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMaintenancePolicyMaintenanceExclusionWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_maintenance_policy_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window_window'\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceMaintenancePolicyMaintenanceWindow\n        attr_reader :recurring_time_window\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @recurring_time_window = GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindow.new(args['recurringTimeWindow'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMaintenancePolicyMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window_window'\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindow\n        attr_reader :window\n\n        attr_reader :recurrence\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @window = GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindowWindow.new(args['window'], to_s)\n          @recurrence = args['recurrence']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindowWindow\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMaintenancePolicyMaintenanceWindowRecurringTimeWindowWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_network_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/datafusion/property/instance_network_config_private_service_connect_config'\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceNetworkConfig\n        attr_reader :network\n\n        attr_reader :ip_allocation\n\n        attr_reader :connection_type\n\n        attr_reader :private_service_connect_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network = args['network']\n          @ip_allocation = args['ipAllocation']\n          @connection_type = args['connectionType']\n          @private_service_connect_config = GoogleInSpec::DataFusion::Property::InstanceNetworkConfigPrivateServiceConnectConfig.new(args['privateServiceConnectConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_network_config_private_service_connect_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceNetworkConfigPrivateServiceConnectConfig\n        attr_reader :network_attachment\n\n        attr_reader :unreachable_cidr_block\n\n        attr_reader :effective_unreachable_cidr_block\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network_attachment = args['networkAttachment']\n          @unreachable_cidr_block = args['unreachableCidrBlock']\n          @effective_unreachable_cidr_block = args['effectiveUnreachableCidrBlock']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworkConfigPrivateServiceConnectConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/datafusion/property/instance_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataFusion\n    module Property\n      class InstanceOptions\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_basic_algorithm.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/autoscalingpolicy_basic_algorithm_spark_standalone_config'\nrequire 'google/dataproc/property/autoscalingpolicy_basic_algorithm_yarn_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicyBasicAlgorithm\n        attr_reader :yarn_config\n\n        attr_reader :spark_standalone_config\n\n        attr_reader :cooldown_period\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @yarn_config = GoogleInSpec::Dataproc::Property::AutoscalingPolicyBasicAlgorithmYarnConfig.new(args['yarnConfig'], to_s)\n          @spark_standalone_config = GoogleInSpec::Dataproc::Property::AutoscalingPolicyBasicAlgorithmSparkStandaloneConfig.new(args['sparkStandaloneConfig'], to_s)\n          @cooldown_period = args['cooldownPeriod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicyBasicAlgorithm\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_basic_algorithm_spark_standalone_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicyBasicAlgorithmSparkStandaloneConfig\n        attr_reader :graceful_decommission_timeout\n\n        attr_reader :scale_up_factor\n\n        attr_reader :scale_down_factor\n\n        attr_reader :scale_up_min_worker_fraction\n\n        attr_reader :scale_down_min_worker_fraction\n\n        attr_reader :remove_only_idle_workers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @graceful_decommission_timeout = args['gracefulDecommissionTimeout']\n          @scale_up_factor = args['scaleUpFactor']\n          @scale_down_factor = args['scaleDownFactor']\n          @scale_up_min_worker_fraction = args['scaleUpMinWorkerFraction']\n          @scale_down_min_worker_fraction = args['scaleDownMinWorkerFraction']\n          @remove_only_idle_workers = args['removeOnlyIdleWorkers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicyBasicAlgorithmSparkStandaloneConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_basic_algorithm_yarn_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicyBasicAlgorithmYarnConfig\n        attr_reader :graceful_decommission_timeout\n\n        attr_reader :scale_up_factor\n\n        attr_reader :scale_down_factor\n\n        attr_reader :scale_up_min_worker_fraction\n\n        attr_reader :scale_down_min_worker_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @graceful_decommission_timeout = args['gracefulDecommissionTimeout']\n          @scale_up_factor = args['scaleUpFactor']\n          @scale_down_factor = args['scaleDownFactor']\n          @scale_up_min_worker_fraction = args['scaleUpMinWorkerFraction']\n          @scale_down_min_worker_fraction = args['scaleDownMinWorkerFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicyBasicAlgorithmYarnConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicyLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicyLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_secondary_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicySecondaryWorkerConfig\n        attr_reader :min_instances\n\n        attr_reader :max_instances\n\n        attr_reader :weight\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_instances = args['minInstances']\n          @max_instances = args['maxInstances']\n          @weight = args['weight']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicySecondaryWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/autoscalingpolicy_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class AutoscalingPolicyWorkerConfig\n        attr_reader :min_instances\n\n        attr_reader :max_instances\n\n        attr_reader :weight\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_instances = args['minInstances']\n          @max_instances = args['maxInstances']\n          @weight = args['weight']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AutoscalingPolicyWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_environment_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_environment_config_execution_config'\nrequire 'google/dataproc/property/batch_environment_config_peripherals_config'\nrequire 'google/dataproc/property/batch_environment_config_peripherals_config_spark_history_server_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchEnvironmentConfig\n        attr_reader :execution_config\n\n        attr_reader :peripherals_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @execution_config = GoogleInSpec::Dataproc::Property::BatchEnvironmentConfigExecutionConfig.new(args['executionConfig'], to_s)\n          @peripherals_config = GoogleInSpec::Dataproc::Property::BatchEnvironmentConfigPeripheralsConfig.new(args['peripheralsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchEnvironmentConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_environment_config_execution_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchEnvironmentConfigExecutionConfig\n        attr_reader :service_account\n\n        attr_reader :network_uri\n\n        attr_reader :subnetwork_uri\n\n        attr_reader :network_tags\n\n        attr_reader :kms_key\n\n        attr_reader :idle_ttl\n\n        attr_reader :ttl\n\n        attr_reader :staging_bucket\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_account = args['serviceAccount']\n          @network_uri = args['networkUri']\n          @subnetwork_uri = args['subnetworkUri']\n          @network_tags = args['networkTags']\n          @kms_key = args['kmsKey']\n          @idle_ttl = args['idleTtl']\n          @ttl = args['ttl']\n          @staging_bucket = args['stagingBucket']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchEnvironmentConfigExecutionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_environment_config_peripherals_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_environment_config_peripherals_config_spark_history_server_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchEnvironmentConfigPeripheralsConfig\n        attr_reader :metastore_service\n\n        attr_reader :spark_history_server_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metastore_service = args['metastoreService']\n          @spark_history_server_config = GoogleInSpec::Dataproc::Property::BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig.new(args['sparkHistoryServerConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchEnvironmentConfigPeripheralsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_environment_config_peripherals_config_spark_history_server_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig\n        attr_reader :dataproc_cluster\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataproc_cluster = args['dataprocCluster']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_pyspark_batch.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchPysparkBatch\n        attr_reader :main_python_file_uri\n\n        attr_reader :args\n\n        attr_reader :python_file_uris\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_python_file_uri = args['mainPythonFileUri']\n          @args = args['args']\n          @python_file_uris = args['pythonFileUris']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPysparkBatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_runtime_config_properties'\nrequire 'google/dataproc/property/batch_runtime_config_repository_config'\nrequire 'google/dataproc/property/batch_runtime_config_repository_config_pypi_repository_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeConfig\n        attr_reader :version\n\n        attr_reader :container_image\n\n        attr_reader :properties\n\n        attr_reader :repository_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n          @container_image = args['containerImage']\n          @properties = GoogleInSpec::Dataproc::Property::BatchRuntimeConfigProperties.new(args['properties'], to_s)\n          @repository_config = GoogleInSpec::Dataproc::Property::BatchRuntimeConfigRepositoryConfig.new(args['repositoryConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_config_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeConfigProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeConfigProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_config_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_runtime_config_repository_config_pypi_repository_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeConfigRepositoryConfig\n        attr_reader :pypi_repository_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pypi_repository_config = GoogleInSpec::Dataproc::Property::BatchRuntimeConfigRepositoryConfigPypiRepositoryConfig.new(args['pypiRepositoryConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeConfigRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_config_repository_config_pypi_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeConfigRepositoryConfigPypiRepositoryConfig\n        attr_reader :pypi_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pypi_repository = args['pypiRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeConfigRepositoryConfigPypiRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_runtime_info_approximate_usage'\nrequire 'google/dataproc/property/batch_runtime_info_current_usage'\nrequire 'google/dataproc/property/batch_runtime_info_endpoints'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeInfo\n        attr_reader :endpoints\n\n        attr_reader :output_uri\n\n        attr_reader :diagnostic_output_uri\n\n        attr_reader :approximate_usage\n\n        attr_reader :current_usage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @endpoints = GoogleInSpec::Dataproc::Property::BatchRuntimeInfoEndpoints.new(args['endpoints'], to_s)\n          @output_uri = args['outputUri']\n          @diagnostic_output_uri = args['diagnosticOutputUri']\n          @approximate_usage = GoogleInSpec::Dataproc::Property::BatchRuntimeInfoApproximateUsage.new(args['approximateUsage'], to_s)\n          @current_usage = GoogleInSpec::Dataproc::Property::BatchRuntimeInfoCurrentUsage.new(args['currentUsage'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_info_approximate_usage.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeInfoApproximateUsage\n        attr_reader :milli_dcu_seconds\n\n        attr_reader :shuffle_storage_gb_seconds\n\n        attr_reader :milli_accelerator_seconds\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @milli_dcu_seconds = args['milliDcuSeconds']\n          @shuffle_storage_gb_seconds = args['shuffleStorageGbSeconds']\n          @milli_accelerator_seconds = args['milliAcceleratorSeconds']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeInfoApproximateUsage\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_info_current_usage.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeInfoCurrentUsage\n        attr_reader :milli_dcu\n\n        attr_reader :shuffle_storage_gb\n\n        attr_reader :milli_dcu_premium\n\n        attr_reader :shuffle_storage_gb_premium\n\n        attr_reader :milli_accelerator\n\n        attr_reader :accelerator_type\n\n        attr_reader :snapshot_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @milli_dcu = args['milliDcu']\n          @shuffle_storage_gb = args['shuffleStorageGb']\n          @milli_dcu_premium = args['milliDcuPremium']\n          @shuffle_storage_gb_premium = args['shuffleStorageGbPremium']\n          @milli_accelerator = args['milliAccelerator']\n          @accelerator_type = args['acceleratorType']\n          @snapshot_time = args['snapshotTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeInfoCurrentUsage\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_runtime_info_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchRuntimeInfoEndpoints\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchRuntimeInfoEndpoints\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_spark_batch.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchSparkBatch\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchSparkBatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_spark_r_batch.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchSparkRBatch\n        attr_reader :main_r_file_uri\n\n        attr_reader :args\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_r_file_uri = args['mainRFileUri']\n          @args = args['args']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchSparkRBatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_spark_sql_batch.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/batch_spark_sql_batch_query_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchSparkSqlBatch\n        attr_reader :query_file_uri\n\n        attr_reader :query_variables\n\n        attr_reader :jar_file_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_variables = GoogleInSpec::Dataproc::Property::BatchSparkSqlBatchQueryVariables.new(args['queryVariables'], to_s)\n          @jar_file_uris = args['jarFileUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchSparkSqlBatch\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_spark_sql_batch_query_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchSparkSqlBatchQueryVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchSparkSqlBatchQueryVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/batch_state_history.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class BatchStateHistory\n        attr_reader :state\n\n        attr_reader :state_message\n\n        attr_reader :state_start_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @state_message = args['stateMessage']\n          @state_start_time = args['stateStartTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchStateHistory\"\n        end\n      end\n\n      class BatchStateHistoryArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchStateHistory.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchStateHistory.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_encryption_config'\nrequire 'google/dataproc/property/cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/cluster_config_initialization_actions'\nrequire 'google/dataproc/property/cluster_config_master_config'\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_security_config'\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/cluster_config_software_config'\nrequire 'google/dataproc/property/cluster_config_worker_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfig\n        attr_reader :config_bucket\n\n        attr_reader :gce_cluster_config\n\n        attr_reader :master_config\n\n        attr_reader :worker_config\n\n        attr_reader :secondary_worker_config\n\n        attr_reader :software_config\n\n        attr_reader :initialization_actions\n\n        attr_reader :encryption_config\n\n        attr_reader :security_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @config_bucket = args['configBucket']\n          @gce_cluster_config = GoogleInSpec::Dataproc::Property::ClusterConfigGceClusterConfig.new(args['gceClusterConfig'], to_s)\n          @master_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfig.new(args['masterConfig'], to_s)\n          @worker_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfig.new(args['workerConfig'], to_s)\n          @secondary_worker_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfig.new(args['secondaryWorkerConfig'], to_s)\n          @software_config = GoogleInSpec::Dataproc::Property::ClusterConfigSoftwareConfig.new(args['softwareConfig'], to_s)\n          @initialization_actions = GoogleInSpec::Dataproc::Property::ClusterConfigInitializationActionsArray.parse(args['initializationActions'], to_s)\n          @encryption_config = GoogleInSpec::Dataproc::Property::ClusterConfigEncryptionConfig.new(args['encryptionConfig'], to_s)\n          @security_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfig.new(args['securityConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigEncryptionConfig\n        attr_reader :gce_pd_kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gce_pd_kms_key_name = args['gcePdKmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_gce_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigGceClusterConfig\n        attr_reader :zone_uri\n\n        attr_reader :network_uri\n\n        attr_reader :subnetwork_uri\n\n        attr_reader :internal_ip_only\n\n        attr_reader :service_account_scopes\n\n        attr_reader :tags\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @zone_uri = args['zoneUri']\n          @network_uri = args['networkUri']\n          @subnetwork_uri = args['subnetworkUri']\n          @internal_ip_only = args['internalIpOnly']\n          @service_account_scopes = args['serviceAccountScopes']\n          @tags = args['tags']\n          @metadata = args['metadata']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigGceClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_initialization_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigInitializationActions\n        attr_reader :executable_file\n\n        attr_reader :execution_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @executable_file = args['executableFile']\n          @execution_timeout = args['executionTimeout']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigInitializationActions\"\n        end\n      end\n\n      class ClusterConfigInitializationActionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ClusterConfigInitializationActions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ClusterConfigInitializationActions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_master_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigMasterConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_master_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_master_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigMasterConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigMasterConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_secondary_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecondaryWorkerConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_secondary_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecondaryWorkerConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecondaryWorkerConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_security_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecurityConfig\n        attr_reader :kerberos_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kerberos_config = GoogleInSpec::Dataproc::Property::ClusterConfigSecurityConfigKerberosConfig.new(args['kerberosConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecurityConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_security_config_kerberos_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSecurityConfigKerberosConfig\n        attr_reader :enable_kerberos\n\n        attr_reader :rootprincipal_password_uri\n\n        attr_reader :kms_key_uri\n\n        attr_reader :keystore_uri\n\n        attr_reader :truststore_uri\n\n        attr_reader :key_password_uri\n\n        attr_reader :truststore_password_uri\n\n        attr_reader :cross_realm_trust_realm\n\n        attr_reader :cross_realm_trust_admin_server\n\n        attr_reader :cross_realm_trust_shared_password_uri\n\n        attr_reader :kdc_db_key_uri\n\n        attr_reader :tgt_lifetime_hours\n\n        attr_reader :realm\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_kerberos = args['enableKerberos']\n          @rootprincipal_password_uri = args['rootprincipalPasswordUri']\n          @kms_key_uri = args['kmsKeyUri']\n          @keystore_uri = args['keystoreUri']\n          @truststore_uri = args['truststoreUri']\n          @key_password_uri = args['keyPasswordUri']\n          @truststore_password_uri = args['truststorePasswordUri']\n          @cross_realm_trust_realm = args['crossRealmTrustRealm']\n          @cross_realm_trust_admin_server = args['crossRealmTrustAdminServer']\n          @cross_realm_trust_shared_password_uri = args['crossRealmTrustSharedPasswordUri']\n          @kdc_db_key_uri = args['kdcDbKeyUri']\n          @tgt_lifetime_hours = args['tgtLifetimeHours']\n          @realm = args['realm']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSecurityConfigKerberosConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_software_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigSoftwareConfig\n        attr_reader :image_version\n\n        attr_reader :properties\n\n        attr_reader :optional_components\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @image_version = args['imageVersion']\n          @properties = args['properties']\n          @optional_components = args['optionalComponents']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigSoftwareConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :managed_group_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::ClusterConfigWorkerConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/cluster_config_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class ClusterConfigWorkerConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ClusterConfigWorkerConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_driver_scheduling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobDriverSchedulingConfig\n        attr_reader :memory_mb\n\n        attr_reader :vcores\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @memory_mb = args['memoryMb']\n          @vcores = args['vcores']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobDriverSchedulingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_flink_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_flink_job_logging_config'\nrequire 'google/dataproc/property/job_flink_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_flink_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobFlinkJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :savepoint_uri\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @savepoint_uri = args['savepointUri']\n          @properties = GoogleInSpec::Dataproc::Property::JobFlinkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobFlinkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobFlinkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_flink_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_flink_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobFlinkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobFlinkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobFlinkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_flink_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobFlinkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobFlinkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_flink_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobFlinkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobFlinkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hadoop_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_hadoop_job_logging_config'\nrequire 'google/dataproc/property/job_hadoop_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_hadoop_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHadoopJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::JobHadoopJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobHadoopJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHadoopJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hadoop_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_hadoop_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHadoopJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobHadoopJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHadoopJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hadoop_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHadoopJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHadoopJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hadoop_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHadoopJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHadoopJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hive_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_hive_job_properties'\nrequire 'google/dataproc/property/job_hive_job_query_list'\nrequire 'google/dataproc/property/job_hive_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHiveJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::JobHiveJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @script_variables = GoogleInSpec::Dataproc::Property::JobHiveJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::JobHiveJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHiveJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hive_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHiveJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHiveJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hive_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHiveJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHiveJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_hive_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobHiveJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobHiveJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_pig_job_logging_config'\nrequire 'google/dataproc/property/job_pig_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_pig_job_properties'\nrequire 'google/dataproc/property/job_pig_job_query_list'\nrequire 'google/dataproc/property/job_pig_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::JobPigJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @script_variables = GoogleInSpec::Dataproc::Property::JobPigJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::JobPigJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n          @logging_config = GoogleInSpec::Dataproc::Property::JobPigJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_pig_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobPigJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pig_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPigJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPigJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_placement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_placement_cluster_labels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPlacement\n        attr_reader :cluster_name\n\n        attr_reader :cluster_uuid\n\n        attr_reader :cluster_labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cluster_name = args['clusterName']\n          @cluster_uuid = args['clusterUuid']\n          @cluster_labels = GoogleInSpec::Dataproc::Property::JobPlacementClusterLabels.new(args['clusterLabels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPlacement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_placement_cluster_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPlacementClusterLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPlacementClusterLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_presto_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_presto_job_logging_config'\nrequire 'google/dataproc/property/job_presto_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_presto_job_properties'\nrequire 'google/dataproc/property/job_presto_job_query_list'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPrestoJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :output_format\n\n        attr_reader :client_tags\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::JobPrestoJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @output_format = args['outputFormat']\n          @client_tags = args['clientTags']\n          @properties = GoogleInSpec::Dataproc::Property::JobPrestoJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobPrestoJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPrestoJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_presto_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_presto_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPrestoJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobPrestoJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPrestoJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_presto_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPrestoJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPrestoJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_presto_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPrestoJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPrestoJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_presto_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPrestoJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPrestoJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pyspark_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_pyspark_job_logging_config'\nrequire 'google/dataproc/property/job_pyspark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_pyspark_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPysparkJob\n        attr_reader :main_python_file_uri\n\n        attr_reader :args\n\n        attr_reader :python_file_uris\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_python_file_uri = args['mainPythonFileUri']\n          @args = args['args']\n          @python_file_uris = args['pythonFileUris']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::JobPysparkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobPysparkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPysparkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pyspark_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_pyspark_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPysparkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobPysparkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPysparkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pyspark_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPysparkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPysparkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_pyspark_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobPysparkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobPysparkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobReference\n        attr_reader :project_id\n\n        attr_reader :job_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @job_id = args['jobId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobReference\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobScheduling\n        attr_reader :max_failures_per_hour\n\n        attr_reader :max_failures_total\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_failures_per_hour = args['maxFailuresPerHour']\n          @max_failures_total = args['maxFailuresTotal']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_job_logging_config'\nrequire 'google/dataproc/property/job_spark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::JobSparkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobSparkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobSparkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_r_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_r_job_logging_config'\nrequire 'google/dataproc/property/job_spark_r_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_r_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkRJob\n        attr_reader :main_r_file_uri\n\n        attr_reader :args\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_r_file_uri = args['mainRFileUri']\n          @args = args['args']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::JobSparkRJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobSparkRJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkRJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_r_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_r_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkRJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobSparkRJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkRJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_r_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkRJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkRJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_r_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkRJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkRJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_sql_job_logging_config'\nrequire 'google/dataproc/property/job_spark_sql_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_sql_job_properties'\nrequire 'google/dataproc/property/job_spark_sql_job_query_list'\nrequire 'google/dataproc/property/job_spark_sql_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::JobSparkSqlJobQueryList.new(args['queryList'], to_s)\n          @script_variables = GoogleInSpec::Dataproc::Property::JobSparkSqlJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::JobSparkSqlJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n          @logging_config = GoogleInSpec::Dataproc::Property::JobSparkSqlJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_spark_sql_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobSparkSqlJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_spark_sql_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobSparkSqlJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobSparkSqlJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobStatus\n        attr_reader :state\n\n        attr_reader :details\n\n        attr_reader :state_start_time\n\n        attr_reader :substate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @details = args['details']\n          @state_start_time = args['stateStartTime']\n          @substate = args['substate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_status_history.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobStatusHistory\n        attr_reader :state\n\n        attr_reader :details\n\n        attr_reader :state_start_time\n\n        attr_reader :substate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @details = args['details']\n          @state_start_time = args['stateStartTime']\n          @substate = args['substate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobStatusHistory\"\n        end\n      end\n\n      class JobStatusHistoryArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobStatusHistory.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobStatusHistory.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_trino_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_trino_job_logging_config'\nrequire 'google/dataproc/property/job_trino_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_trino_job_properties'\nrequire 'google/dataproc/property/job_trino_job_query_list'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobTrinoJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :output_format\n\n        attr_reader :client_tags\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::JobTrinoJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @output_format = args['outputFormat']\n          @client_tags = args['clientTags']\n          @properties = GoogleInSpec::Dataproc::Property::JobTrinoJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::JobTrinoJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTrinoJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_trino_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/job_trino_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobTrinoJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::JobTrinoJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTrinoJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_trino_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobTrinoJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTrinoJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_trino_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobTrinoJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTrinoJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_trino_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobTrinoJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTrinoJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/job_yarn_applications.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class JobYarnApplications\n        attr_reader :name\n\n        attr_reader :state\n\n        attr_reader :progress\n\n        attr_reader :tracking_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @state = args['state']\n          @progress = args['progress']\n          @tracking_url = args['trackingUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobYarnApplications\"\n        end\n      end\n\n      class JobYarnApplicationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobYarnApplications.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobYarnApplications.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_environment_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/session_environment_config_execution_config'\nrequire 'google/dataproc/property/session_environment_config_peripherals_config'\nrequire 'google/dataproc/property/session_environment_config_peripherals_config_spark_history_server_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionEnvironmentConfig\n        attr_reader :execution_config\n\n        attr_reader :peripherals_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @execution_config = GoogleInSpec::Dataproc::Property::SessionEnvironmentConfigExecutionConfig.new(args['executionConfig'], to_s)\n          @peripherals_config = GoogleInSpec::Dataproc::Property::SessionEnvironmentConfigPeripheralsConfig.new(args['peripheralsConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionEnvironmentConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_environment_config_execution_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionEnvironmentConfigExecutionConfig\n        attr_reader :service_account\n\n        attr_reader :network_uri\n\n        attr_reader :subnetwork_uri\n\n        attr_reader :network_tags\n\n        attr_reader :kms_key\n\n        attr_reader :idle_ttl\n\n        attr_reader :ttl\n\n        attr_reader :staging_bucket\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_account = args['serviceAccount']\n          @network_uri = args['networkUri']\n          @subnetwork_uri = args['subnetworkUri']\n          @network_tags = args['networkTags']\n          @kms_key = args['kmsKey']\n          @idle_ttl = args['idleTtl']\n          @ttl = args['ttl']\n          @staging_bucket = args['stagingBucket']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionEnvironmentConfigExecutionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_environment_config_peripherals_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/session_environment_config_peripherals_config_spark_history_server_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionEnvironmentConfigPeripheralsConfig\n        attr_reader :metastore_service\n\n        attr_reader :spark_history_server_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metastore_service = args['metastoreService']\n          @spark_history_server_config = GoogleInSpec::Dataproc::Property::SessionEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig.new(args['sparkHistoryServerConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionEnvironmentConfigPeripheralsConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_environment_config_peripherals_config_spark_history_server_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig\n        attr_reader :dataproc_cluster\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataproc_cluster = args['dataprocCluster']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_jupyter_session.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionJupyterSession\n        attr_reader :kernel\n\n        attr_reader :display_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kernel = args['kernel']\n          @display_name = args['displayName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionJupyterSession\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/session_runtime_config_properties'\nrequire 'google/dataproc/property/session_runtime_config_repository_config'\nrequire 'google/dataproc/property/session_runtime_config_repository_config_pypi_repository_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeConfig\n        attr_reader :version\n\n        attr_reader :container_image\n\n        attr_reader :properties\n\n        attr_reader :repository_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n          @container_image = args['containerImage']\n          @properties = GoogleInSpec::Dataproc::Property::SessionRuntimeConfigProperties.new(args['properties'], to_s)\n          @repository_config = GoogleInSpec::Dataproc::Property::SessionRuntimeConfigRepositoryConfig.new(args['repositoryConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_config_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeConfigProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeConfigProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_config_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/session_runtime_config_repository_config_pypi_repository_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeConfigRepositoryConfig\n        attr_reader :pypi_repository_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pypi_repository_config = GoogleInSpec::Dataproc::Property::SessionRuntimeConfigRepositoryConfigPypiRepositoryConfig.new(args['pypiRepositoryConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeConfigRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_config_repository_config_pypi_repository_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeConfigRepositoryConfigPypiRepositoryConfig\n        attr_reader :pypi_repository\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pypi_repository = args['pypiRepository']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeConfigRepositoryConfigPypiRepositoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/session_runtime_info_approximate_usage'\nrequire 'google/dataproc/property/session_runtime_info_current_usage'\nrequire 'google/dataproc/property/session_runtime_info_endpoints'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeInfo\n        attr_reader :endpoints\n\n        attr_reader :output_uri\n\n        attr_reader :diagnostic_output_uri\n\n        attr_reader :approximate_usage\n\n        attr_reader :current_usage\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @endpoints = GoogleInSpec::Dataproc::Property::SessionRuntimeInfoEndpoints.new(args['endpoints'], to_s)\n          @output_uri = args['outputUri']\n          @diagnostic_output_uri = args['diagnosticOutputUri']\n          @approximate_usage = GoogleInSpec::Dataproc::Property::SessionRuntimeInfoApproximateUsage.new(args['approximateUsage'], to_s)\n          @current_usage = GoogleInSpec::Dataproc::Property::SessionRuntimeInfoCurrentUsage.new(args['currentUsage'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_info_approximate_usage.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeInfoApproximateUsage\n        attr_reader :milli_dcu_seconds\n\n        attr_reader :shuffle_storage_gb_seconds\n\n        attr_reader :milli_accelerator_seconds\n\n        attr_reader :accelerator_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @milli_dcu_seconds = args['milliDcuSeconds']\n          @shuffle_storage_gb_seconds = args['shuffleStorageGbSeconds']\n          @milli_accelerator_seconds = args['milliAcceleratorSeconds']\n          @accelerator_type = args['acceleratorType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeInfoApproximateUsage\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_info_current_usage.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeInfoCurrentUsage\n        attr_reader :milli_dcu\n\n        attr_reader :shuffle_storage_gb\n\n        attr_reader :milli_dcu_premium\n\n        attr_reader :shuffle_storage_gb_premium\n\n        attr_reader :milli_accelerator\n\n        attr_reader :accelerator_type\n\n        attr_reader :snapshot_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @milli_dcu = args['milliDcu']\n          @shuffle_storage_gb = args['shuffleStorageGb']\n          @milli_dcu_premium = args['milliDcuPremium']\n          @shuffle_storage_gb_premium = args['shuffleStorageGbPremium']\n          @milli_accelerator = args['milliAccelerator']\n          @accelerator_type = args['acceleratorType']\n          @snapshot_time = args['snapshotTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeInfoCurrentUsage\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_runtime_info_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionRuntimeInfoEndpoints\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionRuntimeInfoEndpoints\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/session_state_history.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class SessionStateHistory\n        attr_reader :state\n\n        attr_reader :state_message\n\n        attr_reader :state_start_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @state = args['state']\n          @state_message = args['stateMessage']\n          @state_start_time = args['stateStartTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SessionStateHistory\"\n        end\n      end\n\n      class SessionStateHistoryArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SessionStateHistory.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SessionStateHistory.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_labels'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroup\n        attr_reader :name\n\n        attr_reader :roles\n\n        attr_reader :node_group_config\n\n        attr_reader :labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @roles = args['roles']\n          @node_group_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfig.new(args['nodeGroupConfig'], to_s)\n          @labels = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupLabels.new(args['labels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :instance_references\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :preemptibility\n\n        attr_reader :managed_group_config\n\n        attr_reader :accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :min_num_instances\n\n        attr_reader :instance_flexibility_policy\n\n        attr_reader :startup_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @instance_references = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferencesArray.parse(args['instanceReferences'], to_s)\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @preemptibility = args['preemptibility']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n          @accelerators = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @min_num_instances = args['minNumInstances']\n          @instance_flexibility_policy = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceFlexibilityPolicy.new(args['instanceFlexibilityPolicy'], to_s)\n          @startup_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigStartupConfig.new(args['startupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAccelerators\n        attr_reader :accelerator_type_uri\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type_uri = args['acceleratorTypeUri']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAccelerators\"\n        end\n      end\n\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        attr_reader :local_ssd_interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n          @local_ssd_interface = args['localSsdInterface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_flexibility_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_results'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceFlexibilityPolicy\n        attr_reader :instance_selection_list\n\n        attr_reader :instance_selection_results\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_selection_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionListArray.parse(args['instanceSelectionList'], to_s)\n          @instance_selection_results = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray.parse(args['instanceSelectionResults'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceFlexibilityPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_references.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferences\n        attr_reader :instance_name\n\n        attr_reader :instance_id\n\n        attr_reader :public_key\n\n        attr_reader :public_ecies_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_name = args['instanceName']\n          @instance_id = args['instanceId']\n          @public_key = args['publicKey']\n          @public_ecies_key = args['publicEciesKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferences\"\n        end\n      end\n\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferencesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferences.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigInstanceReferences.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        attr_reader :instance_group_manager_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n          @instance_group_manager_uri = args['instanceGroupManagerUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_startup_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigStartupConfig\n        attr_reader :required_registration_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @required_registration_fraction = args['requiredRegistrationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsNodeGroupNodeGroupConfigStartupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionList\n        attr_reader :machine_types\n\n        attr_reader :rank\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_types = args['machineTypes']\n          @rank = args['rank']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionList\"\n        end\n      end\n\n      class WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionListArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionList.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionList.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_results.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionResults\n        attr_reader :machine_type\n\n        attr_reader :vm_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @vm_count = args['vmCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionResults\"\n        end\n      end\n\n      class WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionResultsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionResults.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateAuxiliaryNodeGroupsPolicyInstanceSelectionResults.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateEncryptionConfig\n        attr_reader :kms_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key = args['kmsKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfig\n        attr_reader :namespaced_gke_deployment_target\n\n        attr_reader :gke_cluster_target\n\n        attr_reader :node_pool_target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @namespaced_gke_deployment_target = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNamespacedGkeDeploymentTarget.new(args['namespacedGkeDeploymentTarget'], to_s)\n          @gke_cluster_target = args['gkeClusterTarget']\n          @node_pool_target = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNodePoolTargetArray.parse(args['nodePoolTarget'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNamespacedGkeDeploymentTarget\n        attr_reader :target_gke_cluster\n\n        attr_reader :cluster_namespace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_gke_cluster = args['targetGkeCluster']\n          @cluster_namespace = args['clusterNamespace']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNamespacedGkeDeploymentTarget\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_autoscaling'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config_accelerators'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNodePoolTarget\n        attr_reader :node_pool\n\n        attr_reader :roles\n\n        attr_reader :node_pool_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @node_pool = args['nodePool']\n          @roles = args['roles']\n          @node_pool_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfig.new(args['nodePoolConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNodePoolTarget\"\n        end\n      end\n\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateGkeClusterConfigNodePoolTarget.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateGkeClusterConfigNodePoolTarget.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_autoscaling'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config_accelerators'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfig\n        attr_reader :config\n\n        attr_reader :locations\n\n        attr_reader :autoscaling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @config = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfig.new(args['config'], to_s)\n          @locations = args['locations']\n          @autoscaling = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigAutoscaling.new(args['autoscaling'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_autoscaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigAutoscaling\n        attr_reader :min_node_count\n\n        attr_reader :max_node_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_node_count = args['minNodeCount']\n          @max_node_count = args['maxNodeCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigAutoscaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config_accelerators'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfig\n        attr_reader :machine_type\n\n        attr_reader :local_ssd_count\n\n        attr_reader :preemptible\n\n        attr_reader :accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :boot_disk_kms_key\n\n        attr_reader :spot\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @local_ssd_count = args['localSsdCount']\n          @preemptible = args['preemptible']\n          @accelerators = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @boot_disk_kms_key = args['bootDiskKmsKey']\n          @spot = args['spot']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target_node_pool_config_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAccelerators\n        attr_reader :accelerator_count\n\n        attr_reader :accelerator_type\n\n        attr_reader :gpu_partition_size\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_count = args['acceleratorCount']\n          @accelerator_type = args['acceleratorType']\n          @gpu_partition_size = args['gpuPartitionSize']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAccelerators\"\n        end\n      end\n\n      class WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateGkeClusterConfigNodePoolTargetNodePoolConfigConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_script_variables'\nrequire 'google/dataproc/property/workflowtemplate_jobs_labels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_script_variables'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_scheduling'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_script_variables'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_query_list'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobs\n        attr_reader :step_id\n\n        attr_reader :hadoop_job\n\n        attr_reader :spark_job\n\n        attr_reader :pyspark_job\n\n        attr_reader :hive_job\n\n        attr_reader :pig_job\n\n        attr_reader :spark_r_job\n\n        attr_reader :spark_sql_job\n\n        attr_reader :presto_job\n\n        attr_reader :trino_job\n\n        attr_reader :flink_job\n\n        attr_reader :labels\n\n        attr_reader :scheduling\n\n        attr_reader :prerequisite_step_ids\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_id = args['stepId']\n          @hadoop_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHadoopJob.new(args['hadoopJob'], to_s)\n          @spark_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkJob.new(args['sparkJob'], to_s)\n          @pyspark_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPysparkJob.new(args['pysparkJob'], to_s)\n          @hive_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHiveJob.new(args['hiveJob'], to_s)\n          @pig_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJob.new(args['pigJob'], to_s)\n          @spark_r_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkRJob.new(args['sparkRJob'], to_s)\n          @spark_sql_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJob.new(args['sparkSqlJob'], to_s)\n          @presto_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPrestoJob.new(args['prestoJob'], to_s)\n          @trino_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsTrinoJob.new(args['trinoJob'], to_s)\n          @flink_job = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsFlinkJob.new(args['flinkJob'], to_s)\n          @labels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsLabels.new(args['labels'], to_s)\n          @scheduling = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsScheduling.new(args['scheduling'], to_s)\n          @prerequisite_step_ids = args['prerequisiteStepIds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobs\"\n        end\n      end\n\n      class WorkflowTemplateJobsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateJobs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateJobs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_flink_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsFlinkJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :savepoint_uri\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @savepoint_uri = args['savepointUri']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsFlinkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsFlinkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsFlinkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsFlinkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsFlinkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsFlinkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_flink_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsFlinkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsFlinkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_flink_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsFlinkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsFlinkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hadoop_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHadoopJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHadoopJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHadoopJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHadoopJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHadoopJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHadoopJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHadoopJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hadoop_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHadoopJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHadoopJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hadoop_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHadoopJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHadoopJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hive_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_hive_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHiveJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHiveJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @script_variables = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHiveJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsHiveJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHiveJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hive_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHiveJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHiveJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hive_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHiveJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHiveJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_hive_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsHiveJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsHiveJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @script_variables = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPigJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pig_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPigJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPigJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_presto_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_query_list'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPrestoJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :output_format\n\n        attr_reader :client_tags\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPrestoJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @output_format = args['outputFormat']\n          @client_tags = args['clientTags']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPrestoJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPrestoJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPrestoJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPrestoJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPrestoJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPrestoJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_presto_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPrestoJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPrestoJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_presto_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPrestoJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPrestoJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_presto_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPrestoJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPrestoJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pyspark_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPysparkJob\n        attr_reader :main_python_file_uri\n\n        attr_reader :args\n\n        attr_reader :python_file_uris\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_python_file_uri = args['mainPythonFileUri']\n          @args = args['args']\n          @python_file_uris = args['pythonFileUris']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPysparkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPysparkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPysparkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPysparkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsPysparkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPysparkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pyspark_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPysparkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPysparkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_pyspark_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsPysparkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsPysparkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsScheduling\n        attr_reader :max_failures_per_hour\n\n        attr_reader :max_failures_total\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_failures_per_hour = args['maxFailuresPerHour']\n          @max_failures_total = args['maxFailuresTotal']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkJob\n        attr_reader :main_jar_file_uri\n\n        attr_reader :main_class\n\n        attr_reader :args\n\n        attr_reader :jar_file_uris\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_jar_file_uri = args['mainJarFileUri']\n          @main_class = args['mainClass']\n          @args = args['args']\n          @jar_file_uris = args['jarFileUris']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_r_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkRJob\n        attr_reader :main_r_file_uri\n\n        attr_reader :args\n\n        attr_reader :file_uris\n\n        attr_reader :archive_uris\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_r_file_uri = args['mainRFileUri']\n          @args = args['args']\n          @file_uris = args['fileUris']\n          @archive_uris = args['archiveUris']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkRJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkRJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkRJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkRJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkRJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkRJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_r_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkRJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkRJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_r_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkRJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkRJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_query_list'\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_script_variables'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :script_variables\n\n        attr_reader :properties\n\n        attr_reader :jar_file_uris\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJobQueryList.new(args['queryList'], to_s)\n          @script_variables = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJobScriptVariables.new(args['scriptVariables'], to_s)\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJobProperties.new(args['properties'], to_s)\n          @jar_file_uris = args['jarFileUris']\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsSparkSqlJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_spark_sql_job_script_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsSparkSqlJobScriptVariables\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsSparkSqlJobScriptVariables\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_trino_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_properties'\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_query_list'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsTrinoJob\n        attr_reader :query_file_uri\n\n        attr_reader :query_list\n\n        attr_reader :continue_on_failure\n\n        attr_reader :output_format\n\n        attr_reader :client_tags\n\n        attr_reader :properties\n\n        attr_reader :logging_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query_file_uri = args['queryFileUri']\n          @query_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsTrinoJobQueryList.new(args['queryList'], to_s)\n          @continue_on_failure = args['continueOnFailure']\n          @output_format = args['outputFormat']\n          @client_tags = args['clientTags']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsTrinoJobProperties.new(args['properties'], to_s)\n          @logging_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsTrinoJobLoggingConfig.new(args['loggingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsTrinoJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config_driver_log_levels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsTrinoJobLoggingConfig\n        attr_reader :driver_log_levels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @driver_log_levels = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsTrinoJobLoggingConfigDriverLogLevels.new(args['driverLogLevels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsTrinoJobLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_trino_job_logging_config_driver_log_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsTrinoJobLoggingConfigDriverLogLevels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsTrinoJobLoggingConfigDriverLogLevels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_trino_job_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsTrinoJobProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsTrinoJobProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_jobs_trino_job_query_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateJobsTrinoJobQueryList\n        attr_reader :queries\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @queries = args['queries']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateJobsTrinoJobQueryList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_master_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_master_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_master_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :instance_references\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :preemptibility\n\n        attr_reader :managed_group_config\n\n        attr_reader :accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :min_num_instances\n\n        attr_reader :instance_flexibility_policy\n\n        attr_reader :startup_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @instance_references = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigInstanceReferencesArray.parse(args['instanceReferences'], to_s)\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @preemptibility = args['preemptibility']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n          @accelerators = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @min_num_instances = args['minNumInstances']\n          @instance_flexibility_policy = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigInstanceFlexibilityPolicy.new(args['instanceFlexibilityPolicy'], to_s)\n          @startup_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigStartupConfig.new(args['startupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigAccelerators\n        attr_reader :accelerator_type_uri\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type_uri = args['acceleratorTypeUri']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigAccelerators\"\n        end\n      end\n\n      class WorkflowTemplateMasterConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateMasterConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateMasterConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        attr_reader :local_ssd_interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n          @local_ssd_interface = args['localSsdInterface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigInstanceFlexibilityPolicy\n        attr_reader :instance_selection_list\n\n        attr_reader :instance_selection_results\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_selection_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionListArray.parse(args['instanceSelectionList'], to_s)\n          @instance_selection_results = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray.parse(args['instanceSelectionResults'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigInstanceFlexibilityPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionList\n        attr_reader :machine_types\n\n        attr_reader :rank\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_types = args['machineTypes']\n          @rank = args['rank']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionList\"\n        end\n      end\n\n      class WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionListArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionList.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionList.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResults\n        attr_reader :machine_type\n\n        attr_reader :vm_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @vm_count = args['vmCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResults\"\n        end\n      end\n\n      class WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateMasterConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_instance_references.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigInstanceReferences\n        attr_reader :instance_name\n\n        attr_reader :instance_id\n\n        attr_reader :public_key\n\n        attr_reader :public_ecies_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_name = args['instanceName']\n          @instance_id = args['instanceId']\n          @public_key = args['publicKey']\n          @public_ecies_key = args['publicEciesKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigInstanceReferences\"\n        end\n      end\n\n      class WorkflowTemplateMasterConfigInstanceReferencesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateMasterConfigInstanceReferences.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateMasterConfigInstanceReferences.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        attr_reader :instance_group_manager_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n          @instance_group_manager_uri = args['instanceGroupManagerUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_master_config_startup_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateMasterConfigStartupConfig\n        attr_reader :required_registration_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @required_registration_fraction = args['requiredRegistrationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateMasterConfigStartupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_parameters_validation'\nrequire 'google/dataproc/property/workflowtemplate_parameters_validation_regex'\nrequire 'google/dataproc/property/workflowtemplate_parameters_validation_values'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateParameters\n        attr_reader :name\n\n        attr_reader :fields\n\n        attr_reader :description\n\n        attr_reader :validation\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @fields = args['fields']\n          @description = args['description']\n          @validation = GoogleInSpec::Dataproc::Property::WorkflowTemplateParametersValidation.new(args['validation'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateParameters\"\n        end\n      end\n\n      class WorkflowTemplateParametersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateParameters.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateParameters.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_parameters_validation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_parameters_validation_regex'\nrequire 'google/dataproc/property/workflowtemplate_parameters_validation_values'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateParametersValidation\n        attr_reader :regex\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @regex = GoogleInSpec::Dataproc::Property::WorkflowTemplateParametersValidationRegex.new(args['regex'], to_s)\n          @values = GoogleInSpec::Dataproc::Property::WorkflowTemplateParametersValidationValues.new(args['values'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateParametersValidation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_parameters_validation_regex.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateParametersValidationRegex\n        attr_reader :regexes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @regexes = args['regexes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateParametersValidationRegex\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_parameters_validation_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateParametersValidationValues\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateParametersValidationValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_cluster_selector'\nrequire 'google/dataproc/property/workflowtemplate_placement_cluster_selector_cluster_labels'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_autoscaling_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_encryption_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_initialization_actions'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_lifecycle_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_master_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_master_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_metastore_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties'\nrequire 'google/dataproc/property/workflowtemplate_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_labels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacement\n        attr_reader :managed_cluster\n\n        attr_reader :cluster_selector\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @managed_cluster = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedCluster.new(args['managedCluster'], to_s)\n          @cluster_selector = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementClusterSelector.new(args['clusterSelector'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_cluster_selector.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_cluster_selector_cluster_labels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementClusterSelector\n        attr_reader :zone\n\n        attr_reader :cluster_labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @zone = args['zone']\n          @cluster_labels = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementClusterSelectorClusterLabels.new(args['clusterLabels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementClusterSelector\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_cluster_selector_cluster_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementClusterSelectorClusterLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementClusterSelectorClusterLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_autoscaling_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_encryption_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_initialization_actions'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_lifecycle_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_master_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_master_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_metastore_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties'\nrequire 'google/dataproc/property/workflowtemplate_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_labels'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedCluster\n        attr_reader :cluster_name\n\n        attr_reader :config\n\n        attr_reader :labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cluster_name = args['clusterName']\n          @config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfig.new(args['config'], to_s)\n          @labels = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterLabels.new(args['labels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedCluster\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_autoscaling_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_encryption_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_initialization_actions'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_lifecycle_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_master_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_master_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_metastore_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties'\nrequire 'google/dataproc/property/workflowtemplate_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfig\n        attr_reader :config_bucket\n\n        attr_reader :temp_bucket\n\n        attr_reader :gce_cluster_config\n\n        attr_reader :master_config\n\n        attr_reader :worker_config\n\n        attr_reader :secondary_worker_config\n\n        attr_reader :software_config\n\n        attr_reader :initialization_actions\n\n        attr_reader :encryption_config\n\n        attr_reader :autoscaling_config\n\n        attr_reader :security_config\n\n        attr_reader :lifecycle_config\n\n        attr_reader :endpoint_config\n\n        attr_reader :metastore_config\n\n        attr_reader :gke_cluster_config\n\n        attr_reader :dataproc_metric_config\n\n        attr_reader :auxiliary_node_groups\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @config_bucket = args['configBucket']\n          @temp_bucket = args['tempBucket']\n          @gce_cluster_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfig.new(args['gceClusterConfig'], to_s)\n          @master_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateMasterConfig.new(args['masterConfig'], to_s)\n          @worker_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfig.new(args['workerConfig'], to_s)\n          @secondary_worker_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfig.new(args['secondaryWorkerConfig'], to_s)\n          @software_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigSoftwareConfig.new(args['softwareConfig'], to_s)\n          @initialization_actions = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigInitializationActionsArray.parse(args['initializationActions'], to_s)\n          @encryption_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigEncryptionConfig.new(args['encryptionConfig'], to_s)\n          @autoscaling_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigAutoscalingConfig.new(args['autoscalingConfig'], to_s)\n          @security_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigSecurityConfig.new(args['securityConfig'], to_s)\n          @lifecycle_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigLifecycleConfig.new(args['lifecycleConfig'], to_s)\n          @endpoint_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigEndpointConfig.new(args['endpointConfig'], to_s)\n          @metastore_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigMetastoreConfig.new(args['metastoreConfig'], to_s)\n          @gke_cluster_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateGkeClusterConfig.new(args['gkeClusterConfig'], to_s)\n          @dataproc_metric_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfig.new(args['dataprocMetricConfig'], to_s)\n          @auxiliary_node_groups = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsArray.parse(args['auxiliaryNodeGroups'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_autoscaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigAutoscalingConfig\n        attr_reader :policy_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @policy_uri = args['policyUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigAutoscalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_auxiliary_node_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_labels'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_auxiliary_node_groups_node_group_node_group_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateAuxiliaryNodeGroups\n        attr_reader :node_group\n\n        attr_reader :node_group_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @node_group = GoogleInSpec::Dataproc::Property::WorkflowTemplateAuxiliaryNodeGroupsNodeGroup.new(args['nodeGroup'], to_s)\n          @node_group_id = args['nodeGroupId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateAuxiliaryNodeGroups\"\n        end\n      end\n\n      class WorkflowTemplateAuxiliaryNodeGroupsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateAuxiliaryNodeGroups.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateAuxiliaryNodeGroups.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfig\n        attr_reader :metrics\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetricsArray.parse(args['metrics'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetrics\n        attr_reader :metric_source\n\n        attr_reader :metric_overrides\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_source = args['metricSource']\n          @metric_overrides = args['metricOverrides']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetrics\"\n        end\n      end\n\n      class WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplatePlacementManagedClusterConfigDataprocMetricConfigMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigEncryptionConfig\n        attr_reader :gce_pd_kms_key_name\n\n        attr_reader :kms_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gce_pd_kms_key_name = args['gcePdKmsKeyName']\n          @kms_key = args['kmsKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigEndpointConfig\n        attr_reader :http_ports\n\n        attr_reader :enable_http_port_access\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @http_ports = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigEndpointConfigHttpPorts.new(args['httpPorts'], to_s)\n          @enable_http_port_access = args['enableHttpPortAccess']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigEndpointConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigEndpointConfigHttpPorts\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigEndpointConfigHttpPorts\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfig\n        attr_reader :zone_uri\n\n        attr_reader :network_uri\n\n        attr_reader :subnetwork_uri\n\n        attr_reader :internal_ip_only\n\n        attr_reader :private_ipv6_google_access\n\n        attr_reader :service_account\n\n        attr_reader :service_account_scopes\n\n        attr_reader :tags\n\n        attr_reader :metadata\n\n        attr_reader :reservation_affinity\n\n        attr_reader :node_group_affinity\n\n        attr_reader :shielded_instance_config\n\n        attr_reader :confidential_instance_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @zone_uri = args['zoneUri']\n          @network_uri = args['networkUri']\n          @subnetwork_uri = args['subnetworkUri']\n          @internal_ip_only = args['internalIpOnly']\n          @private_ipv6_google_access = args['privateIpv6GoogleAccess']\n          @service_account = args['serviceAccount']\n          @service_account_scopes = args['serviceAccountScopes']\n          @tags = args['tags']\n          @metadata = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigMetadata.new(args['metadata'], to_s)\n          @reservation_affinity = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigReservationAffinity.new(args['reservationAffinity'], to_s)\n          @node_group_affinity = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigNodeGroupAffinity.new(args['nodeGroupAffinity'], to_s)\n          @shielded_instance_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigShieldedInstanceConfig.new(args['shieldedInstanceConfig'], to_s)\n          @confidential_instance_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigConfidentialInstanceConfig.new(args['confidentialInstanceConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigConfidentialInstanceConfig\n        attr_reader :enable_confidential_compute\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_confidential_compute = args['enableConfidentialCompute']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigConfidentialInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigNodeGroupAffinity\n        attr_reader :node_group_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @node_group_uri = args['nodeGroupUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigNodeGroupAffinity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigReservationAffinity\n        attr_reader :consume_reservation_type\n\n        attr_reader :key\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consume_reservation_type = args['consumeReservationType']\n          @key = args['key']\n          @values = args['values']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigReservationAffinity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigShieldedInstanceConfig\n        attr_reader :enable_secure_boot\n\n        attr_reader :enable_vtpm\n\n        attr_reader :enable_integrity_monitoring\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_secure_boot = args['enableSecureBoot']\n          @enable_vtpm = args['enableVtpm']\n          @enable_integrity_monitoring = args['enableIntegrityMonitoring']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigGceClusterConfigShieldedInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_initialization_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigInitializationActions\n        attr_reader :executable_file\n\n        attr_reader :execution_timeout\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @executable_file = args['executableFile']\n          @execution_timeout = args['executionTimeout']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigInitializationActions\"\n        end\n      end\n\n      class WorkflowTemplatePlacementManagedClusterConfigInitializationActionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplatePlacementManagedClusterConfigInitializationActions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplatePlacementManagedClusterConfigInitializationActions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_lifecycle_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigLifecycleConfig\n        attr_reader :idle_delete_ttl\n\n        attr_reader :auto_delete_time\n\n        attr_reader :auto_delete_ttl\n\n        attr_reader :idle_start_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @idle_delete_ttl = args['idleDeleteTtl']\n          @auto_delete_time = args['autoDeleteTime']\n          @auto_delete_ttl = args['autoDeleteTtl']\n          @idle_start_time = args['idleStartTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigLifecycleConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_metastore_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigMetastoreConfig\n        attr_reader :dataproc_metastore_service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dataproc_metastore_service = args['dataprocMetastoreService']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigMetastoreConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigSecurityConfig\n        attr_reader :kerberos_config\n\n        attr_reader :identity_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kerberos_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigSecurityConfigKerberosConfig.new(args['kerberosConfig'], to_s)\n          @identity_config = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigSecurityConfigIdentityConfig.new(args['identityConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigSecurityConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigSecurityConfigKerberosConfig\n        attr_reader :enable_kerberos\n\n        attr_reader :root_principal_password_uri\n\n        attr_reader :kms_key_uri\n\n        attr_reader :keystore_uri\n\n        attr_reader :truststore_uri\n\n        attr_reader :keystore_password_uri\n\n        attr_reader :key_password_uri\n\n        attr_reader :truststore_password_uri\n\n        attr_reader :cross_realm_trust_realm\n\n        attr_reader :cross_realm_trust_kdc\n\n        attr_reader :cross_realm_trust_admin_server\n\n        attr_reader :cross_realm_trust_shared_password_uri\n\n        attr_reader :kdc_db_key_uri\n\n        attr_reader :tgt_lifetime_hours\n\n        attr_reader :realm\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enable_kerberos = args['enableKerberos']\n          @root_principal_password_uri = args['rootPrincipalPasswordUri']\n          @kms_key_uri = args['kmsKeyUri']\n          @keystore_uri = args['keystoreUri']\n          @truststore_uri = args['truststoreUri']\n          @keystore_password_uri = args['keystorePasswordUri']\n          @key_password_uri = args['keyPasswordUri']\n          @truststore_password_uri = args['truststorePasswordUri']\n          @cross_realm_trust_realm = args['crossRealmTrustRealm']\n          @cross_realm_trust_kdc = args['crossRealmTrustKdc']\n          @cross_realm_trust_admin_server = args['crossRealmTrustAdminServer']\n          @cross_realm_trust_shared_password_uri = args['crossRealmTrustSharedPasswordUri']\n          @kdc_db_key_uri = args['kdcDbKeyUri']\n          @tgt_lifetime_hours = args['tgtLifetimeHours']\n          @realm = args['realm']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigSecurityConfigKerberosConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigSoftwareConfig\n        attr_reader :image_version\n\n        attr_reader :properties\n\n        attr_reader :optional_components\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @image_version = args['imageVersion']\n          @properties = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacementManagedClusterConfigSoftwareConfigProperties.new(args['properties'], to_s)\n          @optional_components = args['optionalComponents']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigSoftwareConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigSoftwareConfigProperties\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigSoftwareConfigProperties\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_placement_managed_cluster_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :instance_references\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :preemptibility\n\n        attr_reader :managed_group_config\n\n        attr_reader :accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :min_num_instances\n\n        attr_reader :instance_flexibility_policy\n\n        attr_reader :startup_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @instance_references = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigInstanceReferencesArray.parse(args['instanceReferences'], to_s)\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @preemptibility = args['preemptibility']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n          @accelerators = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @min_num_instances = args['minNumInstances']\n          @instance_flexibility_policy = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicy.new(args['instanceFlexibilityPolicy'], to_s)\n          @startup_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigStartupConfig.new(args['startupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigAccelerators\n        attr_reader :accelerator_type_uri\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type_uri = args['acceleratorTypeUri']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigAccelerators\"\n        end\n      end\n\n      class WorkflowTemplateSecondaryWorkerConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateSecondaryWorkerConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateSecondaryWorkerConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        attr_reader :local_ssd_interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n          @local_ssd_interface = args['localSsdInterface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicy\n        attr_reader :instance_selection_list\n\n        attr_reader :instance_selection_results\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_selection_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArray.parse(args['instanceSelectionList'], to_s)\n          @instance_selection_results = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray.parse(args['instanceSelectionResults'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList\n        attr_reader :machine_types\n\n        attr_reader :rank\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_types = args['machineTypes']\n          @rank = args['rank']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList\"\n        end\n      end\n\n      class WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults\n        attr_reader :machine_type\n\n        attr_reader :vm_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @vm_count = args['vmCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults\"\n        end\n      end\n\n      class WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateSecondaryWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigInstanceReferences\n        attr_reader :instance_name\n\n        attr_reader :instance_id\n\n        attr_reader :public_key\n\n        attr_reader :public_ecies_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_name = args['instanceName']\n          @instance_id = args['instanceId']\n          @public_key = args['publicKey']\n          @public_ecies_key = args['publicEciesKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigInstanceReferences\"\n        end\n      end\n\n      class WorkflowTemplateSecondaryWorkerConfigInstanceReferencesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateSecondaryWorkerConfigInstanceReferences.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateSecondaryWorkerConfigInstanceReferences.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        attr_reader :instance_group_manager_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n          @instance_group_manager_uri = args['instanceGroupManagerUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecondaryWorkerConfigStartupConfig\n        attr_reader :required_registration_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @required_registration_fraction = args['requiredRegistrationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecondaryWorkerConfigStartupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_security_config_identity_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplatePlacementManagedClusterConfigSecurityConfigIdentityConfig\n        attr_reader :user_service_account_mapping\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_service_account_mapping = GoogleInSpec::Dataproc::Property::WorkflowTemplateSecurityConfigIdentityConfigUserServiceAccountMapping.new(args['userServiceAccountMapping'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplatePlacementManagedClusterConfigSecurityConfigIdentityConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateSecurityConfigIdentityConfigUserServiceAccountMapping\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateSecurityConfigIdentityConfigUserServiceAccountMapping\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_startup_config'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfig\n        attr_reader :num_instances\n\n        attr_reader :instance_names\n\n        attr_reader :instance_references\n\n        attr_reader :image_uri\n\n        attr_reader :machine_type_uri\n\n        attr_reader :disk_config\n\n        attr_reader :is_preemptible\n\n        attr_reader :preemptibility\n\n        attr_reader :managed_group_config\n\n        attr_reader :accelerators\n\n        attr_reader :min_cpu_platform\n\n        attr_reader :min_num_instances\n\n        attr_reader :instance_flexibility_policy\n\n        attr_reader :startup_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_instances = args['numInstances']\n          @instance_names = args['instanceNames']\n          @instance_references = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigInstanceReferencesArray.parse(args['instanceReferences'], to_s)\n          @image_uri = args['imageUri']\n          @machine_type_uri = args['machineTypeUri']\n          @disk_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigDiskConfig.new(args['diskConfig'], to_s)\n          @is_preemptible = args['isPreemptible']\n          @preemptibility = args['preemptibility']\n          @managed_group_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigManagedGroupConfig.new(args['managedGroupConfig'], to_s)\n          @accelerators = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigAcceleratorsArray.parse(args['accelerators'], to_s)\n          @min_cpu_platform = args['minCpuPlatform']\n          @min_num_instances = args['minNumInstances']\n          @instance_flexibility_policy = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigInstanceFlexibilityPolicy.new(args['instanceFlexibilityPolicy'], to_s)\n          @startup_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigStartupConfig.new(args['startupConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_accelerators.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigAccelerators\n        attr_reader :accelerator_type_uri\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type_uri = args['acceleratorTypeUri']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigAccelerators\"\n        end\n      end\n\n      class WorkflowTemplateWorkerConfigAcceleratorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateWorkerConfigAccelerators.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateWorkerConfigAccelerators.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_disk_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigDiskConfig\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        attr_reader :num_local_ssds\n\n        attr_reader :local_ssd_interface\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n          @num_local_ssds = args['numLocalSsds']\n          @local_ssd_interface = args['localSsdInterface']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigDiskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigInstanceFlexibilityPolicy\n        attr_reader :instance_selection_list\n\n        attr_reader :instance_selection_results\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_selection_list = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArray.parse(args['instanceSelectionList'], to_s)\n          @instance_selection_results = GoogleInSpec::Dataproc::Property::WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray.parse(args['instanceSelectionResults'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigInstanceFlexibilityPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList\n        attr_reader :machine_types\n\n        attr_reader :rank\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_types = args['machineTypes']\n          @rank = args['rank']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList\"\n        end\n      end\n\n      class WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults\n        attr_reader :machine_type\n\n        attr_reader :vm_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_type = args['machineType']\n          @vm_count = args['vmCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults\"\n        end\n      end\n\n      class WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResults.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_instance_references.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigInstanceReferences\n        attr_reader :instance_name\n\n        attr_reader :instance_id\n\n        attr_reader :public_key\n\n        attr_reader :public_ecies_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_name = args['instanceName']\n          @instance_id = args['instanceId']\n          @public_key = args['publicKey']\n          @public_ecies_key = args['publicEciesKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigInstanceReferences\"\n        end\n      end\n\n      class WorkflowTemplateWorkerConfigInstanceReferencesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return WorkflowTemplateWorkerConfigInstanceReferences.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| WorkflowTemplateWorkerConfigInstanceReferences.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_managed_group_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigManagedGroupConfig\n        attr_reader :instance_template_name\n\n        attr_reader :instance_group_manager_name\n\n        attr_reader :instance_group_manager_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_template_name = args['instanceTemplateName']\n          @instance_group_manager_name = args['instanceGroupManagerName']\n          @instance_group_manager_uri = args['instanceGroupManagerUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigManagedGroupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataproc/property/workflowtemplate_worker_config_startup_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Dataproc\n    module Property\n      class WorkflowTemplateWorkerConfigStartupConfig\n        attr_reader :required_registration_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @required_registration_fraction = args['requiredRegistrationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} WorkflowTemplateWorkerConfigStartupConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/federation_backend_metastores.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class FederationBackendMetastores\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FederationBackendMetastores\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/federation_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class FederationLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FederationLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceEncryptionConfig\n        attr_reader :kms_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key = args['kmsKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_hive_metastore_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_auxiliary_versions'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_config_overrides'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config_keytab'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceHiveMetastoreConfig\n        attr_reader :version\n\n        attr_reader :config_overrides\n\n        attr_reader :kerberos_config\n\n        attr_reader :endpoint_protocol\n\n        attr_reader :auxiliary_versions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n          @config_overrides = GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfigConfigOverrides.new(args['configOverrides'], to_s)\n          @kerberos_config = GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfigKerberosConfig.new(args['kerberosConfig'], to_s)\n          @endpoint_protocol = args['endpointProtocol']\n          @auxiliary_versions = GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfigAuxiliaryVersions.new(args['auxiliaryVersions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceHiveMetastoreConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_hive_metastore_config_auxiliary_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceHiveMetastoreConfigAuxiliaryVersions\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceHiveMetastoreConfigAuxiliaryVersions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_hive_metastore_config_config_overrides.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceHiveMetastoreConfigConfigOverrides\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceHiveMetastoreConfigConfigOverrides\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config_keytab'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceHiveMetastoreConfigKerberosConfig\n        attr_reader :keytab\n\n        attr_reader :principal\n\n        attr_reader :krb5_config_gcs_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @keytab = GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfigKerberosConfigKeytab.new(args['keytab'], to_s)\n          @principal = args['principal']\n          @krb5_config_gcs_uri = args['krb5ConfigGcsUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceHiveMetastoreConfigKerberosConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config_keytab.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceHiveMetastoreConfigKerberosConfigKeytab\n        attr_reader :cloud_secret\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cloud_secret = args['cloudSecret']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceHiveMetastoreConfigKerberosConfigKeytab\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMaintenanceWindow\n        attr_reader :hour_of_day\n\n        attr_reader :day_of_week\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hour_of_day = args['hourOfDay']\n          @day_of_week = args['dayOfWeek']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_integration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_metadata_integration_data_catalog_config'\nrequire 'google/dataprocmetastore/property/service_metadata_integration_dataplex_config'\nrequire 'google/dataprocmetastore/property/service_metadata_integration_dataplex_config_lake_resources'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataIntegration\n        attr_reader :data_catalog_config\n\n        attr_reader :dataplex_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @data_catalog_config = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataIntegrationDataCatalogConfig.new(args['dataCatalogConfig'], to_s)\n          @dataplex_config = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataIntegrationDataplexConfig.new(args['dataplexConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataIntegration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_integration_data_catalog_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataIntegrationDataCatalogConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataIntegrationDataCatalogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_integration_dataplex_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_metadata_integration_dataplex_config_lake_resources'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataIntegrationDataplexConfig\n        attr_reader :lake_resources\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @lake_resources = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataIntegrationDataplexConfigLakeResources.new(args['lakeResources'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataIntegrationDataplexConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_integration_dataplex_config_lake_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataIntegrationDataplexConfigLakeResources\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataIntegrationDataplexConfigLakeResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_management_activity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_metadata_management_activity_metadata_exports'\nrequire 'google/dataprocmetastore/property/service_metadata_management_activity_restores'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataManagementActivity\n        attr_reader :metadata_exports\n\n        attr_reader :restores\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metadata_exports = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataManagementActivityMetadataExportsArray.parse(args['metadataExports'], to_s)\n          @restores = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataManagementActivityRestoresArray.parse(args['restores'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataManagementActivity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_management_activity_metadata_exports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataManagementActivityMetadataExports\n        attr_reader :destination_gcs_uri\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :state\n\n        attr_reader :database_dump_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @destination_gcs_uri = args['destinationGcsUri']\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @state = args['state']\n          @database_dump_type = args['databaseDumpType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataManagementActivityMetadataExports\"\n        end\n      end\n\n      class ServiceMetadataManagementActivityMetadataExportsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceMetadataManagementActivityMetadataExports.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceMetadataManagementActivityMetadataExports.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_metadata_management_activity_restores.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceMetadataManagementActivityRestores\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :state\n\n        attr_reader :backup\n\n        attr_reader :type\n\n        attr_reader :details\n\n        attr_reader :backup_location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @state = args['state']\n          @backup = args['backup']\n          @type = args['type']\n          @details = args['details']\n          @backup_location = args['backupLocation']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceMetadataManagementActivityRestores\"\n        end\n      end\n\n      class ServiceMetadataManagementActivityRestoresArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceMetadataManagementActivityRestores.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceMetadataManagementActivityRestores.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_network_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_network_config_consumers'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceNetworkConfig\n        attr_reader :consumers\n\n        attr_reader :custom_routes_enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consumers = GoogleInSpec::DataprocMetastore::Property::ServiceNetworkConfigConsumersArray.parse(args['consumers'], to_s)\n          @custom_routes_enabled = args['customRoutesEnabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceNetworkConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_network_config_consumers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceNetworkConfigConsumers\n        attr_reader :subnetwork\n\n        attr_reader :endpoint_uri\n\n        attr_reader :endpoint_location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @subnetwork = args['subnetwork']\n          @endpoint_uri = args['endpointUri']\n          @endpoint_location = args['endpointLocation']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceNetworkConfigConsumers\"\n        end\n      end\n\n      class ServiceNetworkConfigConsumersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceNetworkConfigConsumers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceNetworkConfigConsumers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_scaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_scaling_config_autoscaling_config'\nrequire 'google/dataprocmetastore/property/service_scaling_config_autoscaling_config_limit_config'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceScalingConfig\n        attr_reader :instance_size\n\n        attr_reader :scaling_factor\n\n        attr_reader :autoscaling_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_size = args['instanceSize']\n          @scaling_factor = args['scalingFactor']\n          @autoscaling_config = GoogleInSpec::DataprocMetastore::Property::ServiceScalingConfigAutoscalingConfig.new(args['autoscalingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_scaling_config_autoscaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_scaling_config_autoscaling_config_limit_config'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceScalingConfigAutoscalingConfig\n        attr_reader :autoscaling_factor\n\n        attr_reader :autoscaling_enabled\n\n        attr_reader :limit_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @autoscaling_factor = args['autoscalingFactor']\n          @autoscaling_enabled = args['autoscalingEnabled']\n          @limit_config = GoogleInSpec::DataprocMetastore::Property::ServiceScalingConfigAutoscalingConfigLimitConfig.new(args['limitConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScalingConfigAutoscalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_scaling_config_autoscaling_config_limit_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceScalingConfigAutoscalingConfigLimitConfig\n        attr_reader :max_scaling_factor\n\n        attr_reader :min_scaling_factor\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaling_factor = args['maxScalingFactor']\n          @min_scaling_factor = args['minScalingFactor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScalingConfigAutoscalingConfigLimitConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_scheduled_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/service_scheduled_backup_latest_backup'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceScheduledBackup\n        attr_reader :enabled\n\n        attr_reader :cron_schedule\n\n        attr_reader :time_zone\n\n        attr_reader :next_scheduled_time\n\n        attr_reader :backup_location\n\n        attr_reader :latest_backup\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @cron_schedule = args['cronSchedule']\n          @time_zone = args['timeZone']\n          @next_scheduled_time = args['nextScheduledTime']\n          @backup_location = args['backupLocation']\n          @latest_backup = GoogleInSpec::DataprocMetastore::Property::ServiceScheduledBackupLatestBackup.new(args['latestBackup'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScheduledBackup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_scheduled_backup_latest_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceScheduledBackupLatestBackup\n        attr_reader :backup_id\n\n        attr_reader :start_time\n\n        attr_reader :state\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backup_id = args['backupId']\n          @start_time = args['startTime']\n          @state = args['state']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScheduledBackupLatestBackup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/service_telemetry_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceTelemetryConfig\n        attr_reader :log_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_format = args['logFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTelemetryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_encryption_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_auxiliary_versions'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_config_overrides'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config_keytab'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_labels'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_maintenance_window'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_data_catalog_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config_lake_resources'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_metadata_exports'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_restores'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_network_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_network_config_consumers'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config_limit_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup_latest_backup'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_telemetry_config'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevision\n        attr_reader :hive_metastore_config\n\n        attr_reader :name\n\n        attr_reader :create_time\n\n        attr_reader :update_time\n\n        attr_reader :labels\n\n        attr_reader :network\n\n        attr_reader :endpoint_uri\n\n        attr_reader :port\n\n        attr_reader :state\n\n        attr_reader :state_message\n\n        attr_reader :artifact_gcs_uri\n\n        attr_reader :tier\n\n        attr_reader :metadata_integration\n\n        attr_reader :maintenance_window\n\n        attr_reader :uid\n\n        attr_reader :metadata_management_activity\n\n        attr_reader :release_channel\n\n        attr_reader :encryption_config\n\n        attr_reader :network_config\n\n        attr_reader :database_type\n\n        attr_reader :telemetry_config\n\n        attr_reader :scaling_config\n\n        attr_reader :scheduled_backup\n\n        attr_reader :deletion_protection\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hive_metastore_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionHiveMetastoreConfig.new(args['hiveMetastoreConfig'], to_s)\n          @name = args['name']\n          @create_time = args['createTime']\n          @update_time = args['updateTime']\n          @labels = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionLabels.new(args['labels'], to_s)\n          @network = args['network']\n          @endpoint_uri = args['endpointUri']\n          @port = args['port']\n          @state = args['state']\n          @state_message = args['stateMessage']\n          @artifact_gcs_uri = args['artifactGcsUri']\n          @tier = args['tier']\n          @metadata_integration = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataIntegration.new(args['metadataIntegration'], to_s)\n          @maintenance_window = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMaintenanceWindow.new(args['maintenanceWindow'], to_s)\n          @uid = args['uid']\n          @metadata_management_activity = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataManagementActivity.new(args['metadataManagementActivity'], to_s)\n          @release_channel = args['releaseChannel']\n          @encryption_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionEncryptionConfig.new(args['encryptionConfig'], to_s)\n          @network_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionNetworkConfig.new(args['networkConfig'], to_s)\n          @database_type = args['databaseType']\n          @telemetry_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionTelemetryConfig.new(args['telemetryConfig'], to_s)\n          @scaling_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionScalingConfig.new(args['scalingConfig'], to_s)\n          @scheduled_backup = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionScheduledBackup.new(args['scheduledBackup'], to_s)\n          @deletion_protection = args['deletionProtection']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevision\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_encryption_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionEncryptionConfig\n        attr_reader :kms_key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key = args['kmsKey']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionEncryptionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_auxiliary_versions'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_config_overrides'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config_keytab'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionHiveMetastoreConfig\n        attr_reader :version\n\n        attr_reader :config_overrides\n\n        attr_reader :kerberos_config\n\n        attr_reader :endpoint_protocol\n\n        attr_reader :auxiliary_versions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n          @config_overrides = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionHiveMetastoreConfigConfigOverrides.new(args['configOverrides'], to_s)\n          @kerberos_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfig.new(args['kerberosConfig'], to_s)\n          @endpoint_protocol = args['endpointProtocol']\n          @auxiliary_versions = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionHiveMetastoreConfigAuxiliaryVersions.new(args['auxiliaryVersions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionHiveMetastoreConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_auxiliary_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionHiveMetastoreConfigAuxiliaryVersions\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionHiveMetastoreConfigAuxiliaryVersions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_config_overrides.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionHiveMetastoreConfigConfigOverrides\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionHiveMetastoreConfigConfigOverrides\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config_keytab'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfig\n        attr_reader :keytab\n\n        attr_reader :principal\n\n        attr_reader :krb5_config_gcs_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @keytab = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfigKeytab.new(args['keytab'], to_s)\n          @principal = args['principal']\n          @krb5_config_gcs_uri = args['krb5ConfigGcsUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config_keytab.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfigKeytab\n        attr_reader :cloud_secret\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cloud_secret = args['cloudSecret']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionHiveMetastoreConfigKerberosConfigKeytab\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_maintenance_window.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMaintenanceWindow\n        attr_reader :hour_of_day\n\n        attr_reader :day_of_week\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hour_of_day = args['hourOfDay']\n          @day_of_week = args['dayOfWeek']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMaintenanceWindow\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_data_catalog_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config_lake_resources'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataIntegration\n        attr_reader :data_catalog_config\n\n        attr_reader :dataplex_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @data_catalog_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataIntegrationDataCatalogConfig.new(args['dataCatalogConfig'], to_s)\n          @dataplex_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataIntegrationDataplexConfig.new(args['dataplexConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataIntegration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_data_catalog_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataIntegrationDataCatalogConfig\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataIntegrationDataCatalogConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config_lake_resources'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataIntegrationDataplexConfig\n        attr_reader :lake_resources\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @lake_resources = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataIntegrationDataplexConfigLakeResources.new(args['lakeResources'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataIntegrationDataplexConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config_lake_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataIntegrationDataplexConfigLakeResources\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataIntegrationDataplexConfigLakeResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_metadata_exports'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_restores'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataManagementActivity\n        attr_reader :metadata_exports\n\n        attr_reader :restores\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metadata_exports = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataManagementActivityMetadataExportsArray.parse(args['metadataExports'], to_s)\n          @restores = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionMetadataManagementActivityRestoresArray.parse(args['restores'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataManagementActivity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_metadata_exports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataManagementActivityMetadataExports\n        attr_reader :destination_gcs_uri\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :state\n\n        attr_reader :database_dump_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @destination_gcs_uri = args['destinationGcsUri']\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @state = args['state']\n          @database_dump_type = args['databaseDumpType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataManagementActivityMetadataExports\"\n        end\n      end\n\n      class ServiceBackupServiceRevisionMetadataManagementActivityMetadataExportsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceBackupServiceRevisionMetadataManagementActivityMetadataExports.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceBackupServiceRevisionMetadataManagementActivityMetadataExports.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_restores.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionMetadataManagementActivityRestores\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :state\n\n        attr_reader :backup\n\n        attr_reader :type\n\n        attr_reader :details\n\n        attr_reader :backup_location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @state = args['state']\n          @backup = args['backup']\n          @type = args['type']\n          @details = args['details']\n          @backup_location = args['backupLocation']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionMetadataManagementActivityRestores\"\n        end\n      end\n\n      class ServiceBackupServiceRevisionMetadataManagementActivityRestoresArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceBackupServiceRevisionMetadataManagementActivityRestores.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceBackupServiceRevisionMetadataManagementActivityRestores.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_network_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_network_config_consumers'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionNetworkConfig\n        attr_reader :consumers\n\n        attr_reader :custom_routes_enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @consumers = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionNetworkConfigConsumersArray.parse(args['consumers'], to_s)\n          @custom_routes_enabled = args['customRoutesEnabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionNetworkConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_network_config_consumers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionNetworkConfigConsumers\n        attr_reader :subnetwork\n\n        attr_reader :endpoint_uri\n\n        attr_reader :endpoint_location\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @subnetwork = args['subnetwork']\n          @endpoint_uri = args['endpointUri']\n          @endpoint_location = args['endpointLocation']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionNetworkConfigConsumers\"\n        end\n      end\n\n      class ServiceBackupServiceRevisionNetworkConfigConsumersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceBackupServiceRevisionNetworkConfigConsumers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceBackupServiceRevisionNetworkConfigConsumers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_scaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config_limit_config'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionScalingConfig\n        attr_reader :instance_size\n\n        attr_reader :scaling_factor\n\n        attr_reader :autoscaling_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_size = args['instanceSize']\n          @scaling_factor = args['scalingFactor']\n          @autoscaling_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionScalingConfigAutoscalingConfig.new(args['autoscalingConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionScalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config_limit_config'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionScalingConfigAutoscalingConfig\n        attr_reader :autoscaling_factor\n\n        attr_reader :autoscaling_enabled\n\n        attr_reader :limit_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @autoscaling_factor = args['autoscalingFactor']\n          @autoscaling_enabled = args['autoscalingEnabled']\n          @limit_config = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionScalingConfigAutoscalingConfigLimitConfig.new(args['limitConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionScalingConfigAutoscalingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config_limit_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionScalingConfigAutoscalingConfigLimitConfig\n        attr_reader :max_scaling_factor\n\n        attr_reader :min_scaling_factor\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_scaling_factor = args['maxScalingFactor']\n          @min_scaling_factor = args['minScalingFactor']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionScalingConfigAutoscalingConfigLimitConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup_latest_backup'\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionScheduledBackup\n        attr_reader :enabled\n\n        attr_reader :cron_schedule\n\n        attr_reader :time_zone\n\n        attr_reader :next_scheduled_time\n\n        attr_reader :backup_location\n\n        attr_reader :latest_backup\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @cron_schedule = args['cronSchedule']\n          @time_zone = args['timeZone']\n          @next_scheduled_time = args['nextScheduledTime']\n          @backup_location = args['backupLocation']\n          @latest_backup = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevisionScheduledBackupLatestBackup.new(args['latestBackup'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionScheduledBackup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup_latest_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionScheduledBackupLatestBackup\n        attr_reader :backup_id\n\n        attr_reader :start_time\n\n        attr_reader :state\n\n        attr_reader :duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @backup_id = args['backupId']\n          @start_time = args['startTime']\n          @state = args['state']\n          @duration = args['duration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionScheduledBackupLatestBackup\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dataprocmetastore/property/servicebackup_service_revision_telemetry_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DataprocMetastore\n    module Property\n      class ServiceBackupServiceRevisionTelemetryConfig\n        attr_reader :log_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_format = args['logFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBackupServiceRevisionTelemetryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfig\n        attr_reader :info_type_tf\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_type_tf = GoogleInSpec::DLP::Property::DTConfigInfoTypeTf.new(args['infoTypeTf'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTf\n        attr_reader :tf\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfArray.parse(args['tf'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTf\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_info_types'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config_characters_to_ignore'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_surrogate_info_type'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_surrogate_info_type'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_date_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_time_value'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTf\n        attr_reader :info_types\n\n        attr_reader :primitive_tf\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_types = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfInfoTypesArray.parse(args['infoTypes'], to_s)\n          @primitive_tf = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTf.new(args['primitiveTf'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTf\"\n        end\n      end\n\n      class DTConfigInfoTypeTfTfArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DTConfigInfoTypeTfTf.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DTConfigInfoTypeTfTf.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfInfoTypes\"\n        end\n      end\n\n      class DTConfigInfoTypeTfTfInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DTConfigInfoTypeTfTfInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DTConfigInfoTypeTfTfInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config_characters_to_ignore'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_surrogate_info_type'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_surrogate_info_type'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_date_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_time_value'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTf\n        attr_reader :replace_config\n\n        attr_reader :replace_with_info_type_config\n\n        attr_reader :character_mask_config\n\n        attr_reader :crypto_deterministic_config\n\n        attr_reader :crypto_replace_ffx_fpe_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @replace_config = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfReplaceConfig.new(args['replaceConfig'], to_s)\n          @replace_with_info_type_config = args['replaceWithInfoTypeConfig']\n          @character_mask_config = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfig.new(args['characterMaskConfig'], to_s)\n          @crypto_deterministic_config = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfig.new(args['cryptoDeterministicConfig'], to_s)\n          @crypto_replace_ffx_fpe_config = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfig.new(args['cryptoReplaceFfxFpeConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTf\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config_characters_to_ignore'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfig\n        attr_reader :masking_character\n\n        attr_reader :number_to_mask\n\n        attr_reader :reverse_order\n\n        attr_reader :characters_to_ignore\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @masking_character = args['maskingCharacter']\n          @number_to_mask = args['numberToMask']\n          @reverse_order = args['reverseOrder']\n          @characters_to_ignore = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnoreArray.parse(args['charactersToIgnore'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_character_mask_config_characters_to_ignore.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnore\n        attr_reader :characters_to_skip\n\n        attr_reader :common_characters_to_ignore\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @characters_to_skip = args['charactersToSkip']\n          @common_characters_to_ignore = args['commonCharactersToIgnore']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnore\"\n        end\n      end\n\n      class DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnoreArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnore.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DTConfigInfoTypeTfTfPrimitiveTfCharacterMaskConfigCharactersToIgnore.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_surrogate_info_type'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfig\n        attr_reader :crypto_key\n\n        attr_reader :surrogate_info_type\n\n        attr_reader :context\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @crypto_key = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKey.new(args['cryptoKey'], to_s)\n          @surrogate_info_type = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigSurrogateInfoType.new(args['surrogateInfoType'], to_s)\n          @context = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigContext.new(args['context'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigContext\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_unwrapped'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKey\n        attr_reader :transient\n\n        attr_reader :unwrapped\n\n        attr_reader :kms_wrapped\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @transient = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyTransient.new(args['transient'], to_s)\n          @unwrapped = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyUnwrapped.new(args['unwrapped'], to_s)\n          @kms_wrapped = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyKmsWrapped.new(args['kmsWrapped'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_kms_wrapped.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyKmsWrapped\n        attr_reader :wrapped_key\n\n        attr_reader :crypto_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @wrapped_key = args['wrappedKey']\n          @crypto_key_name = args['cryptoKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyKmsWrapped\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_transient.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyTransient\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyTransient\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_crypto_key_unwrapped.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyUnwrapped\n        attr_reader :key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigCryptoKeyUnwrapped\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_deterministic_config_surrogate_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigSurrogateInfoType\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoDeterministicConfigSurrogateInfoType\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_context'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_unwrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_surrogate_info_type'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfig\n        attr_reader :crypto_key\n\n        attr_reader :context\n\n        attr_reader :surrogate_info_type\n\n        attr_reader :common_alphabet\n\n        attr_reader :custom_alphabet\n\n        attr_reader :radix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @crypto_key = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKey.new(args['cryptoKey'], to_s)\n          @context = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigContext.new(args['context'], to_s)\n          @surrogate_info_type = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigSurrogateInfoType.new(args['surrogateInfoType'], to_s)\n          @common_alphabet = args['commonAlphabet']\n          @custom_alphabet = args['customAlphabet']\n          @radix = args['radix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigContext\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_kms_wrapped'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_transient'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_unwrapped'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKey\n        attr_reader :transient\n\n        attr_reader :unwrapped\n\n        attr_reader :kms_wrapped\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @transient = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyTransient.new(args['transient'], to_s)\n          @unwrapped = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyUnwrapped.new(args['unwrapped'], to_s)\n          @kms_wrapped = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyKmsWrapped.new(args['kmsWrapped'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_kms_wrapped.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyKmsWrapped\n        attr_reader :wrapped_key\n\n        attr_reader :crypto_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @wrapped_key = args['wrappedKey']\n          @crypto_key_name = args['cryptoKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyKmsWrapped\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_transient.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyTransient\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyTransient\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_crypto_key_unwrapped.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyUnwrapped\n        attr_reader :key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigCryptoKeyUnwrapped\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_crypto_replace_ffx_fpe_config_surrogate_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigSurrogateInfoType\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfCryptoReplaceFfxFpeConfigSurrogateInfoType\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_date_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_time_value'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfReplaceConfig\n        attr_reader :new_value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @new_value = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValue.new(args['newValue'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfReplaceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_date_value'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_time_value'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValue\n        attr_reader :integer_value\n\n        attr_reader :float_value\n\n        attr_reader :string_value\n\n        attr_reader :boolean_value\n\n        attr_reader :timestamp_value\n\n        attr_reader :time_value\n\n        attr_reader :date_value\n\n        attr_reader :day_of_week_value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @integer_value = args['integerValue']\n          @float_value = args['floatValue']\n          @string_value = args['stringValue']\n          @boolean_value = args['booleanValue']\n          @timestamp_value = args['timestampValue']\n          @time_value = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueTimeValue.new(args['timeValue'], to_s)\n          @date_value = GoogleInSpec::DLP::Property::DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueDateValue.new(args['dateValue'], to_s)\n          @day_of_week_value = args['dayOfWeekValue']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValue\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_date_value.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueDateValue\n        attr_reader :year\n\n        attr_reader :month\n\n        attr_reader :day\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @year = args['year']\n          @month = args['month']\n          @day = args['day']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueDateValue\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/dt_config_info_type_tf_tf_primitive_tf_replace_config_new_value_time_value.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueTimeValue\n        attr_reader :hours\n\n        attr_reader :minutes\n\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hours = args['hours']\n          @minutes = args['minutes']\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DTConfigInfoTypeTfTfPrimitiveTfReplaceConfigNewValueTimeValue\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfig\n        attr_reader :exclude_info_types\n\n        attr_reader :include_quote\n\n        attr_reader :min_likelihood\n\n        attr_reader :limits\n\n        attr_reader :info_types\n\n        attr_reader :content_options\n\n        attr_reader :rule_set\n\n        attr_reader :custom_info_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exclude_info_types = args['excludeInfoTypes']\n          @include_quote = args['includeQuote']\n          @min_likelihood = args['minLikelihood']\n          @limits = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigLimits.new(args['limits'], to_s)\n          @info_types = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigInfoTypesArray.parse(args['infoTypes'], to_s)\n          @content_options = args['contentOptions']\n          @rule_set = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetArray.parse(args['ruleSet'], to_s)\n          @custom_info_types = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesArray.parse(args['customInfoTypes'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_word_list'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_info_type'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_regex'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_stored_type'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypes\n        attr_reader :info_type\n\n        attr_reader :likelihood\n\n        attr_reader :exclusion_type\n\n        attr_reader :regex\n\n        attr_reader :dictionary\n\n        attr_reader :stored_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_type = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesInfoType.new(args['infoType'], to_s)\n          @likelihood = args['likelihood']\n          @exclusion_type = args['exclusionType']\n          @regex = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesRegex.new(args['regex'], to_s)\n          @dictionary = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesDictionary.new(args['dictionary'], to_s)\n          @stored_type = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesStoredType.new(args['storedType'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypes\"\n        end\n      end\n\n      class InspectTemplateInspectConfigCustomInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigCustomInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigCustomInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_word_list'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesDictionary\n        attr_reader :word_list\n\n        attr_reader :cloud_storage_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @word_list = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesDictionaryWordList.new(args['wordList'], to_s)\n          @cloud_storage_path = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigCustomInfoTypesDictionaryCloudStoragePath.new(args['cloudStoragePath'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesDictionary\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_cloud_storage_path.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesDictionaryCloudStoragePath\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesDictionaryCloudStoragePath\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_dictionary_word_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesDictionaryWordList\n        attr_reader :words\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @words = args['words']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesDictionaryWordList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesInfoType\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesInfoType\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_regex.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesRegex\n        attr_reader :pattern\n\n        attr_reader :group_indexes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pattern = args['pattern']\n          @group_indexes = args['groupIndexes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesRegex\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_custom_info_types_stored_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigCustomInfoTypesStoredType\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigCustomInfoTypesStoredType\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigInfoTypes\"\n        end\n      end\n\n      class InspectTemplateInspectConfigInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_limits.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigLimits\n        attr_reader :max_findings_per_item\n\n        attr_reader :max_findings_per_request\n\n        attr_reader :max_findings_per_info_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_findings_per_item = args['maxFindingsPerItem']\n          @max_findings_per_request = args['maxFindingsPerRequest']\n          @max_findings_per_info_type = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray.parse(args['maxFindingsPerInfoType'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigLimits\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type_info_type'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigLimitsMaxFindingsPerInfoType\n        attr_reader :info_type\n\n        attr_reader :max_findings\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_type = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType.new(args['infoType'], to_s)\n          @max_findings = args['maxFindings']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigLimitsMaxFindingsPerInfoType\"\n        end\n      end\n\n      class InspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSet\n        attr_reader :info_types\n\n        attr_reader :rules\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_types = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetInfoTypesArray.parse(args['infoTypes'], to_s)\n          @rules = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesArray.parse(args['rules'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSet\"\n        end\n      end\n\n      class InspectTemplateInspectConfigRuleSetArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigRuleSet.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigRuleSet.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetInfoTypes\"\n        end\n      end\n\n      class InspectTemplateInspectConfigRuleSetInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigRuleSetInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigRuleSetInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_word_list'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_regex'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_hotword_regex'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_likelihood_adjustment'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_proximity'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRules\n        attr_reader :hotword_rule\n\n        attr_reader :exclusion_rule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hotword_rule = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesHotwordRule.new(args['hotwordRule'], to_s)\n          @exclusion_rule = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRule.new(args['exclusionRule'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRules\"\n        end\n      end\n\n      class InspectTemplateInspectConfigRuleSetRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigRuleSetRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigRuleSetRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_word_list'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_regex'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRule\n        attr_reader :matching_type\n\n        attr_reader :dictionary\n\n        attr_reader :regex\n\n        attr_reader :exclude_info_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @matching_type = args['matchingType']\n          @dictionary = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionary.new(args['dictionary'], to_s)\n          @regex = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleRegex.new(args['regex'], to_s)\n          @exclude_info_types = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypes.new(args['excludeInfoTypes'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_word_list'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionary\n        attr_reader :word_list\n\n        attr_reader :cloud_storage_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @word_list = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryWordList.new(args['wordList'], to_s)\n          @cloud_storage_path = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryCloudStoragePath.new(args['cloudStoragePath'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionary\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_cloud_storage_path.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryCloudStoragePath\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryCloudStoragePath\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_dictionary_word_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryWordList\n        attr_reader :words\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @words = args['words']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleDictionaryWordList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types_info_types'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypes\n        attr_reader :info_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_types = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypesArray.parse(args['infoTypes'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypes\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_exclude_info_types_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypes\"\n        end\n      end\n\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InspectTemplateInspectConfigRuleSetRulesExclusionRuleExcludeInfoTypesInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_exclusion_rule_regex.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesExclusionRuleRegex\n        attr_reader :pattern\n\n        attr_reader :group_indexes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pattern = args['pattern']\n          @group_indexes = args['groupIndexes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesExclusionRuleRegex\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_hotword_regex'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_likelihood_adjustment'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_proximity'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesHotwordRule\n        attr_reader :hotword_regex\n\n        attr_reader :proximity\n\n        attr_reader :likelihood_adjustment\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hotword_regex = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesHotwordRuleHotwordRegex.new(args['hotwordRegex'], to_s)\n          @proximity = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesHotwordRuleProximity.new(args['proximity'], to_s)\n          @likelihood_adjustment = GoogleInSpec::DLP::Property::InspectTemplateInspectConfigRuleSetRulesHotwordRuleLikelihoodAdjustment.new(args['likelihoodAdjustment'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesHotwordRule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_hotword_regex.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesHotwordRuleHotwordRegex\n        attr_reader :pattern\n\n        attr_reader :group_indexes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pattern = args['pattern']\n          @group_indexes = args['groupIndexes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesHotwordRuleHotwordRegex\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_likelihood_adjustment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesHotwordRuleLikelihoodAdjustment\n        attr_reader :fixed_likelihood\n\n        attr_reader :relative_likelihood\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_likelihood = args['fixedLikelihood']\n          @relative_likelihood = args['relativeLikelihood']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesHotwordRuleLikelihoodAdjustment\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/inspecttemplate_inspect_config_rule_set_rules_hotword_rule_proximity.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class InspectTemplateInspectConfigRuleSetRulesHotwordRuleProximity\n        attr_reader :window_before\n\n        attr_reader :window_after\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @window_before = args['windowBefore']\n          @window_after = args['windowAfter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InspectTemplateInspectConfigRuleSetRulesHotwordRuleProximity\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_deidentify_stats'\nrequire 'google/dlp/property/job_act_det_deidentify_stats_requested_options'\nrequire 'google/dlp/property/job_act_det_deidentify_stats_requested_options_details'\nrequire 'google/dlp/property/job_act_det_dt_det'\nrequire 'google/dlp/property/job_act_det_dt_det_de_stats'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt_config'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt_deidentify_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDet\n        attr_reader :dt_det\n\n        attr_reader :deidentify_stats\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dt_det = GoogleInSpec::DLP::Property::JobActDetDtDet.new(args['dtDet'], to_s)\n          @deidentify_stats = GoogleInSpec::DLP::Property::JobActDetDeidentifyStats.new(args['deidentifyStats'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDet\"\n        end\n      end\n\n      class JobActDetArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDet.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDet.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_deidentify_stats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_deidentify_stats_requested_options'\nrequire 'google/dlp/property/job_act_det_deidentify_stats_requested_options_details'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDeidentifyStats\n        attr_reader :requested_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @requested_options = GoogleInSpec::DLP::Property::JobActDetDeidentifyStatsRequestedOptions.new(args['requestedOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDeidentifyStats\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_deidentify_stats_requested_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_deidentify_stats_requested_options_details'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDeidentifyStatsRequestedOptions\n        attr_reader :code\n\n        attr_reader :message\n\n        attr_reader :details\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n          @details = GoogleInSpec::DLP::Property::JobActDetDeidentifyStatsRequestedOptionsDetailsArray.parse(args['details'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDeidentifyStatsRequestedOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_deidentify_stats_requested_options_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDeidentifyStatsRequestedOptionsDetails\n        attr_reader :type\n\n        attr_reader :field1\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @field1 = args['field1']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDeidentifyStatsRequestedOptionsDetails\"\n        end\n      end\n\n      class JobActDetDeidentifyStatsRequestedOptionsDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDeidentifyStatsRequestedOptionsDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDeidentifyStatsRequestedOptionsDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_de_stats'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt_config'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt_deidentify_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDet\n        attr_reader :de_stats\n\n        attr_reader :req_opt\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @de_stats = GoogleInSpec::DLP::Property::JobActDetDtDetDeStats.new(args['deStats'], to_s)\n          @req_opt = GoogleInSpec::DLP::Property::JobActDetDtDetReqOpt.new(args['req_Opt'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_de_stats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetDeStats\n        attr_reader :transformed_bytes\n\n        attr_reader :transformation_count\n\n        attr_reader :transformation_error_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @transformed_bytes = args['transformedBytes']\n          @transformation_count = args['transformationCount']\n          @transformation_error_count = args['transformationErrorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetDeStats\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt_config'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt_deidentify_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOpt\n        attr_reader :snapshot_dt\n\n        attr_reader :snapshot_structured_dt\n\n        attr_reader :snapshot_img_rt\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @snapshot_dt = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotDt.new(args['snapshotDT'], to_s)\n          @snapshot_structured_dt = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotStructuredDt.new(args['snapshotStructuredDT'], to_s)\n          @snapshot_img_rt = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRt.new(args['snapshotImgRT'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOpt\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_di_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_di_template_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotDiTemplate\n        attr_reader :name\n\n        attr_reader :display_name\n\n        attr_reader :description\n\n        attr_reader :create_time\n\n        attr_reader :update_time\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @display_name = args['displayName']\n          @description = args['description']\n          @create_time = args['createTime']\n          @update_time = args['updateTime']\n          @config = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotDiTemplateConfig.new(args['config'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotDiTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_di_template_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotDiTemplateConfig\n        attr_reader :tf_error_handling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf_error_handling = args['tfErrorHandling']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotDiTemplateConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotDt\n        attr_reader :name\n\n        attr_reader :display_name\n\n        attr_reader :description\n\n        attr_reader :create_time\n\n        attr_reader :update_time\n\n        attr_reader :config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @display_name = args['displayName']\n          @description = args['description']\n          @create_time = args['createTime']\n          @update_time = args['updateTime']\n          @config = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotDtConfig.new(args['config'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotDt\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_dt_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotDtConfig\n        attr_reader :tf_error_handling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf_error_handling = args['tfErrorHandling']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotDtConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRt\n        attr_reader :name\n\n        attr_reader :display_name\n\n        attr_reader :description\n\n        attr_reader :create_time\n\n        attr_reader :update_time\n\n        attr_reader :dt_con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @display_name = args['displayName']\n          @description = args['description']\n          @create_time = args['createTime']\n          @update_time = args['updateTime']\n          @dt_con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtCon.new(args['dtCon'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRt\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtCon\n        attr_reader :tf_error_handling\n\n        attr_reader :info_type_tf\n\n        attr_reader :rec_tf\n\n        attr_reader :image_tf\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf_error_handling = args['tfErrorHandling']\n          @info_type_tf = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTf.new(args['infoTypeTf'], to_s)\n          @rec_tf = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTf.new(args['recTf'], to_s)\n          @image_tf = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConImageTf.new(args['ImageTf'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtCon\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTf\n        attr_reader :redaction_color\n\n        attr_reader :selected_info_types\n\n        attr_reader :all_info_types\n\n        attr_reader :all_text\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @redaction_color = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConImageTfRedactionColor.new(args['redactionColor'], to_s)\n          @selected_info_types = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypesArray.parse(args['selectedInfoTypes'], to_s)\n          @all_info_types = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypesArray.parse(args['allInfoTypes'], to_s)\n          @all_text = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllText.new(args['allText'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConImageTf\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypes\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_all_text.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllText\n        attr_reader :red\n\n        attr_reader :green\n\n        attr_reader :blue\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @red = args['red']\n          @green = args['green']\n          @blue = args['blue']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConImageTfAllText\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_redaction_color.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfRedactionColor\n        attr_reader :red\n\n        attr_reader :green\n\n        attr_reader :blue\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @red = args['red']\n          @green = args['green']\n          @blue = args['blue']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConImageTfRedactionColor\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_image_tf_selected_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypes\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypes\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConImageTfSelectedInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTf\n        attr_reader :tf\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfArray.parse(args['tf'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTf\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf_info_types'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTf\n        attr_reader :info_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @info_types = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypesArray.parse(args['infoTypes'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTf\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTf.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTf.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf_info_types_sensitivity_score'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypes\n        attr_reader :name\n\n        attr_reader :version\n\n        attr_reader :sensitivity_score\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @version = args['version']\n          @sensitivity_score = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypesSensitivityScore.new(args['sensitivityScore'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypes\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_info_type_tf_tf_info_types_sensitivity_score.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypesSensitivityScore\n        attr_reader :score\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @score = args['score']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConInfoTypeTfTfInfoTypesSensitivityScore\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTf\n        attr_reader :field_tf\n\n        attr_reader :rec_sup\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @field_tf = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfArray.parse(args['fieldTf'], to_s)\n          @rec_sup = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupArray.parse(args['recSup'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTf\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_fields'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTf\n        attr_reader :fields\n\n        attr_reader :con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fields = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFieldsArray.parse(args['fields'], to_s)\n          @con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfCon.new(args['con'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTf\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTf.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTf.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfCon\n        attr_reader :exps\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exps = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExps.new(args['exps'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfCon\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExps\n        attr_reader :logical_operator\n\n        attr_reader :con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @logical_operator = args['logicalOperator']\n          @con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsCon.new(args['con'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExps\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsCon\n        attr_reader :cond\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cond = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondArray.parse(args['cond'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsCon\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond_field'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond_new_val'\nrequire 'google/dlp/property/job_adddrosirdcrtftceccnvd_val'\nrequire 'google/dlp/property/job_adddrosirdcrtftceccnvt_val'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCond\n        attr_reader :field\n\n        attr_reader :operator\n\n        attr_reader :new_val\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @field = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondField.new(args['field'], to_s)\n          @operator = args['operator']\n          @new_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewVal.new(args['newVal'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCond\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCond.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCond.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond_field.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondField\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondField\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_con_exps_con_cond_new_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_adddrosirdcrtftceccnvd_val'\nrequire 'google/dlp/property/job_adddrosirdcrtftceccnvt_val'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewVal\n        attr_reader :integer_value\n\n        attr_reader :float_value\n\n        attr_reader :string_value\n\n        attr_reader :boolean_value\n\n        attr_reader :timestamp_value\n\n        attr_reader :time_val\n\n        attr_reader :date_val\n\n        attr_reader :day_of_week_val\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @integer_value = args['integerValue']\n          @float_value = args['floatValue']\n          @string_value = args['stringValue']\n          @boolean_value = args['booleanValue']\n          @timestamp_value = args['timestampValue']\n          @time_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValTimeVal.new(args['timeVal'], to_s)\n          @date_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValDateVal.new(args['dateVal'], to_s)\n          @day_of_week_val = args['dayOfWeekVal']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_field_tf_fields.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFields\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFields\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFieldsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFields.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfFields.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSup\n        attr_reader :con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupCon.new(args['con'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSup\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSup.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSup.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupCon\n        attr_reader :exp\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exp = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExp.new(args['exp'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupCon\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExp\n        attr_reader :logical_operator\n\n        attr_reader :con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @logical_operator = args['logicalOperator']\n          @con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpCon.new(args['con'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExp\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpCon\n        attr_reader :con\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @con = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConArray.parse(args['con'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpCon\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_field'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_date_val'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_time_val'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConCon\n        attr_reader :field\n\n        attr_reader :operator\n\n        attr_reader :new_val\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @field = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConField.new(args['field'], to_s)\n          @operator = args['operator']\n          @new_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewVal.new(args['newVal'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConCon\"\n        end\n      end\n\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConCon.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConCon.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_field.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConField\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConField\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_date_val'\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_time_val'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewVal\n        attr_reader :integer_val\n\n        attr_reader :float_val\n\n        attr_reader :string_val\n\n        attr_reader :boolean_val\n\n        attr_reader :timestamp_val\n\n        attr_reader :time_val\n\n        attr_reader :date_val\n\n        attr_reader :day_of_week_val\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @integer_val = args['integerVal']\n          @float_val = args['floatVal']\n          @string_val = args['stringVal']\n          @boolean_val = args['booleanVal']\n          @timestamp_val = args['timestampVal']\n          @time_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValTimeVal.new(args['timeVal'], to_s)\n          @date_val = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValDateVal.new(args['dateVal'], to_s)\n          @day_of_week_val = args['dayOfWeekVal']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_date_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValDateVal\n        attr_reader :year\n\n        attr_reader :month\n\n        attr_reader :day\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @year = args['year']\n          @month = args['month']\n          @day = args['day']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValDateVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_img_rt_dt_con_rec_tf_rec_sup_con_exp_con_con_new_val_time_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValTimeVal\n        attr_reader :hours\n\n        attr_reader :minutes\n\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hours = args['hours']\n          @minutes = args['minutes']\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfRecSupConExpConConNewValTimeVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt_deidentify_config'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotStructuredDt\n        attr_reader :name\n\n        attr_reader :display_name\n\n        attr_reader :description\n\n        attr_reader :create_time\n\n        attr_reader :update_time\n\n        attr_reader :deidentify_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @display_name = args['displayName']\n          @description = args['description']\n          @create_time = args['createTime']\n          @update_time = args['updateTime']\n          @deidentify_config = GoogleInSpec::DLP::Property::JobActDetDtDetReqOptSnapshotStructuredDtDeidentifyConfig.new(args['deidentifyConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotStructuredDt\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_act_det_dt_det_req_opt_snapshot_structured_dt_deidentify_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotStructuredDtDeidentifyConfig\n        attr_reader :tf_error_handling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @tf_error_handling = args['tfErrorHandling']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotStructuredDtDeidentifyConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_adddrosirdcrtftceccnvd_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValDateVal\n        attr_reader :year\n\n        attr_reader :month\n\n        attr_reader :day\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @year = args['year']\n          @month = args['month']\n          @day = args['day']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValDateVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_adddrosirdcrtftceccnvt_val.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValTimeVal\n        attr_reader :hours\n\n        attr_reader :minutes\n\n        attr_reader :seconds\n\n        attr_reader :nanos\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @hours = args['hours']\n          @minutes = args['minutes']\n          @seconds = args['seconds']\n          @nanos = args['nanos']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobActDetDtDetReqOptSnapshotImgRtDtConRecTfFieldTfConExpsConCondNewValTimeVal\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_errors.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_errors_details'\nrequire 'google/dlp/property/job_errors_details_status'\nrequire 'google/dlp/property/job_errors_details_status_details'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobErrors\n        attr_reader :details\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = GoogleInSpec::DLP::Property::JobErrorsDetails.new(args['details'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobErrors\"\n        end\n      end\n\n      class JobErrorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobErrors.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobErrors.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_errors_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_errors_details_status'\nrequire 'google/dlp/property/job_errors_details_status_details'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobErrorsDetails\n        attr_reader :status\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @status = GoogleInSpec::DLP::Property::JobErrorsDetailsStatus.new(args['status'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobErrorsDetails\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_errors_details_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/job_errors_details_status_details'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobErrorsDetailsStatus\n        attr_reader :code\n\n        attr_reader :message\n\n        attr_reader :details\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @code = args['code']\n          @message = args['message']\n          @details = GoogleInSpec::DLP::Property::JobErrorsDetailsStatusDetailsArray.parse(args['details'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobErrorsDetailsStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/job_errors_details_status_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobErrorsDetailsStatusDetails\n        attr_reader :type\n\n        attr_reader :field1\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @field1 = args['field1']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobErrorsDetailsStatusDetails\"\n        end\n      end\n\n      class JobErrorsDetailsStatusDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobErrorsDetailsStatusDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobErrorsDetailsStatusDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options_table_reference'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_kind'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_partition_id'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config_timestamp_field'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJob\n        attr_reader :inspect_template_name\n\n        attr_reader :storage_config\n\n        attr_reader :actions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @inspect_template_name = args['inspectTemplateName']\n          @storage_config = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfig.new(args['storageConfig'], to_s)\n          @actions = GoogleInSpec::DLP::Property::JobTriggerInspectJobActionsArray.parse(args['actions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_actions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings'\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config_table'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobActions\n        attr_reader :save_findings\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @save_findings = GoogleInSpec::DLP::Property::JobTriggerInspectJobActionsSaveFindings.new(args['saveFindings'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobActions\"\n        end\n      end\n\n      class JobTriggerInspectJobActionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTriggerInspectJobActions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTriggerInspectJobActions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_actions_save_findings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config_table'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobActionsSaveFindings\n        attr_reader :output_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_config = GoogleInSpec::DLP::Property::JobTriggerInspectJobActionsSaveFindingsOutputConfig.new(args['outputConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobActionsSaveFindings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config_table'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobActionsSaveFindingsOutputConfig\n        attr_reader :table\n\n        attr_reader :output_schema\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @table = GoogleInSpec::DLP::Property::JobTriggerInspectJobActionsSaveFindingsOutputConfigTable.new(args['table'], to_s)\n          @output_schema = args['outputSchema']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobActionsSaveFindingsOutputConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_actions_save_findings_output_config_table.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobActionsSaveFindingsOutputConfigTable\n        attr_reader :project_id\n\n        attr_reader :dataset_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @dataset_id = args['datasetId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobActionsSaveFindingsOutputConfigTable\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options_table_reference'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_kind'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_partition_id'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config_timestamp_field'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfig\n        attr_reader :timespan_config\n\n        attr_reader :datastore_options\n\n        attr_reader :cloud_storage_options\n\n        attr_reader :big_query_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @timespan_config = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigTimespanConfig.new(args['timespanConfig'], to_s)\n          @datastore_options = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigDatastoreOptions.new(args['datastoreOptions'], to_s)\n          @cloud_storage_options = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigCloudStorageOptions.new(args['cloudStorageOptions'], to_s)\n          @big_query_options = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigBigQueryOptions.new(args['bigQueryOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options_table_reference'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigBigQueryOptions\n        attr_reader :table_reference\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @table_reference = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigBigQueryOptionsTableReference.new(args['tableReference'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigBigQueryOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options_table_reference.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigBigQueryOptionsTableReference\n        attr_reader :project_id\n\n        attr_reader :dataset_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @dataset_id = args['datasetId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigBigQueryOptionsTableReference\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigCloudStorageOptions\n        attr_reader :file_set\n\n        attr_reader :bytes_limit_per_file\n\n        attr_reader :bytes_limit_per_file_percent\n\n        attr_reader :files_limit_percent\n\n        attr_reader :file_types\n\n        attr_reader :sample_method\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @file_set = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSet.new(args['fileSet'], to_s)\n          @bytes_limit_per_file = args['bytesLimitPerFile']\n          @bytes_limit_per_file_percent = args['bytesLimitPerFilePercent']\n          @files_limit_percent = args['filesLimitPercent']\n          @file_types = args['fileTypes']\n          @sample_method = args['sampleMethod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigCloudStorageOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSet\n        attr_reader :url\n\n        attr_reader :regex_file_set\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n          @regex_file_set = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSetRegexFileSet.new(args['regexFileSet'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSetRegexFileSet\n        attr_reader :bucket_name\n\n        attr_reader :include_regex\n\n        attr_reader :exclude_regex\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket_name = args['bucketName']\n          @include_regex = args['includeRegex']\n          @exclude_regex = args['excludeRegex']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigCloudStorageOptionsFileSetRegexFileSet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_kind'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_partition_id'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigDatastoreOptions\n        attr_reader :partition_id\n\n        attr_reader :kind\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @partition_id = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigDatastoreOptionsPartitionId.new(args['partitionId'], to_s)\n          @kind = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigDatastoreOptionsKind.new(args['kind'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigDatastoreOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_kind.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigDatastoreOptionsKind\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigDatastoreOptionsKind\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_partition_id.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigDatastoreOptionsPartitionId\n        attr_reader :project_id\n\n        attr_reader :namespace_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @namespace_id = args['namespaceId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigDatastoreOptionsPartitionId\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config_timestamp_field'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigTimespanConfig\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        attr_reader :enable_auto_population_of_timespan_config\n\n        attr_reader :timestamp_field\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n          @enable_auto_population_of_timespan_config = args['enableAutoPopulationOfTimespanConfig']\n          @timestamp_field = GoogleInSpec::DLP::Property::JobTriggerInspectJobStorageConfigTimespanConfigTimestampField.new(args['timestampField'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigTimespanConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config_timestamp_field.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerInspectJobStorageConfigTimespanConfigTimestampField\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerInspectJobStorageConfigTimespanConfigTimestampField\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_triggers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/jobtrigger_triggers_schedule'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerTriggers\n        attr_reader :schedule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @schedule = GoogleInSpec::DLP::Property::JobTriggerTriggersSchedule.new(args['schedule'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerTriggers\"\n        end\n      end\n\n      class JobTriggerTriggersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTriggerTriggers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTriggerTriggers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/jobtrigger_triggers_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class JobTriggerTriggersSchedule\n        attr_reader :recurrence_period_duration\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @recurrence_period_duration = args['recurrencePeriodDuration']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTriggerTriggersSchedule\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_dictionary.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/storedinfotype_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/storedinfotype_dictionary_word_list'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeDictionary\n        attr_reader :word_list\n\n        attr_reader :cloud_storage_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @word_list = GoogleInSpec::DLP::Property::StoredInfoTypeDictionaryWordList.new(args['wordList'], to_s)\n          @cloud_storage_path = GoogleInSpec::DLP::Property::StoredInfoTypeDictionaryCloudStoragePath.new(args['cloudStoragePath'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeDictionary\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_dictionary_cloud_storage_path.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeDictionaryCloudStoragePath\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeDictionaryCloudStoragePath\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_dictionary_word_list.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeDictionaryWordList\n        attr_reader :words\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @words = args['words']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeDictionaryWordList\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_field'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_table'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_cloud_storage_file_set'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_output_path'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionary\n        attr_reader :output_path\n\n        attr_reader :cloud_storage_file_set\n\n        attr_reader :big_query_field\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_path = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionaryOutputPath.new(args['outputPath'], to_s)\n          @cloud_storage_file_set = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionaryCloudStorageFileSet.new(args['cloudStorageFileSet'], to_s)\n          @big_query_field = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionaryBigQueryField.new(args['bigQueryField'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionary\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_field'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_table'\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionaryBigQueryField\n        attr_reader :table\n\n        attr_reader :field\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @table = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionaryBigQueryFieldTable.new(args['table'], to_s)\n          @field = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionaryBigQueryFieldField.new(args['field'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionaryBigQueryField\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_field.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionaryBigQueryFieldField\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionaryBigQueryFieldField\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_table.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionaryBigQueryFieldTable\n        attr_reader :project_id\n\n        attr_reader :dataset_id\n\n        attr_reader :table_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_id = args['projectId']\n          @dataset_id = args['datasetId']\n          @table_id = args['tableId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionaryBigQueryFieldTable\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary_cloud_storage_file_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionaryCloudStorageFileSet\n        attr_reader :url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @url = args['url']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionaryCloudStorageFileSet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_large_custom_dictionary_output_path.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeLargeCustomDictionaryOutputPath\n        attr_reader :path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeLargeCustomDictionaryOutputPath\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dlp/property/storedinfotype_regex.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DLP\n    module Property\n      class StoredInfoTypeRegex\n        attr_reader :pattern\n\n        attr_reader :group_indexes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pattern = args['pattern']\n          @group_indexes = args['groupIndexes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StoredInfoTypeRegex\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_dnssec_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dns/property/managedzone_dnssec_config_default_key_specs'\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneDnssecConfig\n        attr_reader :kind\n\n        attr_reader :non_existence\n\n        attr_reader :state\n\n        attr_reader :default_key_specs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @non_existence = args['nonExistence']\n          @state = args['state']\n          @default_key_specs = GoogleInSpec::DNS::Property::ManagedZoneDnssecConfigDefaultKeySpecsArray.parse(args['defaultKeySpecs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneDnssecConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_dnssec_config_default_key_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneDnssecConfigDefaultKeySpecs\n        attr_reader :algorithm\n\n        attr_reader :key_length\n\n        attr_reader :key_type\n\n        attr_reader :kind\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @algorithm = args['algorithm']\n          @key_length = args['keyLength']\n          @key_type = args['keyType']\n          @kind = args['kind']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneDnssecConfigDefaultKeySpecs\"\n        end\n      end\n\n      class ManagedZoneDnssecConfigDefaultKeySpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ManagedZoneDnssecConfigDefaultKeySpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ManagedZoneDnssecConfigDefaultKeySpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_forwarding_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dns/property/managedzone_forwarding_config_target_name_servers'\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneForwardingConfig\n        attr_reader :target_name_servers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_name_servers = GoogleInSpec::DNS::Property::ManagedZoneForwardingConfigTargetNameServersArray.parse(args['targetNameServers'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneForwardingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_forwarding_config_target_name_servers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneForwardingConfigTargetNameServers\n        attr_reader :ipv4_address\n\n        attr_reader :forwarding_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ipv4_address = args['ipv4Address']\n          @forwarding_path = args['forwardingPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneForwardingConfigTargetNameServers\"\n        end\n      end\n\n      class ManagedZoneForwardingConfigTargetNameServersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ManagedZoneForwardingConfigTargetNameServers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ManagedZoneForwardingConfigTargetNameServers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_peering_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dns/property/managedzone_peering_config_target_network'\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZonePeeringConfig\n        attr_reader :target_network\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target_network = GoogleInSpec::DNS::Property::ManagedZonePeeringConfigTargetNetwork.new(args['targetNetwork'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZonePeeringConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_peering_config_target_network.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZonePeeringConfigTargetNetwork\n        attr_reader :network_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network_url = args['networkUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZonePeeringConfigTargetNetwork\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_private_visibility_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dns/property/managedzone_private_visibility_config_networks'\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZonePrivateVisibilityConfig\n        attr_reader :networks\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @networks = GoogleInSpec::DNS::Property::ManagedZonePrivateVisibilityConfigNetworksArray.parse(args['networks'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZonePrivateVisibilityConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_private_visibility_config_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZonePrivateVisibilityConfigNetworks\n        attr_reader :network_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network_url = args['networkUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZonePrivateVisibilityConfigNetworks\"\n        end\n      end\n\n      class ManagedZonePrivateVisibilityConfigNetworksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ManagedZonePrivateVisibilityConfigNetworks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ManagedZonePrivateVisibilityConfigNetworks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_service_directory_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/dns/property/managedzone_service_directory_config_namespace'\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneServiceDirectoryConfig\n        attr_reader :namespace\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @namespace = GoogleInSpec::DNS::Property::ManagedZoneServiceDirectoryConfigNamespace.new(args['namespace'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneServiceDirectoryConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/dns/property/managedzone_service_directory_config_namespace.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module DNS\n    module Property\n      class ManagedZoneServiceDirectoryConfigNamespace\n        attr_reader :namespace_url\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @namespace_url = args['namespaceUrl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ManagedZoneServiceDirectoryConfigNamespace\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/filestore/property/instance_file_shares.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/filestore/property/instance_file_shares_nfs_export_options'\nmodule GoogleInSpec\n  module Filestore\n    module Property\n      class InstanceFileShares\n        attr_reader :name\n\n        attr_reader :capacity_gb\n\n        attr_reader :nfs_export_options\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @capacity_gb = args['capacityGb']\n          @nfs_export_options = GoogleInSpec::Filestore::Property::InstanceFileSharesNfsExportOptionsArray.parse(args['nfsExportOptions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceFileShares\"\n        end\n      end\n\n      class InstanceFileSharesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceFileShares.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceFileShares.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/filestore/property/instance_file_shares_nfs_export_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Filestore\n    module Property\n      class InstanceFileSharesNfsExportOptions\n        attr_reader :ip_ranges\n\n        attr_reader :access_mode\n\n        attr_reader :squash_mode\n\n        attr_reader :anon_uid\n\n        attr_reader :anon_gid\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_ranges = args['ipRanges']\n          @access_mode = args['accessMode']\n          @squash_mode = args['squashMode']\n          @anon_uid = args['anonUid']\n          @anon_gid = args['anonGid']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceFileSharesNfsExportOptions\"\n        end\n      end\n\n      class InstanceFileSharesNfsExportOptionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceFileSharesNfsExportOptions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceFileSharesNfsExportOptions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/filestore/property/instance_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Filestore\n    module Property\n      class InstanceNetworks\n        attr_reader :network\n\n        attr_reader :modes\n\n        attr_reader :reserved_ip_range\n\n        attr_reader :ip_addresses\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network = args['network']\n          @modes = args['modes']\n          @reserved_ip_range = args['reservedIpRange']\n          @ip_addresses = args['ipAddresses']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNetworks\"\n        end\n      end\n\n      class InstanceNetworksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceNetworks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceNetworks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/iam/property/iam_binding_condition.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamBindingCondition\n        attr_reader :title\n\n        attr_reader :description\n\n        attr_reader :expression\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @title = args['title']\n          @description = args['description']\n          @expression = args['expression']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamBindingCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/iam/property/iam_policy_audit_configs.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nrequire 'google/iam/property/iam_policy_audit_configs_audit_log_configs'\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyAuditConfigs\n        attr_reader :service\n\n        attr_reader :audit_log_configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service = args['service']\n          @audit_log_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsAuditLogConfigsArray.parse(args['auditLogConfigs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyAuditConfigs\"\n        end\n      end\n\n      class IamPolicyAuditConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyAuditConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyAuditConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/iam/property/iam_policy_audit_configs_audit_log_configs.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyAuditConfigsAuditLogConfigs\n        attr_reader :log_type\n\n        attr_reader :exempted_members\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_type = args['logType']\n          @exempted_members = args['exemptedMembers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyAuditConfigsAuditLogConfigs\"\n        end\n      end\n\n      class IamPolicyAuditConfigsAuditLogConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyAuditConfigsAuditLogConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyAuditConfigsAuditLogConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/iam/property/iam_policy_bindings.rb",
    "content": "# frozen_string_literal: false\n\n# Copyright 2017 Google Inc.\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nrequire 'google/iam/property/iam_binding_condition'\nmodule GoogleInSpec\n  module Iam\n    module Property\n      class IamPolicyBindings\n        attr_reader :role\n\n        attr_reader :members\n\n        attr_reader :condition\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @role = args['role']\n          @members = args['members']\n          @condition = GoogleInSpec::Iam::Property::IamBindingCondition.new(args['condition'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} IamPolicyBindings\"\n        end\n      end\n\n      class IamPolicyBindingsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IamPolicyBindings.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IamPolicyBindings.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/cryptokey_version_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class CryptoKeyVersionTemplate\n        attr_reader :algorithm\n\n        attr_reader :protection_level\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @algorithm = args['algorithm']\n          @protection_level = args['protectionLevel']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CryptoKeyVersionTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/cryptokeyversion_attestation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class CryptoKeyVersionAttestation\n        attr_reader :format\n\n        attr_reader :content\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @format = args['format']\n          @content = args['content']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CryptoKeyVersionAttestation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/cryptokeyversion_external_protection_level_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class CryptoKeyVersionExternalProtectionLevelOptions\n        attr_reader :external_key_uri\n\n        attr_reader :ekm_connection_key_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @external_key_uri = args['externalKeyUri']\n          @ekm_connection_key_path = args['ekmConnectionKeyPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CryptoKeyVersionExternalProtectionLevelOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/ekmconnection_service_resolvers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/kms/property/ekmconnection_service_resolvers_server_certificates'\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class EkmConnectionServiceResolvers\n        attr_reader :service_directory_service\n\n        attr_reader :endpoint_filter\n\n        attr_reader :hostname\n\n        attr_reader :server_certificates\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_directory_service = args['serviceDirectoryService']\n          @endpoint_filter = args['endpointFilter']\n          @hostname = args['hostname']\n          @server_certificates = GoogleInSpec::KMS::Property::EkmConnectionServiceResolversServerCertificates.new(args['serverCertificates'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EkmConnectionServiceResolvers\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/ekmconnection_service_resolvers_server_certificates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class EkmConnectionServiceResolversServerCertificates\n        attr_reader :raw_der\n\n        attr_reader :parsed\n\n        attr_reader :issuer\n\n        attr_reader :subject\n\n        attr_reader :subject_alternative_dns_names\n\n        attr_reader :not_before_time\n\n        attr_reader :not_after_time\n\n        attr_reader :serial_number\n\n        attr_reader :sha256_fingerprint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @raw_der = args['rawDer']\n          @parsed = args['parsed']\n          @issuer = args['issuer']\n          @subject = args['subject']\n          @subject_alternative_dns_names = args['subjectAlternativeDnsNames']\n          @not_before_time = parse_time_string(args['notBeforeTime'])\n          @not_after_time = parse_time_string(args['notAfterTime'])\n          @serial_number = args['serialNumber']\n          @sha256_fingerprint = args['sha256Fingerprint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EkmConnectionServiceResolversServerCertificates\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/keyringimportjob_attestation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class KeyRingImportJobAttestation\n        attr_reader :format\n\n        attr_reader :content\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @format = args['format']\n          @content = args['content']\n        end\n\n        def to_s\n          \"#{@parent_identifier} KeyRingImportJobAttestation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/kms/property/keyringimportjob_public_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module KMS\n    module Property\n      class KeyRingImportJobPublicKey\n        attr_reader :pem\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pem = args['pem']\n        end\n\n        def to_s\n          \"#{@parent_identifier} KeyRingImportJobPublicKey\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_bucket_options.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/logging/property/metric_bucket_options_explicit_buckets'\nrequire 'google/logging/property/metric_bucket_options_exponential_buckets'\nrequire 'google/logging/property/metric_bucket_options_linear_buckets'\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricBucketOptions\n        attr_reader :linear_buckets\n\n        attr_reader :exponential_buckets\n\n        attr_reader :explicit_buckets\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @linear_buckets = GoogleInSpec::Logging::Property::MetricBucketOptionsLinearBuckets.new(args['linearBuckets'], to_s)\n          @exponential_buckets = GoogleInSpec::Logging::Property::MetricBucketOptionsExponentialBuckets.new(args['exponentialBuckets'], to_s)\n          @explicit_buckets = GoogleInSpec::Logging::Property::MetricBucketOptionsExplicitBuckets.new(args['explicitBuckets'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricBucketOptions\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_bucket_options_explicit_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricBucketOptionsExplicitBuckets\n        attr_reader :bounds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bounds = args['bounds']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricBucketOptionsExplicitBuckets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_bucket_options_exponential_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricBucketOptionsExponentialBuckets\n        attr_reader :num_finite_buckets\n\n        attr_reader :growth_factor\n\n        attr_reader :scale\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_finite_buckets = args['numFiniteBuckets']\n          @growth_factor = args['growthFactor']\n          @scale = args['scale']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricBucketOptionsExponentialBuckets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_bucket_options_linear_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricBucketOptionsLinearBuckets\n        attr_reader :num_finite_buckets\n\n        attr_reader :width\n\n        attr_reader :offset\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @num_finite_buckets = args['numFiniteBuckets']\n          @width = args['width']\n          @offset = args['offset']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricBucketOptionsLinearBuckets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_metric_descriptor.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/logging/property/metric_metric_descriptor_labels'\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricMetricDescriptor\n        attr_reader :unit\n\n        attr_reader :value_type\n\n        attr_reader :metric_kind\n\n        attr_reader :labels\n\n        attr_reader :display_name\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @unit = args['unit']\n          @value_type = args['valueType']\n          @metric_kind = args['metricKind']\n          @labels = GoogleInSpec::Logging::Property::MetricMetricDescriptorLabelsArray.parse(args['labels'], to_s)\n          @display_name = args['displayName']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricMetricDescriptor\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/logging/property/metric_metric_descriptor_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Logging\n    module Property\n      class MetricMetricDescriptorLabels\n        attr_reader :key\n\n        attr_reader :description\n\n        attr_reader :value_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n          @description = args['description']\n          @value_type = args['valueType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetricMetricDescriptorLabels\"\n        end\n      end\n\n      class MetricMetricDescriptorLabelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return MetricMetricDescriptorLabels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| MetricMetricDescriptorLabels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/memcache/property/instance_memcache_nodes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Memcache\n    module Property\n      class InstanceMemcacheNodes\n        attr_reader :node_id\n\n        attr_reader :zone\n\n        attr_reader :port\n\n        attr_reader :host\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @node_id = args['nodeId']\n          @zone = args['zone']\n          @port = args['port']\n          @host = args['host']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMemcacheNodes\"\n        end\n      end\n\n      class InstanceMemcacheNodesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceMemcacheNodes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceMemcacheNodes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/memcache/property/instance_memcache_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Memcache\n    module Property\n      class InstanceMemcacheParameters\n        attr_reader :id\n\n        attr_reader :params\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @params = args['params']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceMemcacheParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/memcache/property/instance_node_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Memcache\n    module Property\n      class InstanceNodeConfig\n        attr_reader :cpu_count\n\n        attr_reader :memory_size_mb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cpu_count = args['cpuCount']\n          @memory_size_mb = args['memorySizeMb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceNodeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/memcache/property/instance_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Memcache\n    module Property\n      class InstanceParameters\n        attr_reader :id\n\n        attr_reader :params\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @params = args['params']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/mlengine/property/model_default_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module MLEngine\n    module Property\n      class ModelDefaultVersion\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDefaultVersion\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_absent'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_absent_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_absent_trigger'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_monitoring_query_language'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_monitoring_query_language_trigger'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_denominator_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_trigger'\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditions\n        attr_reader :condition_absent\n\n        attr_reader :name\n\n        attr_reader :condition_monitoring_query_language\n\n        attr_reader :condition_threshold\n\n        attr_reader :display_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @condition_absent = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionAbsent.new(args['conditionAbsent'], to_s)\n          @name = args['name']\n          @condition_monitoring_query_language = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionMonitoringQueryLanguage.new(args['conditionMonitoringQueryLanguage'], to_s)\n          @condition_threshold = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionThreshold.new(args['conditionThreshold'], to_s)\n          @display_name = args['displayName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditions\"\n        end\n      end\n\n      class AlertPolicyConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AlertPolicyConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AlertPolicyConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_absent.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_absent_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_absent_trigger'\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionAbsent\n        attr_reader :aggregations\n\n        attr_reader :trigger\n\n        attr_reader :duration\n\n        attr_reader :filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @aggregations = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionAbsentAggregationsArray.parse(args['aggregations'], to_s)\n          @trigger = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionAbsentTrigger.new(args['trigger'], to_s)\n          @duration = args['duration']\n          @filter = args['filter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionAbsent\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_absent_aggregations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionAbsentAggregations\n        attr_reader :per_series_aligner\n\n        attr_reader :group_by_fields\n\n        attr_reader :alignment_period\n\n        attr_reader :cross_series_reducer\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @per_series_aligner = args['perSeriesAligner']\n          @group_by_fields = args['groupByFields']\n          @alignment_period = args['alignmentPeriod']\n          @cross_series_reducer = args['crossSeriesReducer']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionAbsentAggregations\"\n        end\n      end\n\n      class AlertPolicyConditionsConditionAbsentAggregationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AlertPolicyConditionsConditionAbsentAggregations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AlertPolicyConditionsConditionAbsentAggregations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_absent_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionAbsentTrigger\n        attr_reader :percent\n\n        attr_reader :count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @percent = args['percent']\n          @count = args['count']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionAbsentTrigger\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_monitoring_query_language.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_monitoring_query_language_trigger'\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionMonitoringQueryLanguage\n        attr_reader :query\n\n        attr_reader :duration\n\n        attr_reader :trigger\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @query = args['query']\n          @duration = args['duration']\n          @trigger = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionMonitoringQueryLanguageTrigger.new(args['trigger'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionMonitoringQueryLanguage\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_monitoring_query_language_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionMonitoringQueryLanguageTrigger\n        attr_reader :percent\n\n        attr_reader :count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @percent = args['percent']\n          @count = args['count']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionMonitoringQueryLanguageTrigger\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_threshold.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_denominator_aggregations'\nrequire 'google/monitoring/property/alertpolicy_conditions_condition_threshold_trigger'\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionThreshold\n        attr_reader :threshold_value\n\n        attr_reader :denominator_filter\n\n        attr_reader :denominator_aggregations\n\n        attr_reader :duration\n\n        attr_reader :comparison\n\n        attr_reader :trigger\n\n        attr_reader :aggregations\n\n        attr_reader :filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @threshold_value = args['thresholdValue']\n          @denominator_filter = args['denominatorFilter']\n          @denominator_aggregations = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionThresholdDenominatorAggregationsArray.parse(args['denominatorAggregations'], to_s)\n          @duration = args['duration']\n          @comparison = args['comparison']\n          @trigger = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionThresholdTrigger.new(args['trigger'], to_s)\n          @aggregations = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsConditionThresholdAggregationsArray.parse(args['aggregations'], to_s)\n          @filter = args['filter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionThreshold\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_threshold_aggregations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionThresholdAggregations\n        attr_reader :per_series_aligner\n\n        attr_reader :group_by_fields\n\n        attr_reader :alignment_period\n\n        attr_reader :cross_series_reducer\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @per_series_aligner = args['perSeriesAligner']\n          @group_by_fields = args['groupByFields']\n          @alignment_period = args['alignmentPeriod']\n          @cross_series_reducer = args['crossSeriesReducer']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionThresholdAggregations\"\n        end\n      end\n\n      class AlertPolicyConditionsConditionThresholdAggregationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AlertPolicyConditionsConditionThresholdAggregations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AlertPolicyConditionsConditionThresholdAggregations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_threshold_denominator_aggregations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionThresholdDenominatorAggregations\n        attr_reader :per_series_aligner\n\n        attr_reader :group_by_fields\n\n        attr_reader :alignment_period\n\n        attr_reader :cross_series_reducer\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @per_series_aligner = args['perSeriesAligner']\n          @group_by_fields = args['groupByFields']\n          @alignment_period = args['alignmentPeriod']\n          @cross_series_reducer = args['crossSeriesReducer']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionThresholdDenominatorAggregations\"\n        end\n      end\n\n      class AlertPolicyConditionsConditionThresholdDenominatorAggregationsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return AlertPolicyConditionsConditionThresholdDenominatorAggregations.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| AlertPolicyConditionsConditionThresholdDenominatorAggregations.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_conditions_condition_threshold_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyConditionsConditionThresholdTrigger\n        attr_reader :percent\n\n        attr_reader :count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @percent = args['percent']\n          @count = args['count']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyConditionsConditionThresholdTrigger\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_creation_record.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyCreationRecord\n        attr_reader :mutate_time\n\n        attr_reader :mutated_by\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @mutate_time = args['mutateTime']\n          @mutated_by = args['mutatedBy']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyCreationRecord\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/monitoring/property/alertpolicy_documentation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Monitoring\n    module Property\n      class AlertPolicyDocumentation\n        attr_reader :content\n\n        attr_reader :mime_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @content = args['content']\n          @mime_type = args['mimeType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} AlertPolicyDocumentation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/google_managed_constraint'\nrequire 'google/orgpolicy/property/list_constraint'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class Constraints\n        attr_reader :display_name\n\n        attr_reader :google_managed_constraint\n\n        attr_reader :description\n\n        attr_reader :constraint_default\n\n        attr_reader :supports_dry_run\n\n        attr_reader :name\n\n        attr_reader :list_constraint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @display_name = args['displayName']\n          @google_managed_constraint = GoogleInSpec::Orgpolicy::Property::GoogleManagedConstraint.new(args['googleManagedConstraint'], to_s)\n          @description = args['description']\n          @constraint_default = args['constraintDefault']\n          @supports_dry_run = args['supportsDryRun']\n          @name = args['name']\n          @list_constraint = GoogleInSpec::Orgpolicy::Property::ListConstraint.new(args['listConstraint'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} Constraints\"\n        end\n      end\n\n      class ConstraintsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return Constraints.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| Constraints.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/google_managed_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class GoogleManagedConstraint\n        attr_reader :action_type\n\n        attr_reader :resource_types\n\n        attr_reader :condition\n\n        attr_reader :method_types\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @action_type = args['actionType']\n          @resource_types = args['resourceTypes']\n          @condition = args['condition']\n          @method_types = args['methodTypes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} GoogleManagedConstraint\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/list_constraint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class ListConstraint\n        attr_reader :supports_under\n\n        attr_reader :supports_in\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @supports_under = args['supportsUnder']\n          @supports_in = args['supportsIn']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ListConstraint\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_alternate.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_alternate_spec'\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyAlternate\n        attr_reader :launch\n\n        attr_reader :spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @launch = args['launch']\n          @spec = GoogleInSpec::Orgpolicy::Property::PolicyAlternateSpec.new(args['spec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyAlternate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_alternate_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyAlternateSpec\n        attr_reader :update_time\n\n        attr_reader :rules\n\n        attr_reader :etag\n\n        attr_reader :reset\n\n        attr_reader :inherit_from_parent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @update_time = args['updateTime']\n          @rules = GoogleInSpec::Orgpolicy::Property::PolicyAlternateSpecRulesArray.parse(args['rules'], to_s)\n          @etag = args['etag']\n          @reset = args['reset']\n          @inherit_from_parent = args['inheritFromParent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyAlternateSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_alternate_spec_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules_condition'\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules_values'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyAlternateSpecRules\n        attr_reader :condition\n\n        attr_reader :deny_all\n\n        attr_reader :allow_all\n\n        attr_reader :enforce\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @condition = GoogleInSpec::Orgpolicy::Property::PolicyAlternateSpecRulesCondition.new(args['condition'], to_s)\n          @deny_all = args['denyAll']\n          @allow_all = args['allowAll']\n          @enforce = args['enforce']\n          @values = GoogleInSpec::Orgpolicy::Property::PolicyAlternateSpecRulesValues.new(args['values'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyAlternateSpecRules\"\n        end\n      end\n\n      class PolicyAlternateSpecRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PolicyAlternateSpecRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PolicyAlternateSpecRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_alternate_spec_rules_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyAlternateSpecRulesCondition\n        attr_reader :title\n\n        attr_reader :location\n\n        attr_reader :expression\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @title = args['title']\n          @location = args['location']\n          @expression = args['expression']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyAlternateSpecRulesCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_alternate_spec_rules_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyAlternateSpecRulesValues\n        attr_reader :denied_values\n\n        attr_reader :allowed_values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @denied_values = args['deniedValues']\n          @allowed_values = args['allowedValues']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyAlternateSpecRulesValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_dry_run_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyDryRunSpec\n        attr_reader :update_time\n\n        attr_reader :rules\n\n        attr_reader :etag\n\n        attr_reader :reset\n\n        attr_reader :inherit_from_parent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @update_time = args['updateTime']\n          @rules = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpecRulesArray.parse(args['rules'], to_s)\n          @etag = args['etag']\n          @reset = args['reset']\n          @inherit_from_parent = args['inheritFromParent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyDryRunSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_dry_run_spec_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules_condition'\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules_values'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyDryRunSpecRules\n        attr_reader :condition\n\n        attr_reader :deny_all\n\n        attr_reader :allow_all\n\n        attr_reader :enforce\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @condition = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpecRulesCondition.new(args['condition'], to_s)\n          @deny_all = args['denyAll']\n          @allow_all = args['allowAll']\n          @enforce = args['enforce']\n          @values = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpecRulesValues.new(args['values'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyDryRunSpecRules\"\n        end\n      end\n\n      class PolicyDryRunSpecRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PolicyDryRunSpecRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PolicyDryRunSpecRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_dry_run_spec_rules_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyDryRunSpecRulesCondition\n        attr_reader :title\n\n        attr_reader :location\n\n        attr_reader :expression\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @title = args['title']\n          @location = args['location']\n          @expression = args['expression']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyDryRunSpecRulesCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_dry_run_spec_rules_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicyDryRunSpecRulesValues\n        attr_reader :denied_values\n\n        attr_reader :allowed_values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @denied_values = args['deniedValues']\n          @allowed_values = args['allowedValues']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicyDryRunSpecRulesValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_spec_rules'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicySpec\n        attr_reader :update_time\n\n        attr_reader :rules\n\n        attr_reader :etag\n\n        attr_reader :reset\n\n        attr_reader :inherit_from_parent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @update_time = args['updateTime']\n          @rules = GoogleInSpec::Orgpolicy::Property::PolicySpecRulesArray.parse(args['rules'], to_s)\n          @etag = args['etag']\n          @reset = args['reset']\n          @inherit_from_parent = args['inheritFromParent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicySpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_spec_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/orgpolicy/property/policy_spec_rules_condition'\nrequire 'google/orgpolicy/property/policy_spec_rules_values'\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicySpecRules\n        attr_reader :condition\n\n        attr_reader :deny_all\n\n        attr_reader :allow_all\n\n        attr_reader :enforce\n\n        attr_reader :values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @condition = GoogleInSpec::Orgpolicy::Property::PolicySpecRulesCondition.new(args['condition'], to_s)\n          @deny_all = args['denyAll']\n          @allow_all = args['allowAll']\n          @enforce = args['enforce']\n          @values = GoogleInSpec::Orgpolicy::Property::PolicySpecRulesValues.new(args['values'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicySpecRules\"\n        end\n      end\n\n      class PolicySpecRulesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PolicySpecRules.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PolicySpecRules.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_spec_rules_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicySpecRulesCondition\n        attr_reader :title\n\n        attr_reader :location\n\n        attr_reader :expression\n\n        attr_reader :description\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @title = args['title']\n          @location = args['location']\n          @expression = args['expression']\n          @description = args['description']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicySpecRulesCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/orgpolicy/property/policy_spec_rules_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Orgpolicy\n    module Property\n      class PolicySpecRulesValues\n        attr_reader :denied_values\n\n        attr_reader :allowed_values\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @denied_values = args['deniedValues']\n          @allowed_values = args['allowedValues']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PolicySpecRulesValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/subscription_dead_letter_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionDeadLetterPolicy\n        attr_reader :dead_letter_topic\n\n        attr_reader :max_delivery_attempts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @dead_letter_topic = args['deadLetterTopic']\n          @max_delivery_attempts = args['maxDeliveryAttempts']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionDeadLetterPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/subscription_expiration_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionExpirationPolicy\n        attr_reader :ttl\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ttl = args['ttl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionExpirationPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/subscription_push_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/pubsub/property/subscription_push_config_oidc_token'\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionPushConfig\n        attr_reader :oidc_token\n\n        attr_reader :push_endpoint\n\n        attr_reader :attributes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @oidc_token = GoogleInSpec::Pubsub::Property::SubscriptionPushConfigOidcToken.new(args['oidcToken'], to_s)\n          @push_endpoint = args['pushEndpoint']\n          @attributes = args['attributes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionPushConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/subscription_push_config_oidc_token.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionPushConfigOidcToken\n        attr_reader :service_account_email\n\n        attr_reader :audience\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_account_email = args['serviceAccountEmail']\n          @audience = args['audience']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionPushConfigOidcToken\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/subscription_retry_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class SubscriptionRetryPolicy\n        attr_reader :minimum_backoff\n\n        attr_reader :maximum_backoff\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @minimum_backoff = args['minimumBackoff']\n          @maximum_backoff = args['maximumBackoff']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SubscriptionRetryPolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/pubsub/property/topic_message_storage_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Pubsub\n    module Property\n      class TopicMessageStoragePolicy\n        attr_reader :allowed_persistence_regions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @allowed_persistence_regions = args['allowedPersistenceRegions']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TopicMessageStoragePolicy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/redis/property/instance_server_ca_certs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Redis\n    module Property\n      class InstanceServerCaCerts\n        attr_reader :serial_number\n\n        attr_reader :cert\n\n        attr_reader :create_time\n\n        attr_reader :expire_time\n\n        attr_reader :sha1_fingerprint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @serial_number = args['serialNumber']\n          @cert = args['cert']\n          @create_time = args['createTime']\n          @expire_time = args['expireTime']\n          @sha1_fingerprint = args['sha1Fingerprint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} InstanceServerCaCerts\"\n        end\n      end\n\n      class InstanceServerCaCertsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return InstanceServerCaCerts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| InstanceServerCaCerts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/resourcemanager/property/organization_owner.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module ResourceManager\n    module Property\n      class OrganizationOwner\n        attr_reader :directory_customer_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @directory_customer_id = args['directoryCustomerId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} OrganizationOwner\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/resourcemanager/property/project_parent.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module ResourceManager\n    module Property\n      class ProjectParent\n        attr_reader :type\n\n        attr_reader :id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @id = args['id']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ProjectParent\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_binary_authorization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobBinaryAuthorization\n        attr_reader :use_default\n\n        attr_reader :policy\n\n        attr_reader :breakglass_justification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @use_default = args['useDefault']\n          @policy = args['policy']\n          @breakglass_justification = args['breakglassJustification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobBinaryAuthorization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobConditions\n        attr_reader :type\n\n        attr_reader :state\n\n        attr_reader :message\n\n        attr_reader :last_transition_time\n\n        attr_reader :severity\n\n        attr_reader :reason\n\n        attr_reader :revision_reason\n\n        attr_reader :execution_reason\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @state = args['state']\n          @message = args['message']\n          @last_transition_time = args['lastTransitionTime']\n          @severity = args['severity']\n          @reason = args['reason']\n          @revision_reason = args['revisionReason']\n          @execution_reason = args['executionReason']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobConditions\"\n        end\n      end\n\n      class JobConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_latest_created_execution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobLatestCreatedExecution\n        attr_reader :name\n\n        attr_reader :create_time\n\n        attr_reader :completion_time\n\n        attr_reader :delete_time\n\n        attr_reader :completion_status\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @create_time = args['createTime']\n          @completion_time = args['completionTime']\n          @delete_time = args['deleteTime']\n          @completion_status = args['completionStatus']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobLatestCreatedExecution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_annotations'\nrequire 'google/run/property/job_template_labels'\nrequire 'google/run/property/job_template_template'\nrequire 'google/run/property/job_template_template_containers'\nrequire 'google/run/property/job_template_template_volumes'\nrequire 'google/run/property/job_template_template_vpc_access'\nrequire 'google/run/property/job_template_template_vpc_access_network_interfaces'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplate\n        attr_reader :labels\n\n        attr_reader :annotations\n\n        attr_reader :parallelism\n\n        attr_reader :task_count\n\n        attr_reader :template\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @labels = GoogleInSpec::Run::Property::JobTemplateLabels.new(args['labels'], to_s)\n          @annotations = GoogleInSpec::Run::Property::JobTemplateAnnotations.new(args['annotations'], to_s)\n          @parallelism = args['parallelism']\n          @task_count = args['taskCount']\n          @template = GoogleInSpec::Run::Property::JobTemplateTemplate.new(args['template'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers'\nrequire 'google/run/property/job_template_template_volumes'\nrequire 'google/run/property/job_template_template_vpc_access'\nrequire 'google/run/property/job_template_template_vpc_access_network_interfaces'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplate\n        attr_reader :containers\n\n        attr_reader :volumes\n\n        attr_reader :max_retries\n\n        attr_reader :timeout\n\n        attr_reader :service_account\n\n        attr_reader :execution_environment\n\n        attr_reader :encryption_key\n\n        attr_reader :vpc_access\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @containers = GoogleInSpec::Run::Property::JobTemplateTemplateContainersArray.parse(args['containers'], to_s)\n          @volumes = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesArray.parse(args['volumes'], to_s)\n          @max_retries = args['maxRetries']\n          @timeout = args['timeout']\n          @service_account = args['serviceAccount']\n          @execution_environment = args['executionEnvironment']\n          @encryption_key = args['encryptionKey']\n          @vpc_access = GoogleInSpec::Run::Property::JobTemplateTemplateVPCAccess.new(args['vpcAccess'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_env'\nrequire 'google/run/property/job_template_template_containers_liveness_probe'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_grpc'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_http_get'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_http_get_http_headers'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_tcp_socket'\nrequire 'google/run/property/job_template_template_containers_ports'\nrequire 'google/run/property/job_template_template_containers_resources'\nrequire 'google/run/property/job_template_template_containers_resources_limits'\nrequire 'google/run/property/job_template_template_containers_startup_probe'\nrequire 'google/run/property/job_template_template_containers_startup_probe_grpc'\nrequire 'google/run/property/job_template_template_containers_startup_probe_http_get'\nrequire 'google/run/property/job_template_template_containers_startup_probe_http_get_http_headers'\nrequire 'google/run/property/job_template_template_containers_startup_probe_tcp_socket'\nrequire 'google/run/property/job_template_template_containers_volume_mounts'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainers\n        attr_reader :name\n\n        attr_reader :image\n\n        attr_reader :command\n\n        attr_reader :args\n\n        attr_reader :env\n\n        attr_reader :resources\n\n        attr_reader :ports\n\n        attr_reader :volume_mounts\n\n        attr_reader :working_dir\n\n        attr_reader :liveness_probe\n\n        attr_reader :startup_probe\n\n        attr_reader :depends_on\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @image = args['image']\n          @command = args['command']\n          @args = args['args']\n          @env = GoogleInSpec::Run::Property::JobTemplateTemplateContainersEnvArray.parse(args['env'], to_s)\n          @resources = GoogleInSpec::Run::Property::JobTemplateTemplateContainersResources.new(args['resources'], to_s)\n          @ports = GoogleInSpec::Run::Property::JobTemplateTemplateContainersPortsArray.parse(args['ports'], to_s)\n          @volume_mounts = GoogleInSpec::Run::Property::JobTemplateTemplateContainersVolumeMountsArray.parse(args['volumeMounts'], to_s)\n          @working_dir = args['workingDir']\n          @liveness_probe = GoogleInSpec::Run::Property::JobTemplateTemplateContainersLivenessProbe.new(args['livenessProbe'], to_s)\n          @startup_probe = GoogleInSpec::Run::Property::JobTemplateTemplateContainersStartupProbe.new(args['startupProbe'], to_s)\n          @depends_on = args['dependsOn']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainers\"\n        end\n      end\n\n      class JobTemplateTemplateContainersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_env_value_source'\nrequire 'google/run/property/job_template_template_containers_env_value_source_secret_key_ref'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        attr_reader :value_source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n          @value_source = GoogleInSpec::Run::Property::JobTemplateTemplateContainersEnvValueSource.new(args['valueSource'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersEnv\"\n        end\n      end\n\n      class JobTemplateTemplateContainersEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainersEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainersEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_env_value_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_env_value_source_secret_key_ref'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersEnvValueSource\n        attr_reader :secret_key_ref\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret_key_ref = GoogleInSpec::Run::Property::JobTemplateTemplateContainersEnvValueSourceSecretKeyRef.new(args['secretKeyRef'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersEnvValueSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_env_value_source_secret_key_ref.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersEnvValueSourceSecretKeyRef\n        attr_reader :secret\n\n        attr_reader :version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret = args['secret']\n          @version = args['version']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersEnvValueSourceSecretKeyRef\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_liveness_probe.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_liveness_probe_grpc'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_http_get'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_http_get_http_headers'\nrequire 'google/run/property/job_template_template_containers_liveness_probe_tcp_socket'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersLivenessProbe\n        attr_reader :initial_delay_seconds\n\n        attr_reader :timeout_seconds\n\n        attr_reader :period_seconds\n\n        attr_reader :failure_threshold\n\n        attr_reader :http_get\n\n        attr_reader :tcp_socket\n\n        attr_reader :grpc\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @initial_delay_seconds = args['initialDelaySeconds']\n          @timeout_seconds = args['timeoutSeconds']\n          @period_seconds = args['periodSeconds']\n          @failure_threshold = args['failureThreshold']\n          @http_get = GoogleInSpec::Run::Property::JobTemplateTemplateContainersLivenessProbeHttpGet.new(args['httpGet'], to_s)\n          @tcp_socket = GoogleInSpec::Run::Property::JobTemplateTemplateContainersLivenessProbeTcpSocket.new(args['tcpSocket'], to_s)\n          @grpc = GoogleInSpec::Run::Property::JobTemplateTemplateContainersLivenessProbeGrpc.new(args['grpc'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersLivenessProbe\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_liveness_probe_grpc.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersLivenessProbeGrpc\n        attr_reader :port\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersLivenessProbeGrpc\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_liveness_probe_http_get.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_liveness_probe_http_get_http_headers'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersLivenessProbeHttpGet\n        attr_reader :path\n\n        attr_reader :http_headers\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @http_headers = GoogleInSpec::Run::Property::JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeadersArray.parse(args['httpHeaders'], to_s)\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersLivenessProbeHttpGet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_liveness_probe_http_get_http_headers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeaders\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeaders\"\n        end\n      end\n\n      class JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeadersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeaders.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainersLivenessProbeHttpGetHttpHeaders.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_liveness_probe_tcp_socket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersLivenessProbeTcpSocket\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersLivenessProbeTcpSocket\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersPorts\n        attr_reader :name\n\n        attr_reader :container_port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @container_port = args['containerPort']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersPorts\"\n        end\n      end\n\n      class JobTemplateTemplateContainersPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainersPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainersPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_resources_limits'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersResources\n        attr_reader :limits\n\n        attr_reader :cpu_idle\n\n        attr_reader :startup_cpu_boost\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @limits = GoogleInSpec::Run::Property::JobTemplateTemplateContainersResourcesLimits.new(args['limits'], to_s)\n          @cpu_idle = args['cpuIdle']\n          @startup_cpu_boost = args['startupCpuBoost']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_resources_limits.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersResourcesLimits\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersResourcesLimits\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_startup_probe.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_startup_probe_grpc'\nrequire 'google/run/property/job_template_template_containers_startup_probe_http_get'\nrequire 'google/run/property/job_template_template_containers_startup_probe_http_get_http_headers'\nrequire 'google/run/property/job_template_template_containers_startup_probe_tcp_socket'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersStartupProbe\n        attr_reader :initial_delay_seconds\n\n        attr_reader :timeout_seconds\n\n        attr_reader :period_seconds\n\n        attr_reader :failure_threshold\n\n        attr_reader :http_get\n\n        attr_reader :tcp_socket\n\n        attr_reader :grpc\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @initial_delay_seconds = args['initialDelaySeconds']\n          @timeout_seconds = args['timeoutSeconds']\n          @period_seconds = args['periodSeconds']\n          @failure_threshold = args['failureThreshold']\n          @http_get = GoogleInSpec::Run::Property::JobTemplateTemplateContainersStartupProbeHttpGet.new(args['httpGet'], to_s)\n          @tcp_socket = GoogleInSpec::Run::Property::JobTemplateTemplateContainersStartupProbeTcpSocket.new(args['tcpSocket'], to_s)\n          @grpc = GoogleInSpec::Run::Property::JobTemplateTemplateContainersStartupProbeGrpc.new(args['grpc'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersStartupProbe\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_startup_probe_grpc.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersStartupProbeGrpc\n        attr_reader :port\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersStartupProbeGrpc\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_startup_probe_http_get.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_containers_startup_probe_http_get_http_headers'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersStartupProbeHttpGet\n        attr_reader :path\n\n        attr_reader :http_headers\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @http_headers = GoogleInSpec::Run::Property::JobTemplateTemplateContainersStartupProbeHttpGetHttpHeadersArray.parse(args['httpHeaders'], to_s)\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersStartupProbeHttpGet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_startup_probe_http_get_http_headers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersStartupProbeHttpGetHttpHeaders\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersStartupProbeHttpGetHttpHeaders\"\n        end\n      end\n\n      class JobTemplateTemplateContainersStartupProbeHttpGetHttpHeadersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainersStartupProbeHttpGetHttpHeaders.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainersStartupProbeHttpGetHttpHeaders.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_startup_probe_tcp_socket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersStartupProbeTcpSocket\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersStartupProbeTcpSocket\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_containers_volume_mounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateContainersVolumeMounts\n        attr_reader :name\n\n        attr_reader :mount_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @mount_path = args['mountPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateContainersVolumeMounts\"\n        end\n      end\n\n      class JobTemplateTemplateContainersVolumeMountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateContainersVolumeMounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateContainersVolumeMounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_volumes_cloud_sql_instance'\nrequire 'google/run/property/job_template_template_volumes_empty_dir'\nrequire 'google/run/property/job_template_template_volumes_gcs'\nrequire 'google/run/property/job_template_template_volumes_nfs'\nrequire 'google/run/property/job_template_template_volumes_secret'\nrequire 'google/run/property/job_template_template_volumes_secret_items'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumes\n        attr_reader :name\n\n        attr_reader :secret\n\n        attr_reader :cloud_sql_instance\n\n        attr_reader :empty_dir\n\n        attr_reader :nfs\n\n        attr_reader :gcs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @secret = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesSecret.new(args['secret'], to_s)\n          @cloud_sql_instance = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesCloudSqlInstance.new(args['cloudSqlInstance'], to_s)\n          @empty_dir = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesEmptyDir.new(args['emptyDir'], to_s)\n          @nfs = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesNfs.new(args['nfs'], to_s)\n          @gcs = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesGcs.new(args['gcs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumes\"\n        end\n      end\n\n      class JobTemplateTemplateVolumesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateVolumes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateVolumes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_cloud_sql_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesCloudSqlInstance\n        attr_reader :instances\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instances = args['instances']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesCloudSqlInstance\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_empty_dir.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesEmptyDir\n        attr_reader :medium\n\n        attr_reader :size_limit\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @medium = args['medium']\n          @size_limit = args['sizeLimit']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesEmptyDir\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_gcs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesGcs\n        attr_reader :bucket\n\n        attr_reader :read_only\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n          @read_only = args['readOnly']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesGcs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_nfs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesNfs\n        attr_reader :server\n\n        attr_reader :path\n\n        attr_reader :read_only\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @server = args['server']\n          @path = args['path']\n          @read_only = args['readOnly']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesNfs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_secret.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_volumes_secret_items'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesSecret\n        attr_reader :secret\n\n        attr_reader :items\n\n        attr_reader :default_mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret = args['secret']\n          @items = GoogleInSpec::Run::Property::JobTemplateTemplateVolumesSecretItemsArray.parse(args['items'], to_s)\n          @default_mode = args['defaultMode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesSecret\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_volumes_secret_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVolumesSecretItems\n        attr_reader :path\n\n        attr_reader :version\n\n        attr_reader :mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @version = args['version']\n          @mode = args['mode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVolumesSecretItems\"\n        end\n      end\n\n      class JobTemplateTemplateVolumesSecretItemsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateVolumesSecretItems.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateVolumesSecretItems.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_vpc_access.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/job_template_template_vpc_access_network_interfaces'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVPCAccess\n        attr_reader :connector\n\n        attr_reader :egress\n\n        attr_reader :network_interfaces\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @connector = args['connector']\n          @egress = args['egress']\n          @network_interfaces = GoogleInSpec::Run::Property::JobTemplateTemplateVPCAccessNetworkInterfacesArray.parse(args['networkInterfaces'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVPCAccess\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_template_template_vpc_access_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTemplateTemplateVPCAccessNetworkInterfaces\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :tags\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @tags = args['tags']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTemplateTemplateVPCAccessNetworkInterfaces\"\n        end\n      end\n\n      class JobTemplateTemplateVPCAccessNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return JobTemplateTemplateVPCAccessNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| JobTemplateTemplateVPCAccessNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/job_terminal_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class JobTerminalCondition\n        attr_reader :type\n\n        attr_reader :state\n\n        attr_reader :message\n\n        attr_reader :last_transition_time\n\n        attr_reader :severity\n\n        attr_reader :reason\n\n        attr_reader :revision_reason\n\n        attr_reader :execution_reason\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @state = args['state']\n          @message = args['message']\n          @last_transition_time = args['lastTransitionTime']\n          @severity = args['severity']\n          @reason = args['reason']\n          @revision_reason = args['revisionReason']\n          @execution_reason = args['executionReason']\n        end\n\n        def to_s\n          \"#{@parent_identifier} JobTerminalCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_binary_authorization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceBinaryAuthorization\n        attr_reader :use_default\n\n        attr_reader :policy\n\n        attr_reader :breakglass_justification\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @use_default = args['useDefault']\n          @policy = args['policy']\n          @breakglass_justification = args['breakglassJustification']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceBinaryAuthorization\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_conditions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceConditions\n        attr_reader :type\n\n        attr_reader :state\n\n        attr_reader :message\n\n        attr_reader :last_transition_time\n\n        attr_reader :severity\n\n        attr_reader :reason\n\n        attr_reader :revision_reason\n\n        attr_reader :execution_reason\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @state = args['state']\n          @message = args['message']\n          @last_transition_time = args['lastTransitionTime']\n          @severity = args['severity']\n          @reason = args['reason']\n          @revision_reason = args['revisionReason']\n          @execution_reason = args['executionReason']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceConditions\"\n        end\n      end\n\n      class ServiceConditionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceConditions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceConditions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceScaling\n        attr_reader :min_instance_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_instance_count = args['minInstanceCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_annotations'\nrequire 'google/run/property/service_template_containers'\nrequire 'google/run/property/service_template_labels'\nrequire 'google/run/property/service_template_node_selector'\nrequire 'google/run/property/service_template_scaling'\nrequire 'google/run/property/service_template_volumes'\nrequire 'google/run/property/service_template_vpc_access'\nrequire 'google/run/property/service_template_vpc_access_network_interfaces'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplate\n        attr_reader :revision\n\n        attr_reader :labels\n\n        attr_reader :annotations\n\n        attr_reader :scaling\n\n        attr_reader :vpc_access\n\n        attr_reader :timeout\n\n        attr_reader :service_account\n\n        attr_reader :containers\n\n        attr_reader :volumes\n\n        attr_reader :execution_environment\n\n        attr_reader :encryption_key\n\n        attr_reader :max_instance_request_concurrency\n\n        attr_reader :session_affinity\n\n        attr_reader :health_check_disabled\n\n        attr_reader :node_selector\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @revision = args['revision']\n          @labels = GoogleInSpec::Run::Property::ServiceTemplateLabels.new(args['labels'], to_s)\n          @annotations = GoogleInSpec::Run::Property::ServiceTemplateAnnotations.new(args['annotations'], to_s)\n          @scaling = GoogleInSpec::Run::Property::ServiceTemplateScaling.new(args['scaling'], to_s)\n          @vpc_access = GoogleInSpec::Run::Property::ServiceTemplateVPCAccess.new(args['vpcAccess'], to_s)\n          @timeout = args['timeout']\n          @service_account = args['serviceAccount']\n          @containers = GoogleInSpec::Run::Property::ServiceTemplateContainersArray.parse(args['containers'], to_s)\n          @volumes = GoogleInSpec::Run::Property::ServiceTemplateVolumesArray.parse(args['volumes'], to_s)\n          @execution_environment = args['executionEnvironment']\n          @encryption_key = args['encryptionKey']\n          @max_instance_request_concurrency = args['maxInstanceRequestConcurrency']\n          @session_affinity = args['sessionAffinity']\n          @health_check_disabled = args['healthCheckDisabled']\n          @node_selector = GoogleInSpec::Run::Property::ServiceTemplateNodeSelector.new(args['nodeSelector'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplate\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateAnnotations\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateAnnotations\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_env'\nrequire 'google/run/property/service_template_containers_liveness_probe'\nrequire 'google/run/property/service_template_containers_liveness_probe_grpc'\nrequire 'google/run/property/service_template_containers_liveness_probe_http_get'\nrequire 'google/run/property/service_template_containers_liveness_probe_http_get_http_headers'\nrequire 'google/run/property/service_template_containers_liveness_probe_tcp_socket'\nrequire 'google/run/property/service_template_containers_ports'\nrequire 'google/run/property/service_template_containers_resources'\nrequire 'google/run/property/service_template_containers_resources_limits'\nrequire 'google/run/property/service_template_containers_startup_probe'\nrequire 'google/run/property/service_template_containers_startup_probe_grpc'\nrequire 'google/run/property/service_template_containers_startup_probe_http_get'\nrequire 'google/run/property/service_template_containers_startup_probe_http_get_http_headers'\nrequire 'google/run/property/service_template_containers_startup_probe_tcp_socket'\nrequire 'google/run/property/service_template_containers_volume_mounts'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainers\n        attr_reader :name\n\n        attr_reader :image\n\n        attr_reader :command\n\n        attr_reader :args\n\n        attr_reader :env\n\n        attr_reader :resources\n\n        attr_reader :ports\n\n        attr_reader :volume_mounts\n\n        attr_reader :working_dir\n\n        attr_reader :liveness_probe\n\n        attr_reader :startup_probe\n\n        attr_reader :depends_on\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @image = args['image']\n          @command = args['command']\n          @args = args['args']\n          @env = GoogleInSpec::Run::Property::ServiceTemplateContainersEnvArray.parse(args['env'], to_s)\n          @resources = GoogleInSpec::Run::Property::ServiceTemplateContainersResources.new(args['resources'], to_s)\n          @ports = GoogleInSpec::Run::Property::ServiceTemplateContainersPortsArray.parse(args['ports'], to_s)\n          @volume_mounts = GoogleInSpec::Run::Property::ServiceTemplateContainersVolumeMountsArray.parse(args['volumeMounts'], to_s)\n          @working_dir = args['workingDir']\n          @liveness_probe = GoogleInSpec::Run::Property::ServiceTemplateContainersLivenessProbe.new(args['livenessProbe'], to_s)\n          @startup_probe = GoogleInSpec::Run::Property::ServiceTemplateContainersStartupProbe.new(args['startupProbe'], to_s)\n          @depends_on = args['dependsOn']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainers\"\n        end\n      end\n\n      class ServiceTemplateContainersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainers.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainers.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_env_value_source'\nrequire 'google/run/property/service_template_containers_env_value_source_secret_key_ref'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        attr_reader :value_source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n          @value_source = GoogleInSpec::Run::Property::ServiceTemplateContainersEnvValueSource.new(args['valueSource'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersEnv\"\n        end\n      end\n\n      class ServiceTemplateContainersEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainersEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainersEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_env_value_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_env_value_source_secret_key_ref'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersEnvValueSource\n        attr_reader :secret_key_ref\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret_key_ref = GoogleInSpec::Run::Property::ServiceTemplateContainersEnvValueSourceSecretKeyRef.new(args['secretKeyRef'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersEnvValueSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_env_value_source_secret_key_ref.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersEnvValueSourceSecretKeyRef\n        attr_reader :secret\n\n        attr_reader :version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret = args['secret']\n          @version = args['version']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersEnvValueSourceSecretKeyRef\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_liveness_probe.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_liveness_probe_grpc'\nrequire 'google/run/property/service_template_containers_liveness_probe_http_get'\nrequire 'google/run/property/service_template_containers_liveness_probe_http_get_http_headers'\nrequire 'google/run/property/service_template_containers_liveness_probe_tcp_socket'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersLivenessProbe\n        attr_reader :initial_delay_seconds\n\n        attr_reader :timeout_seconds\n\n        attr_reader :period_seconds\n\n        attr_reader :failure_threshold\n\n        attr_reader :http_get\n\n        attr_reader :tcp_socket\n\n        attr_reader :grpc\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @initial_delay_seconds = args['initialDelaySeconds']\n          @timeout_seconds = args['timeoutSeconds']\n          @period_seconds = args['periodSeconds']\n          @failure_threshold = args['failureThreshold']\n          @http_get = GoogleInSpec::Run::Property::ServiceTemplateContainersLivenessProbeHttpGet.new(args['httpGet'], to_s)\n          @tcp_socket = GoogleInSpec::Run::Property::ServiceTemplateContainersLivenessProbeTcpSocket.new(args['tcpSocket'], to_s)\n          @grpc = GoogleInSpec::Run::Property::ServiceTemplateContainersLivenessProbeGrpc.new(args['grpc'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersLivenessProbe\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_liveness_probe_grpc.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersLivenessProbeGrpc\n        attr_reader :port\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersLivenessProbeGrpc\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_liveness_probe_http_get.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_liveness_probe_http_get_http_headers'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersLivenessProbeHttpGet\n        attr_reader :path\n\n        attr_reader :http_headers\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @http_headers = GoogleInSpec::Run::Property::ServiceTemplateContainersLivenessProbeHttpGetHttpHeadersArray.parse(args['httpHeaders'], to_s)\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersLivenessProbeHttpGet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_liveness_probe_http_get_http_headers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersLivenessProbeHttpGetHttpHeaders\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersLivenessProbeHttpGetHttpHeaders\"\n        end\n      end\n\n      class ServiceTemplateContainersLivenessProbeHttpGetHttpHeadersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainersLivenessProbeHttpGetHttpHeaders.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainersLivenessProbeHttpGetHttpHeaders.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_liveness_probe_tcp_socket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersLivenessProbeTcpSocket\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersLivenessProbeTcpSocket\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersPorts\n        attr_reader :name\n\n        attr_reader :container_port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @container_port = args['containerPort']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersPorts\"\n        end\n      end\n\n      class ServiceTemplateContainersPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainersPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainersPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_resources_limits'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersResources\n        attr_reader :limits\n\n        attr_reader :cpu_idle\n\n        attr_reader :startup_cpu_boost\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @limits = GoogleInSpec::Run::Property::ServiceTemplateContainersResourcesLimits.new(args['limits'], to_s)\n          @cpu_idle = args['cpuIdle']\n          @startup_cpu_boost = args['startupCpuBoost']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_resources_limits.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersResourcesLimits\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersResourcesLimits\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_startup_probe.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_startup_probe_grpc'\nrequire 'google/run/property/service_template_containers_startup_probe_http_get'\nrequire 'google/run/property/service_template_containers_startup_probe_http_get_http_headers'\nrequire 'google/run/property/service_template_containers_startup_probe_tcp_socket'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersStartupProbe\n        attr_reader :initial_delay_seconds\n\n        attr_reader :timeout_seconds\n\n        attr_reader :period_seconds\n\n        attr_reader :failure_threshold\n\n        attr_reader :http_get\n\n        attr_reader :tcp_socket\n\n        attr_reader :grpc\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @initial_delay_seconds = args['initialDelaySeconds']\n          @timeout_seconds = args['timeoutSeconds']\n          @period_seconds = args['periodSeconds']\n          @failure_threshold = args['failureThreshold']\n          @http_get = GoogleInSpec::Run::Property::ServiceTemplateContainersStartupProbeHttpGet.new(args['httpGet'], to_s)\n          @tcp_socket = GoogleInSpec::Run::Property::ServiceTemplateContainersStartupProbeTcpSocket.new(args['tcpSocket'], to_s)\n          @grpc = GoogleInSpec::Run::Property::ServiceTemplateContainersStartupProbeGrpc.new(args['grpc'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersStartupProbe\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_startup_probe_grpc.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersStartupProbeGrpc\n        attr_reader :port\n\n        attr_reader :service\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n          @service = args['service']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersStartupProbeGrpc\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_startup_probe_http_get.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_containers_startup_probe_http_get_http_headers'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersStartupProbeHttpGet\n        attr_reader :path\n\n        attr_reader :http_headers\n\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @http_headers = GoogleInSpec::Run::Property::ServiceTemplateContainersStartupProbeHttpGetHttpHeadersArray.parse(args['httpHeaders'], to_s)\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersStartupProbeHttpGet\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_startup_probe_http_get_http_headers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersStartupProbeHttpGetHttpHeaders\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersStartupProbeHttpGetHttpHeaders\"\n        end\n      end\n\n      class ServiceTemplateContainersStartupProbeHttpGetHttpHeadersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainersStartupProbeHttpGetHttpHeaders.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainersStartupProbeHttpGetHttpHeaders.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_startup_probe_tcp_socket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersStartupProbeTcpSocket\n        attr_reader :port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @port = args['port']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersStartupProbeTcpSocket\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_containers_volume_mounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateContainersVolumeMounts\n        attr_reader :name\n\n        attr_reader :mount_path\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @mount_path = args['mountPath']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateContainersVolumeMounts\"\n        end\n      end\n\n      class ServiceTemplateContainersVolumeMountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateContainersVolumeMounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateContainersVolumeMounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_node_selector.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateNodeSelector\n        attr_reader :accelerator\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator = args['accelerator']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateNodeSelector\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateScaling\n        attr_reader :min_instance_count\n\n        attr_reader :max_instance_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @min_instance_count = args['minInstanceCount']\n          @max_instance_count = args['maxInstanceCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_volumes_cloud_sql_instance'\nrequire 'google/run/property/service_template_volumes_empty_dir'\nrequire 'google/run/property/service_template_volumes_gcs'\nrequire 'google/run/property/service_template_volumes_nfs'\nrequire 'google/run/property/service_template_volumes_secret'\nrequire 'google/run/property/service_template_volumes_secret_items'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumes\n        attr_reader :name\n\n        attr_reader :secret\n\n        attr_reader :cloud_sql_instance\n\n        attr_reader :empty_dir\n\n        attr_reader :nfs\n\n        attr_reader :gcs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @secret = GoogleInSpec::Run::Property::ServiceTemplateVolumesSecret.new(args['secret'], to_s)\n          @cloud_sql_instance = GoogleInSpec::Run::Property::ServiceTemplateVolumesCloudSqlInstance.new(args['cloudSqlInstance'], to_s)\n          @empty_dir = GoogleInSpec::Run::Property::ServiceTemplateVolumesEmptyDir.new(args['emptyDir'], to_s)\n          @nfs = GoogleInSpec::Run::Property::ServiceTemplateVolumesNfs.new(args['nfs'], to_s)\n          @gcs = GoogleInSpec::Run::Property::ServiceTemplateVolumesGcs.new(args['gcs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumes\"\n        end\n      end\n\n      class ServiceTemplateVolumesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateVolumes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateVolumes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_cloud_sql_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesCloudSqlInstance\n        attr_reader :instances\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instances = args['instances']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesCloudSqlInstance\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_empty_dir.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesEmptyDir\n        attr_reader :medium\n\n        attr_reader :size_limit\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @medium = args['medium']\n          @size_limit = args['sizeLimit']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesEmptyDir\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_gcs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesGcs\n        attr_reader :bucket\n\n        attr_reader :read_only\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n          @read_only = args['readOnly']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesGcs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_nfs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesNfs\n        attr_reader :server\n\n        attr_reader :path\n\n        attr_reader :read_only\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @server = args['server']\n          @path = args['path']\n          @read_only = args['readOnly']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesNfs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_secret.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_volumes_secret_items'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesSecret\n        attr_reader :secret\n\n        attr_reader :items\n\n        attr_reader :default_mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @secret = args['secret']\n          @items = GoogleInSpec::Run::Property::ServiceTemplateVolumesSecretItemsArray.parse(args['items'], to_s)\n          @default_mode = args['defaultMode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesSecret\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_volumes_secret_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVolumesSecretItems\n        attr_reader :path\n\n        attr_reader :version\n\n        attr_reader :mode\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @version = args['version']\n          @mode = args['mode']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVolumesSecretItems\"\n        end\n      end\n\n      class ServiceTemplateVolumesSecretItemsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateVolumesSecretItems.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateVolumesSecretItems.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_vpc_access.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/run/property/service_template_vpc_access_network_interfaces'\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVPCAccess\n        attr_reader :connector\n\n        attr_reader :egress\n\n        attr_reader :network_interfaces\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @connector = args['connector']\n          @egress = args['egress']\n          @network_interfaces = GoogleInSpec::Run::Property::ServiceTemplateVPCAccessNetworkInterfacesArray.parse(args['networkInterfaces'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVPCAccess\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_template_vpc_access_network_interfaces.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTemplateVPCAccessNetworkInterfaces\n        attr_reader :network\n\n        attr_reader :subnetwork\n\n        attr_reader :tags\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @network = args['network']\n          @subnetwork = args['subnetwork']\n          @tags = args['tags']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTemplateVPCAccessNetworkInterfaces\"\n        end\n      end\n\n      class ServiceTemplateVPCAccessNetworkInterfacesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTemplateVPCAccessNetworkInterfaces.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTemplateVPCAccessNetworkInterfaces.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_terminal_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTerminalCondition\n        attr_reader :type\n\n        attr_reader :state\n\n        attr_reader :message\n\n        attr_reader :last_transition_time\n\n        attr_reader :severity\n\n        attr_reader :reason\n\n        attr_reader :revision_reason\n\n        attr_reader :execution_reason\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @state = args['state']\n          @message = args['message']\n          @last_transition_time = args['lastTransitionTime']\n          @severity = args['severity']\n          @reason = args['reason']\n          @revision_reason = args['revisionReason']\n          @execution_reason = args['executionReason']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTerminalCondition\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_traffic.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTraffic\n        attr_reader :type\n\n        attr_reader :revision\n\n        attr_reader :percent\n\n        attr_reader :tag\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @revision = args['revision']\n          @percent = args['percent']\n          @tag = args['tag']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTraffic\"\n        end\n      end\n\n      class ServiceTrafficArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTraffic.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTraffic.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/run/property/service_traffic_statuses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Run\n    module Property\n      class ServiceTrafficStatuses\n        attr_reader :type\n\n        attr_reader :revision\n\n        attr_reader :percent\n\n        attr_reader :tag\n\n        attr_reader :uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @type = args['type']\n          @revision = args['revision']\n          @percent = args['percent']\n          @tag = args['tag']\n          @uri = args['uri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceTrafficStatuses\"\n        end\n      end\n\n      class ServiceTrafficStatusesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceTrafficStatuses.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceTrafficStatuses.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_replication.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/secretmanager/property/secret_replication_user_managed'\nrequire 'google/secretmanager/property/secret_replication_user_managed_replicas'\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretReplication\n        attr_reader :automatic\n\n        attr_reader :user_managed\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @automatic = args['automatic']\n          @user_managed = GoogleInSpec::SecretManager::Property::SecretReplicationUserManaged.new(args['userManaged'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretReplication\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_replication_user_managed.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/secretmanager/property/secret_replication_user_managed_replicas'\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretReplicationUserManaged\n        attr_reader :replicas\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @replicas = GoogleInSpec::SecretManager::Property::SecretReplicationUserManagedReplicasArray.parse(args['replicas'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretReplicationUserManaged\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_replication_user_managed_replicas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/secretmanager/property/secret_replication_user_managed_replicas_customer_managed_encryption'\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretReplicationUserManagedReplicas\n        attr_reader :location\n\n        attr_reader :customer_managed_encryption\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @location = args['location']\n          @customer_managed_encryption = GoogleInSpec::SecretManager::Property::SecretReplicationUserManagedReplicasCustomerManagedEncryption.new(args['customerManagedEncryption'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretReplicationUserManagedReplicas\"\n        end\n      end\n\n      class SecretReplicationUserManagedReplicasArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SecretReplicationUserManagedReplicas.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SecretReplicationUserManagedReplicas.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_replication_user_managed_replicas_customer_managed_encryption.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretReplicationUserManagedReplicasCustomerManagedEncryption\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretReplicationUserManagedReplicasCustomerManagedEncryption\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_rotation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretRotation\n        attr_reader :next_rotation_time\n\n        attr_reader :rotation_period\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @next_rotation_time = args['nextRotationTime']\n          @rotation_period = args['rotationPeriod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretRotation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secret_topics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretTopics\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretTopics\"\n        end\n      end\n\n      class SecretTopicsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return SecretTopics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| SecretTopics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/secretmanager/property/secretversion_payload.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SecretManager\n    module Property\n      class SecretVersionPayload\n        attr_reader :data\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @data = args['data']\n        end\n\n        def to_s\n          \"#{@parent_identifier} SecretVersionPayload\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/serviceusage/property/service_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/serviceusage/property/service_config_apis'\nmodule GoogleInSpec\n  module ServiceUsage\n    module Property\n      class ServiceConfig\n        attr_reader :name\n\n        attr_reader :title\n\n        attr_reader :apis\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @title = args['title']\n          @apis = GoogleInSpec::ServiceUsage::Property::ServiceConfigApisArray.parse(args['apis'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/serviceusage/property/service_config_apis.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module ServiceUsage\n    module Property\n      class ServiceConfigApis\n        attr_reader :name\n\n        attr_reader :version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @version = args['version']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ServiceConfigApis\"\n        end\n      end\n\n      class ServiceConfigApisArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ServiceConfigApis.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ServiceConfigApis.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sourcerepo/property/repository_pubsub_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SourceRepo\n    module Property\n      class RepositoryPubsubConfigs\n        attr_reader :message_format\n\n        attr_reader :service_account_email\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @message_format = args['messageFormat']\n          @service_account_email = args['serviceAccountEmail']\n        end\n\n        def to_s\n          \"#{@parent_identifier} RepositoryPubsubConfigs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/connect_ip_addresses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class ConnectIpAddresses\n        attr_reader :ip_address\n\n        attr_reader :time_to_retire\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_address = args['ipAddress']\n          @time_to_retire = parse_time_string(args['timeToRetire'])\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ConnectIpAddresses\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n\n      class ConnectIpAddressesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ConnectIpAddresses.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ConnectIpAddresses.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/connect_server_ca_cert.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class ConnectServerCaCert\n        attr_reader :cert\n\n        attr_reader :cert_serial_number\n\n        attr_reader :common_name\n\n        attr_reader :sha1_fingerprint\n\n        attr_reader :instance\n\n        attr_reader :create_time\n\n        attr_reader :expiration_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cert = args['cert']\n          @cert_serial_number = args['certSerialNumber']\n          @common_name = args['commonName']\n          @sha1_fingerprint = args['sha1Fingerprint']\n          @instance = args['instance']\n          @create_time = parse_time_string(args['createTime'])\n          @expiration_time = parse_time_string(args['expirationTime'])\n        end\n\n        def to_s\n          \"#{@parent_identifier} ConnectServerCaCert\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_disk_encryption_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceDiskEncryptionConfiguration\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceDiskEncryptionConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_disk_encryption_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceDiskEncryptionStatus\n        attr_reader :kms_key_version_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_version_name = args['kmsKeyVersionName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceDiskEncryptionStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_failover_replica.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceFailoverReplica\n        attr_reader :available\n\n        attr_reader :name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @available = args['available']\n          @name = args['name']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceFailoverReplica\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_ip_addresses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceIpAddresses\n        attr_reader :ip_address\n\n        attr_reader :time_to_retire\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ip_address = args['ipAddress']\n          @time_to_retire = parse_time_string(args['timeToRetire'])\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceIpAddresses\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n\n      class DatabaseInstanceIpAddressesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatabaseInstanceIpAddresses.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatabaseInstanceIpAddresses.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_replica_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/sql/property/databaseinstance_replica_configuration_mysql_replica_configuration'\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceReplicaConfiguration\n        attr_reader :failover_target\n\n        attr_reader :mysql_replica_configuration\n\n        attr_reader :replica_names\n\n        attr_reader :service_account_email_address\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @failover_target = args['failoverTarget']\n          @mysql_replica_configuration = GoogleInSpec::SQL::Property::DatabaseInstanceReplicaConfigurationMysqlReplicaConfiguration.new(args['mysqlReplicaConfiguration'], to_s)\n          @replica_names = args['replicaNames']\n          @service_account_email_address = args['serviceAccountEmailAddress']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceReplicaConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_replica_configuration_mysql_replica_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceReplicaConfigurationMysqlReplicaConfiguration\n        attr_reader :ca_certificate\n\n        attr_reader :client_certificate\n\n        attr_reader :client_key\n\n        attr_reader :connect_retry_interval\n\n        attr_reader :dump_file_path\n\n        attr_reader :master_heartbeat_period\n\n        attr_reader :password\n\n        attr_reader :ssl_cipher\n\n        attr_reader :username\n\n        attr_reader :verify_server_certificate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ca_certificate = args['caCertificate']\n          @client_certificate = args['clientCertificate']\n          @client_key = args['clientKey']\n          @connect_retry_interval = args['connectRetryInterval']\n          @dump_file_path = args['dumpFilePath']\n          @master_heartbeat_period = args['masterHeartbeatPeriod']\n          @password = args['password']\n          @ssl_cipher = args['sslCipher']\n          @username = args['username']\n          @verify_server_certificate = args['verifyServerCertificate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceReplicaConfigurationMysqlReplicaConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_server_ca_cert.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceServerCaCert\n        attr_reader :cert\n\n        attr_reader :cert_serial_number\n\n        attr_reader :common_name\n\n        attr_reader :create_time\n\n        attr_reader :expiration_time\n\n        attr_reader :sha1_fingerprint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @cert = args['cert']\n          @cert_serial_number = args['certSerialNumber']\n          @common_name = args['commonName']\n          @create_time = parse_time_string(args['createTime'])\n          @expiration_time = parse_time_string(args['expirationTime'])\n          @sha1_fingerprint = args['sha1Fingerprint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceServerCaCert\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_settings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/sql/property/databaseinstance_settings_backup_configuration'\nrequire 'google/sql/property/databaseinstance_settings_database_flags'\nrequire 'google/sql/property/databaseinstance_settings_ip_configuration'\nrequire 'google/sql/property/databaseinstance_settings_ip_configuration_authorized_networks'\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceSettings\n        attr_reader :kind\n\n        attr_reader :database_flags\n\n        attr_reader :ip_configuration\n\n        attr_reader :tier\n\n        attr_reader :availability_type\n\n        attr_reader :backup_configuration\n\n        attr_reader :settings_version\n\n        attr_reader :user_labels\n\n        attr_reader :activation_policy\n\n        attr_reader :data_disk_size_gb\n\n        attr_reader :data_disk_type\n\n        attr_reader :pricing_plan\n\n        attr_reader :replication_type\n\n        attr_reader :storage_auto_resize\n\n        attr_reader :storage_auto_resize_limit\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kind = args['kind']\n          @database_flags = GoogleInSpec::SQL::Property::DatabaseInstanceSettingsDatabaseFlagsArray.parse(args['databaseFlags'], to_s)\n          @ip_configuration = GoogleInSpec::SQL::Property::DatabaseInstanceSettingsIpConfiguration.new(args['ipConfiguration'], to_s)\n          @tier = args['tier']\n          @availability_type = args['availabilityType']\n          @backup_configuration = GoogleInSpec::SQL::Property::DatabaseInstanceSettingsBackupConfiguration.new(args['backupConfiguration'], to_s)\n          @settings_version = args['settingsVersion']\n          @user_labels = args['userLabels']\n          @activation_policy = args['activationPolicy']\n          @data_disk_size_gb = args['dataDiskSizeGb']\n          @data_disk_type = args['dataDiskType']\n          @pricing_plan = args['pricingPlan']\n          @replication_type = args['replicationType']\n          @storage_auto_resize = args['storageAutoResize']\n          @storage_auto_resize_limit = args['storageAutoResizeLimit']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceSettings\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_settings_backup_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceSettingsBackupConfiguration\n        attr_reader :enabled\n\n        attr_reader :binary_log_enabled\n\n        attr_reader :start_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n          @binary_log_enabled = args['binaryLogEnabled']\n          @start_time = args['startTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceSettingsBackupConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_settings_database_flags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceSettingsDatabaseFlags\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceSettingsDatabaseFlags\"\n        end\n      end\n\n      class DatabaseInstanceSettingsDatabaseFlagsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatabaseInstanceSettingsDatabaseFlags.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatabaseInstanceSettingsDatabaseFlags.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_settings_ip_configuration.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/sql/property/databaseinstance_settings_ip_configuration_authorized_networks'\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceSettingsIpConfiguration\n        attr_reader :ipv4_enabled\n\n        attr_reader :authorized_networks\n\n        attr_reader :require_ssl\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @ipv4_enabled = args['ipv4Enabled']\n          @authorized_networks = GoogleInSpec::SQL::Property::DatabaseInstanceSettingsIpConfigurationAuthorizedNetworksArray.parse(args['authorizedNetworks'], to_s)\n          @require_ssl = args['requireSsl']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceSettingsIpConfiguration\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/sql/property/databaseinstance_settings_ip_configuration_authorized_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module SQL\n    module Property\n      class DatabaseInstanceSettingsIpConfigurationAuthorizedNetworks\n        attr_reader :expiration_time\n\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @expiration_time = parse_time_string(args['expirationTime'])\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatabaseInstanceSettingsIpConfigurationAuthorizedNetworks\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n\n      class DatabaseInstanceSettingsIpConfigurationAuthorizedNetworksArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatabaseInstanceSettingsIpConfigurationAuthorizedNetworks.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatabaseInstanceSettingsIpConfigurationAuthorizedNetworks.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_acl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/storage/property/bucket_acl_project_team'\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketAcl\n        attr_reader :bucket\n\n        attr_reader :domain\n\n        attr_reader :email\n\n        attr_reader :entity\n\n        attr_reader :entity_id\n\n        attr_reader :id\n\n        attr_reader :project_team\n\n        attr_reader :role\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n          @domain = args['domain']\n          @email = args['email']\n          @entity = args['entity']\n          @entity_id = args['entityId']\n          @id = args['id']\n          @project_team = GoogleInSpec::Storage::Property::BucketAclProjectTeam.new(args['projectTeam'], to_s)\n          @role = args['role']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketAcl\"\n        end\n      end\n\n      class BucketAclArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BucketAcl.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BucketAcl.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_acl_project_team.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketAclProjectTeam\n        attr_reader :project_number\n\n        attr_reader :team\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_number = args['projectNumber']\n          @team = args['team']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketAclProjectTeam\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_cors.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketCors\n        attr_reader :max_age_seconds\n\n        attr_reader :method\n\n        attr_reader :origin\n\n        attr_reader :response_header\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_age_seconds = args['maxAgeSeconds']\n          @method = args['method']\n          @origin = args['origin']\n          @response_header = args['responseHeader']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketCors\"\n        end\n      end\n\n      class BucketCorsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BucketCors.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BucketCors.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_default_object_acl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/storage/property/bucket_default_object_acl_project_team'\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketDefaultObjectAcl\n        attr_reader :bucket\n\n        attr_reader :domain\n\n        attr_reader :email\n\n        attr_reader :entity\n\n        attr_reader :entity_id\n\n        attr_reader :generation\n\n        attr_reader :id\n\n        attr_reader :object\n\n        attr_reader :project_team\n\n        attr_reader :role\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bucket = args['bucket']\n          @domain = args['domain']\n          @email = args['email']\n          @entity = args['entity']\n          @entity_id = args['entityId']\n          @generation = args['generation']\n          @id = args['id']\n          @object = args['object']\n          @project_team = GoogleInSpec::Storage::Property::BucketDefaultObjectAclProjectTeam.new(args['projectTeam'], to_s)\n          @role = args['role']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketDefaultObjectAcl\"\n        end\n      end\n\n      class BucketDefaultObjectAclArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BucketDefaultObjectAcl.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BucketDefaultObjectAcl.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_default_object_acl_project_team.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketDefaultObjectAclProjectTeam\n        attr_reader :project_number\n\n        attr_reader :team\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_number = args['projectNumber']\n          @team = args['team']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketDefaultObjectAclProjectTeam\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_encryption.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketEncryption\n        attr_reader :default_kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @default_kms_key_name = args['defaultKmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketEncryption\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_lifecycle.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/storage/property/bucket_lifecycle_rule'\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketLifecycle\n        attr_reader :rule\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @rule = GoogleInSpec::Storage::Property::BucketLifecycleRuleArray.parse(args['rule'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketLifecycle\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_lifecycle_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/storage/property/bucket_lifecycle_rule_action'\nrequire 'google/storage/property/bucket_lifecycle_rule_condition'\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketLifecycleRule\n        attr_reader :action\n\n        attr_reader :condition\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @action = GoogleInSpec::Storage::Property::BucketLifecycleRuleAction.new(args['action'], to_s)\n          @condition = GoogleInSpec::Storage::Property::BucketLifecycleRuleCondition.new(args['condition'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketLifecycleRule\"\n        end\n      end\n\n      class BucketLifecycleRuleArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BucketLifecycleRule.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BucketLifecycleRule.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_lifecycle_rule_action.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketLifecycleRuleAction\n        attr_reader :storage_class\n\n        attr_reader :type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @storage_class = args['storageClass']\n          @type = args['type']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketLifecycleRuleAction\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_lifecycle_rule_condition.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketLifecycleRuleCondition\n        attr_reader :age_days\n\n        attr_reader :created_before\n\n        attr_reader :is_live\n\n        attr_reader :matches_storage_class\n\n        attr_reader :num_newer_versions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @age_days = args['age']\n          @created_before = parse_time_string(args['createdBefore'])\n          @is_live = args['isLive']\n          @matches_storage_class = args['matchesStorageClass']\n          @num_newer_versions = args['numNewerVersions']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketLifecycleRuleCondition\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_logging.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketLogging\n        attr_reader :log_bucket\n\n        attr_reader :log_object_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_bucket = args['logBucket']\n          @log_object_prefix = args['logObjectPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketLogging\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_owner.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketOwner\n        attr_reader :entity\n\n        attr_reader :entity_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @entity = args['entity']\n          @entity_id = args['entityId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketOwner\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_retention_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketRetentionPolicy\n        attr_reader :effective_time\n\n        attr_reader :is_locked\n\n        attr_reader :retention_period\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @effective_time = parse_time_string(args['effectiveTime'])\n          @is_locked = args['isLocked']\n          @retention_period = args['retentionPeriod']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketRetentionPolicy\"\n        end\n\n        # Handles parsing RFC3339 time string\n        def parse_time_string(time_string)\n          time_string ? Time.parse(time_string) : nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_versioning.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketVersioning\n        attr_reader :enabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @enabled = args['enabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketVersioning\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucket_website.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketWebsite\n        attr_reader :main_page_suffix\n\n        attr_reader :not_found_page\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @main_page_suffix = args['mainPageSuffix']\n          @not_found_page = args['notFoundPage']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketWebsite\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/bucketacl_project_team.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class BucketACLProjectTeam\n        attr_reader :project_number\n\n        attr_reader :team\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_number = args['projectNumber']\n          @team = args['team']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BucketACLProjectTeam\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/defaultobjectacl_project_team.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class DefaultObjectACLProjectTeam\n        attr_reader :project_number\n\n        attr_reader :team\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_number = args['projectNumber']\n          @team = args['team']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DefaultObjectACLProjectTeam\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/storage/property/objectacl_project_team.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module Storage\n    module Property\n      class ObjectACLProjectTeam\n        attr_reader :project_number\n\n        attr_reader :team\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_number = args['projectNumber']\n          @team = args['team']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ObjectACLProjectTeam\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_completion_stats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobCompletionStats\n        attr_reader :successful_forecast_point_count\n\n        attr_reader :incomplete_count\n\n        attr_reader :failed_count\n\n        attr_reader :successful_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @successful_forecast_point_count = args['successfulForecastPointCount']\n          @incomplete_count = args['incompleteCount']\n          @failed_count = args['failedCount']\n          @successful_count = args['successfulCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobCompletionStats\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_dedicated_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_dedicated_resources_machine_spec'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobDedicatedResources\n        attr_reader :starting_replica_count\n\n        attr_reader :max_replica_count\n\n        attr_reader :machine_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @starting_replica_count = args['startingReplicaCount']\n          @max_replica_count = args['maxReplicaCount']\n          @machine_spec = GoogleInSpec::VertexAI::Property::BatchPredictionJobDedicatedResourcesMachineSpec.new(args['machineSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobDedicatedResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_dedicated_resources_machine_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobDedicatedResourcesMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobDedicatedResourcesMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espigabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espigasg_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espigasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espxasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_espigabb_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasg_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpec\n        attr_reader :parameters\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @parameters = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParameters.new(args['parameters'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecMetadata.new(args['metadata'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_outputs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecMetadata\n        attr_reader :feature_attributions_schema_uri\n\n        attr_reader :latent_space_source\n\n        attr_reader :outputs\n\n        attr_reader :inputs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_attributions_schema_uri = args['featureAttributionsSchemaUri']\n          @latent_space_source = args['latentSpaceSource']\n          @outputs = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecMetadataOutputs.new(args['outputs'], to_s)\n          @inputs = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecMetadataInputs.new(args['inputs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_metadata_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecMetadataInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecMetadataInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_metadata_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecMetadataOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecMetadataOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_espigabb_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasg_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParameters\n        attr_reader :output_indices\n\n        attr_reader :examples\n\n        attr_reader :xrai_attribution\n\n        attr_reader :top_k\n\n        attr_reader :integrated_gradients_attribution\n\n        attr_reader :sampled_shapley_attribution\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_indices = args['outputIndices']\n          @examples = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersExamples.new(args['examples'], to_s)\n          @xrai_attribution = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersXraiAttribution.new(args['xraiAttribution'], to_s)\n          @top_k = args['topK']\n          @integrated_gradients_attribution = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttribution.new(args['integratedGradientsAttribution'], to_s)\n          @sampled_shapley_attribution = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersSampledShapleyAttribution.new(args['sampledShapleyAttribution'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_presets'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersExamples\n        attr_reader :presets\n\n        attr_reader :neighbor_count\n\n        attr_reader :example_gcs_source\n\n        attr_reader :nearest_neighbor_search_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @presets = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersExamplesPresets.new(args['presets'], to_s)\n          @neighbor_count = args['neighborCount']\n          @example_gcs_source = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSource.new(args['exampleGcsSource'], to_s)\n          @nearest_neighbor_search_config = args['nearestNeighborSearchConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersExamples\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSource\n        attr_reader :gcs_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_source = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSourceGcsSource.new(args['gcsSource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSourceGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersExamplesExampleGcsSourceGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_presets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersExamplesPresets\n        attr_reader :modality\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @modality = args['modality']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersExamplesPresets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_integrated_gradients_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_espigabb_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasg_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttribution\n        attr_reader :step_count\n\n        attr_reader :smooth_grad_config\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_count = args['stepCount']\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersIntegratedGradientsAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_sampled_shapley_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersSampledShapleyAttribution\n        attr_reader :path_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_count = args['pathCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersSampledShapleyAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersXraiAttribution\n        attr_reader :smooth_grad_config\n\n        attr_reader :step_count\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @step_count = args['stepCount']\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersXraiAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersXraiAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_blur_baseline_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersXraiAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersXraiAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_smooth_grad_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobExplanationSpecParametersXraiAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_input_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_input_config_bigquery_source'\nrequire 'google/vertexai/property/batchpredictionjob_input_config_gcs_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobInputConfig\n        attr_reader :instances_format\n\n        attr_reader :bigquery_source\n\n        attr_reader :gcs_source\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instances_format = args['instancesFormat']\n          @bigquery_source = GoogleInSpec::VertexAI::Property::BatchPredictionJobInputConfigBigquerySource.new(args['bigquerySource'], to_s)\n          @gcs_source = GoogleInSpec::VertexAI::Property::BatchPredictionJobInputConfigGcsSource.new(args['gcsSource'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobInputConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_input_config_bigquery_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobInputConfigBigquerySource\n        attr_reader :input_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @input_uri = args['inputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobInputConfigBigquerySource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_input_config_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobInputConfigGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobInputConfigGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_instance_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobInstanceConfig\n        attr_reader :included_fields\n\n        attr_reader :instance_type\n\n        attr_reader :excluded_fields\n\n        attr_reader :key_field\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @included_fields = args['includedFields']\n          @instance_type = args['instanceType']\n          @excluded_fields = args['excludedFields']\n          @key_field = args['keyField']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobInstanceConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_manual_batch_tuning_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobManualBatchTuningParameters\n        attr_reader :batch_size\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @batch_size = args['batchSize']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobManualBatchTuningParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_output_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_output_config_bigquery_destination'\nrequire 'google/vertexai/property/batchpredictionjob_output_config_gcs_destination'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobOutputConfig\n        attr_reader :gcs_destination\n\n        attr_reader :predictions_format\n\n        attr_reader :bigquery_destination\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_destination = GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputConfigGcsDestination.new(args['gcsDestination'], to_s)\n          @predictions_format = args['predictionsFormat']\n          @bigquery_destination = GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputConfigBigqueryDestination.new(args['bigqueryDestination'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobOutputConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_output_config_bigquery_destination.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobOutputConfigBigqueryDestination\n        attr_reader :output_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri = args['outputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobOutputConfigBigqueryDestination\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_output_config_gcs_destination.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobOutputConfigGcsDestination\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobOutputConfigGcsDestination\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_output_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobOutputInfo\n        attr_reader :bigquery_output_dataset\n\n        attr_reader :gcs_output_directory\n\n        attr_reader :bigquery_output_table\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @bigquery_output_dataset = args['bigqueryOutputDataset']\n          @gcs_output_directory = args['gcsOutputDirectory']\n          @bigquery_output_table = args['bigqueryOutputTable']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobOutputInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_partial_failures.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobPartialFailures\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobPartialFailures\"\n        end\n      end\n\n      class BatchPredictionJobPartialFailuresArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchPredictionJobPartialFailures.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchPredictionJobPartialFailures.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_resources_consumed.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobResourcesConsumed\n        attr_reader :replica_hours\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @replica_hours = args['replicaHours']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobResourcesConsumed\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_unmanaged_container_model.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_env'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_ports'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_predict_schemata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobUnmanagedContainerModel\n        attr_reader :artifact_uri\n\n        attr_reader :predict_schemata\n\n        attr_reader :container_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @artifact_uri = args['artifactUri']\n          @predict_schemata = GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModelPredictSchemata.new(args['predictSchemata'], to_s)\n          @container_spec = GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModelContainerSpec.new(args['containerSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobUnmanagedContainerModel\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_env'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_ports'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobUnmanagedContainerModelContainerSpec\n        attr_reader :predict_route\n\n        attr_reader :image_uri\n\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :ports\n\n        attr_reader :health_route\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @predict_route = args['predictRoute']\n          @image_uri = args['imageUri']\n          @env = GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModelContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @ports = GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModelContainerSpecPortsArray.parse(args['ports'], to_s)\n          @health_route = args['healthRoute']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobUnmanagedContainerModelContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobUnmanagedContainerModelContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobUnmanagedContainerModelContainerSpecEnv\"\n        end\n      end\n\n      class BatchPredictionJobUnmanagedContainerModelContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchPredictionJobUnmanagedContainerModelContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchPredictionJobUnmanagedContainerModelContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobUnmanagedContainerModelContainerSpecPorts\n        attr_reader :container_port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_port = args['containerPort']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobUnmanagedContainerModelContainerSpecPorts\"\n        end\n      end\n\n      class BatchPredictionJobUnmanagedContainerModelContainerSpecPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return BatchPredictionJobUnmanagedContainerModelContainerSpecPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| BatchPredictionJobUnmanagedContainerModelContainerSpecPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/batchpredictionjob_unmanaged_container_model_predict_schemata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class BatchPredictionJobUnmanagedContainerModelPredictSchemata\n        attr_reader :instance_schema_uri\n\n        attr_reader :parameters_schema_uri\n\n        attr_reader :prediction_schema_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_schema_uri = args['instanceSchemaUri']\n          @parameters_schema_uri = args['parametersSchemaUri']\n          @prediction_schema_uri = args['predictionSchemaUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} BatchPredictionJobUnmanagedContainerModelPredictSchemata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/customjob_job_spec_base_output_directory'\nrequire 'google/vertexai/property/customjob_job_spec_scheduling'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpec\n        attr_reader :worker_pool_specs\n\n        attr_reader :enable_web_access\n\n        attr_reader :tensorboard\n\n        attr_reader :experiment\n\n        attr_reader :experiment_run\n\n        attr_reader :scheduling\n\n        attr_reader :enable_dashboard_access\n\n        attr_reader :service_account\n\n        attr_reader :base_output_directory\n\n        attr_reader :reserved_ip_ranges\n\n        attr_reader :network\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @worker_pool_specs = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsArray.parse(args['workerPoolSpecs'], to_s)\n          @enable_web_access = args['enableWebAccess']\n          @tensorboard = args['tensorboard']\n          @experiment = args['experiment']\n          @experiment_run = args['experimentRun']\n          @scheduling = GoogleInSpec::VertexAI::Property::CustomJobJobSpecScheduling.new(args['scheduling'], to_s)\n          @enable_dashboard_access = args['enableDashboardAccess']\n          @service_account = args['serviceAccount']\n          @base_output_directory = GoogleInSpec::VertexAI::Property::CustomJobJobSpecBaseOutputDirectory.new(args['baseOutputDirectory'], to_s)\n          @reserved_ip_ranges = args['reservedIpRanges']\n          @network = args['network']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_base_output_directory.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecBaseOutputDirectory\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecBaseOutputDirectory\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecScheduling\n        attr_reader :disable_retries\n\n        attr_reader :timeout\n\n        attr_reader :restart_job_on_worker_restart\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disable_retries = args['disableRetries']\n          @timeout = args['timeout']\n          @restart_job_on_worker_restart = args['restartJobOnWorkerRestart']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_container_spec'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_container_spec_env'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_disk_spec'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_machine_spec'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_nfs_mounts'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_python_package_spec'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_python_package_spec_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecs\n        attr_reader :container_spec\n\n        attr_reader :machine_spec\n\n        attr_reader :replica_count\n\n        attr_reader :nfs_mounts\n\n        attr_reader :python_package_spec\n\n        attr_reader :disk_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_spec = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsContainerSpec.new(args['containerSpec'], to_s)\n          @machine_spec = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsMachineSpec.new(args['machineSpec'], to_s)\n          @replica_count = args['replicaCount']\n          @nfs_mounts = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsNfsMountsArray.parse(args['nfsMounts'], to_s)\n          @python_package_spec = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsPythonPackageSpec.new(args['pythonPackageSpec'], to_s)\n          @disk_spec = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsDiskSpec.new(args['diskSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecs\"\n        end\n      end\n\n      class CustomJobJobSpecWorkerPoolSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return CustomJobJobSpecWorkerPoolSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| CustomJobJobSpecWorkerPoolSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_container_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_container_spec_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsContainerSpec\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :image_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @env = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @image_uri = args['imageUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_container_spec_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsContainerSpecEnv\"\n        end\n      end\n\n      class CustomJobJobSpecWorkerPoolSpecsContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return CustomJobJobSpecWorkerPoolSpecsContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| CustomJobJobSpecWorkerPoolSpecsContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_disk_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsDiskSpec\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsDiskSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_machine_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_nfs_mounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsNfsMounts\n        attr_reader :path\n\n        attr_reader :mount_point\n\n        attr_reader :server\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @mount_point = args['mountPoint']\n          @server = args['server']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsNfsMounts\"\n        end\n      end\n\n      class CustomJobJobSpecWorkerPoolSpecsNfsMountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return CustomJobJobSpecWorkerPoolSpecsNfsMounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| CustomJobJobSpecWorkerPoolSpecsNfsMounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_python_package_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs_python_package_spec_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsPythonPackageSpec\n        attr_reader :package_uris\n\n        attr_reader :env\n\n        attr_reader :executor_image_uri\n\n        attr_reader :args\n\n        attr_reader :python_module\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @package_uris = args['packageUris']\n          @env = GoogleInSpec::VertexAI::Property::CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray.parse(args['env'], to_s)\n          @executor_image_uri = args['executorImageUri']\n          @args = args['args']\n          @python_module = args['pythonModule']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsPythonPackageSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_job_spec_worker_pool_specs_python_package_spec_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnv\"\n        end\n      end\n\n      class CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| CustomJobJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/customjob_web_access_uris.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class CustomJobWebAccessUris\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} CustomJobWebAccessUris\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/dataset_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class DatasetEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/dataset_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class DatasetLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/dataset_saved_queries.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class DatasetSavedQueries\n        attr_reader :annotation_spec_count\n\n        attr_reader :update_time\n\n        attr_reader :support_automl_training\n\n        attr_reader :metadata\n\n        attr_reader :problem_type\n\n        attr_reader :name\n\n        attr_reader :create_time\n\n        attr_reader :etag\n\n        attr_reader :display_name\n\n        attr_reader :annotation_filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @annotation_spec_count = args['annotationSpecCount']\n          @update_time = args['updateTime']\n          @support_automl_training = args['supportAutomlTraining']\n          @metadata = args['metadata']\n          @problem_type = args['problemType']\n          @name = args['name']\n          @create_time = args['createTime']\n          @etag = args['etag']\n          @display_name = args['displayName']\n          @annotation_filter = args['annotationFilter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetSavedQueries\"\n        end\n      end\n\n      class DatasetSavedQueriesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return DatasetSavedQueries.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| DatasetSavedQueries.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/datasetdataitemannotation_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class DatasetDataItemAnnotationLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetDataItemAnnotationLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/datasetsdataitem_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class DatasetsDataItemLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} DatasetsDataItemLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_automatic_resources'\nrequire 'google/vertexai/property/endpoint_deployed_models_dedicated_resources'\nrequire 'google/vertexai/property/endpoint_deployed_models_dedicated_resources_autoscaling_metric_specs'\nrequire 'google/vertexai/property/endpoint_deployed_models_dedicated_resources_machine_spec'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/endpoint_dmespigabb_config'\nrequire 'google/vertexai/property/endpoint_dmespigasg_config'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nrequire 'google/vertexai/property/endpoint_deployed_models_private_endpoints'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModels\n        attr_reader :create_time\n\n        attr_reader :private_endpoints\n\n        attr_reader :disable_container_logging\n\n        attr_reader :model_version_id\n\n        attr_reader :explanation_spec\n\n        attr_reader :enable_access_logging\n\n        attr_reader :service_account\n\n        attr_reader :dedicated_resources\n\n        attr_reader :automatic_resources\n\n        attr_reader :display_name\n\n        attr_reader :model\n\n        attr_reader :id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @create_time = args['createTime']\n          @private_endpoints = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsPrivateEndpoints.new(args['privateEndpoints'], to_s)\n          @disable_container_logging = args['disableContainerLogging']\n          @model_version_id = args['modelVersionId']\n          @explanation_spec = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpec.new(args['explanationSpec'], to_s)\n          @enable_access_logging = args['enableAccessLogging']\n          @service_account = args['serviceAccount']\n          @dedicated_resources = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsDedicatedResources.new(args['dedicatedResources'], to_s)\n          @automatic_resources = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsAutomaticResources.new(args['automaticResources'], to_s)\n          @display_name = args['displayName']\n          @model = args['model']\n          @id = args['id']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModels\"\n        end\n      end\n\n      class EndpointDeployedModelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return EndpointDeployedModels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| EndpointDeployedModels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_automatic_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsAutomaticResources\n        attr_reader :max_replica_count\n\n        attr_reader :min_replica_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_replica_count = args['maxReplicaCount']\n          @min_replica_count = args['minReplicaCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsAutomaticResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_dedicated_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_dedicated_resources_autoscaling_metric_specs'\nrequire 'google/vertexai/property/endpoint_deployed_models_dedicated_resources_machine_spec'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsDedicatedResources\n        attr_reader :machine_spec\n\n        attr_reader :max_replica_count\n\n        attr_reader :autoscaling_metric_specs\n\n        attr_reader :min_replica_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_spec = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsDedicatedResourcesMachineSpec.new(args['machineSpec'], to_s)\n          @max_replica_count = args['maxReplicaCount']\n          @autoscaling_metric_specs = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecsArray.parse(args['autoscalingMetricSpecs'], to_s)\n          @min_replica_count = args['minReplicaCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsDedicatedResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_dedicated_resources_autoscaling_metric_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecs\n        attr_reader :target\n\n        attr_reader :metric_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target = args['target']\n          @metric_name = args['metricName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecs\"\n        end\n      end\n\n      class EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| EndpointDeployedModelsDedicatedResourcesAutoscalingMetricSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_dedicated_resources_machine_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsDedicatedResourcesMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsDedicatedResourcesMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/endpoint_dmespigabb_config'\nrequire 'google/vertexai/property/endpoint_dmespigasg_config'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpec\n        attr_reader :parameters\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @parameters = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParameters.new(args['parameters'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecMetadata.new(args['metadata'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_outputs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecMetadata\n        attr_reader :feature_attributions_schema_uri\n\n        attr_reader :latent_space_source\n\n        attr_reader :outputs\n\n        attr_reader :inputs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_attributions_schema_uri = args['featureAttributionsSchemaUri']\n          @latent_space_source = args['latentSpaceSource']\n          @outputs = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecMetadataOutputs.new(args['outputs'], to_s)\n          @inputs = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecMetadataInputs.new(args['inputs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecMetadataInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecMetadataInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_metadata_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecMetadataOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecMetadataOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/endpoint_dmespigabb_config'\nrequire 'google/vertexai/property/endpoint_dmespigasg_config'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParameters\n        attr_reader :output_indices\n\n        attr_reader :examples\n\n        attr_reader :xrai_attribution\n\n        attr_reader :top_k\n\n        attr_reader :integrated_gradients_attribution\n\n        attr_reader :sampled_shapley_attribution\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_indices = args['outputIndices']\n          @examples = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersExamples.new(args['examples'], to_s)\n          @xrai_attribution = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersXraiAttribution.new(args['xraiAttribution'], to_s)\n          @top_k = args['topK']\n          @integrated_gradients_attribution = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttribution.new(args['integratedGradientsAttribution'], to_s)\n          @sampled_shapley_attribution = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersSampledShapleyAttribution.new(args['sampledShapleyAttribution'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_presets'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersExamples\n        attr_reader :presets\n\n        attr_reader :neighbor_count\n\n        attr_reader :example_gcs_source\n\n        attr_reader :nearest_neighbor_search_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @presets = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersExamplesPresets.new(args['presets'], to_s)\n          @neighbor_count = args['neighborCount']\n          @example_gcs_source = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSource.new(args['exampleGcsSource'], to_s)\n          @nearest_neighbor_search_config = args['nearestNeighborSearchConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersExamples\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSource\n        attr_reader :gcs_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_source = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSourceGcsSource.new(args['gcsSource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_example_gcs_source_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSourceGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersExamplesExampleGcsSourceGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_examples_presets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersExamplesPresets\n        attr_reader :modality\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @modality = args['modality']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersExamplesPresets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_integrated_gradients_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_dmespigabb_config'\nrequire 'google/vertexai/property/endpoint_dmespigasg_config'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttribution\n        attr_reader :step_count\n\n        attr_reader :smooth_grad_config\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_count = args['stepCount']\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_sampled_shapley_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersSampledShapleyAttribution\n        attr_reader :path_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_count = args['pathCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersSampledShapleyAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttribution\n        attr_reader :smooth_grad_config\n\n        attr_reader :step_count\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @step_count = args['stepCount']\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersXraiAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersXraiAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_blur_baseline_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersXraiAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_explanation_spec_parameters_xrai_attribution_smooth_grad_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_dmespxasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_deployed_models_private_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsPrivateEndpoints\n        attr_reader :health_http_uri\n\n        attr_reader :explain_http_uri\n\n        attr_reader :predict_http_uri\n\n        attr_reader :service_attachment\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @health_http_uri = args['healthHttpUri']\n          @explain_http_uri = args['explainHttpUri']\n          @predict_http_uri = args['predictHttpUri']\n          @service_attachment = args['serviceAttachment']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsPrivateEndpoints\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespigabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespigasg_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_dmespigasgcfn_sigma'\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespigasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_dmespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespigasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| EndpointDeployedModelsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespxasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_dmespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_dmespxasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| EndpointDeployedModelsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_predict_request_response_logging_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/endpoint_predict_request_response_logging_config_bigquery_destination'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointPredictRequestResponseLoggingConfig\n        attr_reader :sampling_rate\n\n        attr_reader :enabled\n\n        attr_reader :bigquery_destination\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sampling_rate = args['samplingRate']\n          @enabled = args['enabled']\n          @bigquery_destination = GoogleInSpec::VertexAI::Property::EndpointPredictRequestResponseLoggingConfigBigqueryDestination.new(args['bigqueryDestination'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointPredictRequestResponseLoggingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_predict_request_response_logging_config_bigquery_destination.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointPredictRequestResponseLoggingConfigBigqueryDestination\n        attr_reader :output_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri = args['outputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointPredictRequestResponseLoggingConfigBigqueryDestination\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/endpoint_traffic_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class EndpointTrafficSplit\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} EndpointTrafficSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestore_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoreEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoreEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestore_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoreLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoreLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestore_online_serving_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/featurestore_online_serving_config_scaling'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoreOnlineServingConfig\n        attr_reader :fixed_node_count\n\n        attr_reader :scaling\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fixed_node_count = args['fixedNodeCount']\n          @scaling = GoogleInSpec::VertexAI::Property::FeaturestoreOnlineServingConfigScaling.new(args['scaling'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoreOnlineServingConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestore_online_serving_config_scaling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoreOnlineServingConfigScaling\n        attr_reader :max_node_count\n\n        attr_reader :min_node_count\n\n        attr_reader :cpu_utilization_target\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_node_count = args['maxNodeCount']\n          @min_node_count = args['minNodeCount']\n          @cpu_utilization_target = args['cpuUtilizationTarget']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoreOnlineServingConfigScaling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoreentitytypefeature_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoreEntityTypeFeatureLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoreEntityTypeFeatureLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_monitoring_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_categorical_threshold_config'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_import_features_analysis'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_numerical_threshold_config'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_snapshot_analysis'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeMonitoringConfig\n        attr_reader :import_features_analysis\n\n        attr_reader :numerical_threshold_config\n\n        attr_reader :categorical_threshold_config\n\n        attr_reader :snapshot_analysis\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @import_features_analysis = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfigImportFeaturesAnalysis.new(args['importFeaturesAnalysis'], to_s)\n          @numerical_threshold_config = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfigNumericalThresholdConfig.new(args['numericalThresholdConfig'], to_s)\n          @categorical_threshold_config = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfigCategoricalThresholdConfig.new(args['categoricalThresholdConfig'], to_s)\n          @snapshot_analysis = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfigSnapshotAnalysis.new(args['snapshotAnalysis'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeMonitoringConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_monitoring_config_categorical_threshold_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeMonitoringConfigCategoricalThresholdConfig\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeMonitoringConfigCategoricalThresholdConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_monitoring_config_import_features_analysis.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeMonitoringConfigImportFeaturesAnalysis\n        attr_reader :anomaly_detection_baseline\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @anomaly_detection_baseline = args['anomalyDetectionBaseline']\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeMonitoringConfigImportFeaturesAnalysis\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_monitoring_config_numerical_threshold_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeMonitoringConfigNumericalThresholdConfig\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeMonitoringConfigNumericalThresholdConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/featurestoresentitytype_monitoring_config_snapshot_analysis.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class FeaturestoresEntityTypeMonitoringConfigSnapshotAnalysis\n        attr_reader :monitoring_interval_days\n\n        attr_reader :staleness_days\n\n        attr_reader :disabled\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @monitoring_interval_days = args['monitoringIntervalDays']\n          @staleness_days = args['stalenessDays']\n          @disabled = args['disabled']\n        end\n\n        def to_s\n          \"#{@parent_identifier} FeaturestoresEntityTypeMonitoringConfigSnapshotAnalysis\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/hyperparametertuningjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class HyperparameterTuningJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} HyperparameterTuningJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/index_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_automatic_resources'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_autoscaling_metric_specs'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_machine_spec'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_deployed_index_auth_config'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_deployed_index_auth_config_auth_provider'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_private_endpoints'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexes\n        attr_reader :private_endpoints\n\n        attr_reader :deployment_group\n\n        attr_reader :dedicated_resources\n\n        attr_reader :deployed_index_auth_config\n\n        attr_reader :id\n\n        attr_reader :index_sync_time\n\n        attr_reader :automatic_resources\n\n        attr_reader :enable_access_logging\n\n        attr_reader :create_time\n\n        attr_reader :reserved_ip_ranges\n\n        attr_reader :index\n\n        attr_reader :display_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @private_endpoints = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesPrivateEndpoints.new(args['privateEndpoints'], to_s)\n          @deployment_group = args['deploymentGroup']\n          @dedicated_resources = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesDedicatedResources.new(args['dedicatedResources'], to_s)\n          @deployed_index_auth_config = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesDeployedIndexAuthConfig.new(args['deployedIndexAuthConfig'], to_s)\n          @id = args['id']\n          @index_sync_time = args['indexSyncTime']\n          @automatic_resources = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesAutomaticResources.new(args['automaticResources'], to_s)\n          @enable_access_logging = args['enableAccessLogging']\n          @create_time = args['createTime']\n          @reserved_ip_ranges = args['reservedIpRanges']\n          @index = args['index']\n          @display_name = args['displayName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexes\"\n        end\n      end\n\n      class IndexEndpointDeployedIndexesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IndexEndpointDeployedIndexes.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IndexEndpointDeployedIndexes.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_automatic_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesAutomaticResources\n        attr_reader :max_replica_count\n\n        attr_reader :min_replica_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_replica_count = args['maxReplicaCount']\n          @min_replica_count = args['minReplicaCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesAutomaticResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_autoscaling_metric_specs'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_machine_spec'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesDedicatedResources\n        attr_reader :machine_spec\n\n        attr_reader :max_replica_count\n\n        attr_reader :autoscaling_metric_specs\n\n        attr_reader :min_replica_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @machine_spec = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesDedicatedResourcesMachineSpec.new(args['machineSpec'], to_s)\n          @max_replica_count = args['maxReplicaCount']\n          @autoscaling_metric_specs = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecsArray.parse(args['autoscalingMetricSpecs'], to_s)\n          @min_replica_count = args['minReplicaCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesDedicatedResources\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_autoscaling_metric_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecs\n        attr_reader :target\n\n        attr_reader :metric_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @target = args['target']\n          @metric_name = args['metricName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecs\"\n        end\n      end\n\n      class IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| IndexEndpointDeployedIndexesDedicatedResourcesAutoscalingMetricSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_dedicated_resources_machine_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesDedicatedResourcesMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesDedicatedResourcesMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_deployed_index_auth_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes_deployed_index_auth_config_auth_provider'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesDeployedIndexAuthConfig\n        attr_reader :auth_provider\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @auth_provider = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesDeployedIndexAuthConfigAuthProvider.new(args['authProvider'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesDeployedIndexAuthConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_deployed_index_auth_config_auth_provider.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesDeployedIndexAuthConfigAuthProvider\n        attr_reader :audiences\n\n        attr_reader :allowed_issuers\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @audiences = args['audiences']\n          @allowed_issuers = args['allowedIssuers']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesDeployedIndexAuthConfigAuthProvider\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_deployed_indexes_private_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointDeployedIndexesPrivateEndpoints\n        attr_reader :service_attachment\n\n        attr_reader :match_grpc_address\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @service_attachment = args['serviceAttachment']\n          @match_grpc_address = args['matchGrpcAddress']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointDeployedIndexesPrivateEndpoints\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/indexendpoint_private_service_connect_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class IndexEndpointPrivateServiceConnectConfig\n        attr_reader :project_allowlist\n\n        attr_reader :enable_private_service_connect\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @project_allowlist = args['projectAllowlist']\n          @enable_private_service_connect = args['enablePrivateServiceConnect']\n        end\n\n        def to_s\n          \"#{@parent_identifier} IndexEndpointPrivateServiceConnectConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastore_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoreEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoreEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastore_state.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoreState\n        attr_reader :disk_utilization_bytes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disk_utilization_bytes = args['diskUtilizationBytes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoreState\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastoresartifact_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresArtifactLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresArtifactLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastoresartifact_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresArtifactMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresArtifactMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastorescontext_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresContextLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresContextLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastorescontext_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresContextMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresContextMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastoresexecution_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresExecutionLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresExecutionLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/metadatastoresexecution_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class MetadataStoresExecutionMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} MetadataStoresExecutionMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_container_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_container_spec_env'\nrequire 'google/vertexai/property/model_container_spec_ports'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelContainerSpec\n        attr_reader :predict_route\n\n        attr_reader :image_uri\n\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :ports\n\n        attr_reader :health_route\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @predict_route = args['predictRoute']\n          @image_uri = args['imageUri']\n          @env = GoogleInSpec::VertexAI::Property::ModelContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @ports = GoogleInSpec::VertexAI::Property::ModelContainerSpecPortsArray.parse(args['ports'], to_s)\n          @health_route = args['healthRoute']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_container_spec_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelContainerSpecEnv\"\n        end\n      end\n\n      class ModelContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_container_spec_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelContainerSpecPorts\n        attr_reader :container_port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_port = args['containerPort']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelContainerSpecPorts\"\n        end\n      end\n\n      class ModelContainerSpecPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelContainerSpecPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelContainerSpecPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_deployed_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeployedModels\n        attr_reader :deployed_model_id\n\n        attr_reader :endpoint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deployed_model_id = args['deployedModelId']\n          @endpoint = args['endpoint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeployedModels\"\n        end\n      end\n\n      class ModelDeployedModelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelDeployedModels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelDeployedModels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_espigasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_espigasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_espxasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_metadata'\nrequire 'google/vertexai/property/model_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/model_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/model_explanation_spec_parameters'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_espigasgcfn_sigma'\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma'\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpec\n        attr_reader :parameters\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @parameters = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParameters.new(args['parameters'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::ModelExplanationSpecMetadata.new(args['metadata'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/model_explanation_spec_metadata_outputs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecMetadata\n        attr_reader :feature_attributions_schema_uri\n\n        attr_reader :latent_space_source\n\n        attr_reader :outputs\n\n        attr_reader :inputs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_attributions_schema_uri = args['featureAttributionsSchemaUri']\n          @latent_space_source = args['latentSpaceSource']\n          @outputs = GoogleInSpec::VertexAI::Property::ModelExplanationSpecMetadataOutputs.new(args['outputs'], to_s)\n          @inputs = GoogleInSpec::VertexAI::Property::ModelExplanationSpecMetadataInputs.new(args['inputs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_metadata_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecMetadataInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecMetadataInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_metadata_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecMetadataOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecMetadataOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_espigasgcfn_sigma'\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma'\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParameters\n        attr_reader :output_indices\n\n        attr_reader :examples\n\n        attr_reader :xrai_attribution\n\n        attr_reader :top_k\n\n        attr_reader :integrated_gradients_attribution\n\n        attr_reader :sampled_shapley_attribution\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_indices = args['outputIndices']\n          @examples = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersExamples.new(args['examples'], to_s)\n          @xrai_attribution = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersXraiAttribution.new(args['xraiAttribution'], to_s)\n          @top_k = args['topK']\n          @integrated_gradients_attribution = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersIntegratedGradientsAttribution.new(args['integratedGradientsAttribution'], to_s)\n          @sampled_shapley_attribution = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersSampledShapleyAttribution.new(args['sampledShapleyAttribution'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_examples.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_presets'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersExamples\n        attr_reader :presets\n\n        attr_reader :neighbor_count\n\n        attr_reader :example_gcs_source\n\n        attr_reader :nearest_neighbor_search_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @presets = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersExamplesPresets.new(args['presets'], to_s)\n          @neighbor_count = args['neighborCount']\n          @example_gcs_source = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersExamplesExampleGcsSource.new(args['exampleGcsSource'], to_s)\n          @nearest_neighbor_search_config = args['nearestNeighborSearchConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersExamples\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersExamplesExampleGcsSource\n        attr_reader :gcs_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_source = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersExamplesExampleGcsSourceGcsSource.new(args['gcsSource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersExamplesExampleGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersExamplesExampleGcsSourceGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersExamplesExampleGcsSourceGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_examples_presets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersExamplesPresets\n        attr_reader :modality\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @modality = args['modality']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersExamplesPresets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_espigasgcfn_sigma'\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersIntegratedGradientsAttribution\n        attr_reader :step_count\n\n        attr_reader :smooth_grad_config\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_count = args['stepCount']\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersIntegratedGradientsAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_blur_baseline_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_smooth_grad_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_espigasgcfn_sigma'\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_sampled_shapley_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersSampledShapleyAttribution\n        attr_reader :path_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_count = args['pathCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersSampledShapleyAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_xrai_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma'\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersXraiAttribution\n        attr_reader :smooth_grad_config\n\n        attr_reader :step_count\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersXraiAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @step_count = args['stepCount']\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersXraiAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersXraiAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_blur_baseline_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersXraiAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersXraiAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma'\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersXraiAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersXraiAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_model_source_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelModelSourceInfo\n        attr_reader :copy\n\n        attr_reader :source_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @copy = args['copy']\n          @source_type = args['sourceType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelModelSourceInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_original_model_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelOriginalModelInfo\n        attr_reader :model\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @model = args['model']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelOriginalModelInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_predict_schemata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelPredictSchemata\n        attr_reader :instance_schema_uri\n\n        attr_reader :parameters_schema_uri\n\n        attr_reader :prediction_schema_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_schema_uri = args['instanceSchemaUri']\n          @parameters_schema_uri = args['parametersSchemaUri']\n          @prediction_schema_uri = args['predictionSchemaUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelPredictSchemata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/model_supported_export_formats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelSupportedExportFormats\n        attr_reader :exportable_contents\n\n        attr_reader :id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exportable_contents = args['exportableContents']\n          @id = args['id']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelSupportedExportFormats\"\n        end\n      end\n\n      class ModelSupportedExportFormatsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelSupportedExportFormats.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelSupportedExportFormats.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_bigquery_tables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobBigqueryTables\n        attr_reader :log_source\n\n        attr_reader :bigquery_table_path\n\n        attr_reader :log_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @log_source = args['logSource']\n          @bigquery_table_path = args['bigqueryTablePath']\n          @log_type = args['logType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobBigqueryTables\"\n        end\n      end\n\n      class ModelDeploymentMonitoringJobBigqueryTablesArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelDeploymentMonitoringJobBigqueryTables.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelDeploymentMonitoringJobBigqueryTables.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_latest_monitoring_pipeline_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_latest_monitoring_pipeline_metadata_status'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadata\n        attr_reader :status\n\n        attr_reader :run_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @status = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadataStatus.new(args['status'], to_s)\n          @run_time = args['runTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_latest_monitoring_pipeline_metadata_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadataStatus\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadataStatus\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_logging_sampling_strategy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_logging_sampling_strategy_random_sample_config'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobLoggingSamplingStrategy\n        attr_reader :random_sample_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @random_sample_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLoggingSamplingStrategyRandomSampleConfig.new(args['randomSampleConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobLoggingSamplingStrategy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_logging_sampling_strategy_random_sample_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobLoggingSamplingStrategyRandomSampleConfig\n        attr_reader :sample_rate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sample_rate = args['sampleRate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobLoggingSamplingStrategyRandomSampleConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococe_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococece_baseline'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_bigquery'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_gcs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfig\n        attr_reader :explanation_baseline\n\n        attr_reader :enable_feature_attributes\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @explanation_baseline = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaseline.new(args['explanationBaseline'], to_s)\n          @enable_feature_attributes = args['enableFeatureAttributes']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococece_baseline.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_bigquery'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_gcs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaseline\n        attr_reader :prediction_format\n\n        attr_reader :gcs\n\n        attr_reader :bigquery\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @prediction_format = args['predictionFormat']\n          @gcs = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineGcs.new(args['gcs'], to_s)\n          @bigquery = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineBigquery.new(args['bigquery'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaseline\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_bigquery.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineBigquery\n        attr_reader :output_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri = args['outputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineBigquery\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_gcs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineGcs\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfigExplanationBaselineGcs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococpdd_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcasd_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcdd_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcd_thresholds'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfig\n        attr_reader :attribution_score_drift_thresholds\n\n        attr_reader :drift_thresholds\n\n        attr_reader :default_drift_threshold\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @attribution_score_drift_thresholds = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigAttributionScoreDriftThresholds.new(args['attributionScoreDriftThresholds'], to_s)\n          @drift_thresholds = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDriftThresholds.new(args['driftThresholds'], to_s)\n          @default_drift_threshold = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDefaultDriftThreshold.new(args['defaultDriftThreshold'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcasd_thresholds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigAttributionScoreDriftThresholds\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigAttributionScoreDriftThresholds\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcd_thresholds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDriftThresholds\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDriftThresholds\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcdd_threshold.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDefaultDriftThreshold\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfigDefaultDriftThreshold\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococt_dataset.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdb_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdg_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdls_strategy'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdlssrs_config'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDataset\n        attr_reader :logging_sampling_strategy\n\n        attr_reader :dataset\n\n        attr_reader :gcs_source\n\n        attr_reader :target_field\n\n        attr_reader :bigquery_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @logging_sampling_strategy = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategy.new(args['loggingSamplingStrategy'], to_s)\n          @dataset = args['dataset']\n          @gcs_source = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetGcsSource.new(args['gcsSource'], to_s)\n          @target_field = args['targetField']\n          @bigquery_source = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetBigquerySource.new(args['bigquerySource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDataset\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdb_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetBigquerySource\n        attr_reader :input_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @input_uri = args['inputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetBigquerySource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdg_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdls_strategy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdlssrs_config'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategy\n        attr_reader :random_sample_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @random_sample_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategyRandomSampleConfig.new(args['randomSampleConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategy\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdlssrs_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategyRandomSampleConfig\n        attr_reader :sample_rate\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @sample_rate = args['sampleRate']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDatasetLoggingSamplingStrategyRandomSampleConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsd_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcass_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcds_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcs_thresholds'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfig\n        attr_reader :skew_thresholds\n\n        attr_reader :default_skew_threshold\n\n        attr_reader :attribution_score_skew_thresholds\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @skew_thresholds = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigSkewThresholds.new(args['skewThresholds'], to_s)\n          @default_skew_threshold = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigDefaultSkewThreshold.new(args['defaultSkewThreshold'], to_s)\n          @attribution_score_skew_thresholds = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigAttributionScoreSkewThresholds.new(args['attributionScoreSkewThresholds'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcass_thresholds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigAttributionScoreSkewThresholds\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigAttributionScoreSkewThresholds\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcds_threshold.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigDefaultSkewThreshold\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigDefaultSkewThreshold\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcs_thresholds.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigSkewThresholds\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfigSkewThresholds\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_objective_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_objective_configs_objective_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococe_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococece_baseline'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_bigquery'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_gcs'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpdd_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcasd_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcdd_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcd_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococt_dataset'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdb_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdg_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdls_strategy'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdlssrs_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsd_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcass_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcds_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcs_thresholds'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigs\n        attr_reader :objective_config\n\n        attr_reader :deployed_model_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @objective_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfig.new(args['objectiveConfig'], to_s)\n          @deployed_model_id = args['deployedModelId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigs\"\n        end\n      end\n\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_objective_configs_objective_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococe_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococece_baseline'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_bigquery'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococeceb_gcs'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpdd_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcasd_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcdd_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococpddcd_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococt_dataset'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdb_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdg_source'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdls_strategy'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtdlssrs_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsd_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcass_thresholds'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcds_threshold'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_mdmococtpsdcs_thresholds'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfig\n        attr_reader :explanation_config\n\n        attr_reader :training_dataset\n\n        attr_reader :training_prediction_skew_detection_config\n\n        attr_reader :prediction_drift_detection_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @explanation_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigExplanationConfig.new(args['explanationConfig'], to_s)\n          @training_dataset = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingDataset.new(args['trainingDataset'], to_s)\n          @training_prediction_skew_detection_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigTrainingPredictionSkewDetectionConfig.new(args['trainingPredictionSkewDetectionConfig'], to_s)\n          @prediction_drift_detection_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfigPredictionDriftDetectionConfig.new(args['predictionDriftDetectionConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsObjectiveConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_schedule_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelDeploymentMonitoringScheduleConfig\n        attr_reader :monitor_window\n\n        attr_reader :monitor_interval\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @monitor_window = args['monitorWindow']\n          @monitor_interval = args['monitorInterval']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelDeploymentMonitoringScheduleConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_model_monitoring_alert_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_monitoring_alert_config_email_alert_config'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelMonitoringAlertConfig\n        attr_reader :email_alert_config\n\n        attr_reader :enable_logging\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @email_alert_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelMonitoringAlertConfigEmailAlertConfig.new(args['emailAlertConfig'], to_s)\n          @enable_logging = args['enableLogging']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelMonitoringAlertConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_model_monitoring_alert_config_email_alert_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobModelMonitoringAlertConfigEmailAlertConfig\n        attr_reader :user_emails\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @user_emails = args['userEmails']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobModelMonitoringAlertConfigEmailAlertConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modeldeploymentmonitoringjob_stats_anomalies_base_directory.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelDeploymentMonitoringJobStatsAnomaliesBaseDirectory\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelDeploymentMonitoringJobStatsAnomaliesBaseDirectory\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelevaluationslice_model_explanation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelevaluationslice_model_explanation_mean_attributions'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEvaluationSliceModelExplanation\n        attr_reader :mean_attributions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @mean_attributions = GoogleInSpec::VertexAI::Property::ModelEvaluationSliceModelExplanationMeanAttributionsArray.parse(args['meanAttributions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEvaluationSliceModelExplanation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelevaluationslice_model_explanation_mean_attributions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEvaluationSliceModelExplanationMeanAttributions\n        attr_reader :output_display_name\n\n        attr_reader :baseline_output_value\n\n        attr_reader :output_name\n\n        attr_reader :feature_attributions\n\n        attr_reader :output_index\n\n        attr_reader :instance_output_value\n\n        attr_reader :approximation_error\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_display_name = args['outputDisplayName']\n          @baseline_output_value = args['baselineOutputValue']\n          @output_name = args['outputName']\n          @feature_attributions = args['featureAttributions']\n          @output_index = args['outputIndex']\n          @instance_output_value = args['instanceOutputValue']\n          @approximation_error = args['approximationError']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEvaluationSliceModelExplanationMeanAttributions\"\n        end\n      end\n\n      class ModelEvaluationSliceModelExplanationMeanAttributionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelEvaluationSliceModelExplanationMeanAttributions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelEvaluationSliceModelExplanationMeanAttributions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelevaluationslice_slice.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelevaluationslice_slice_slice_spec'\nrequire 'google/vertexai/property/modelevaluationslice_slice_slice_spec_configs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEvaluationSliceSlice\n        attr_reader :value\n\n        attr_reader :dimension\n\n        attr_reader :slice_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n          @dimension = args['dimension']\n          @slice_spec = GoogleInSpec::VertexAI::Property::ModelEvaluationSliceSliceSliceSpec.new(args['sliceSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEvaluationSliceSlice\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelevaluationslice_slice_slice_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelevaluationslice_slice_slice_spec_configs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEvaluationSliceSliceSliceSpec\n        attr_reader :configs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @configs = GoogleInSpec::VertexAI::Property::ModelEvaluationSliceSliceSliceSpecConfigs.new(args['configs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEvaluationSliceSliceSliceSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelevaluationslice_slice_slice_spec_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelEvaluationSliceSliceSliceSpecConfigs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelEvaluationSliceSliceSliceSpecConfigs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespeegsg_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSourceGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSourceGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespigabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespigasg_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespigasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespxabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespxasg_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespxasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/modelsevaluation_esespeegsg_source'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespigabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespxabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecs\n        attr_reader :explanation_spec\n\n        attr_reader :explanation_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @explanation_spec = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpec.new(args['explanationSpec'], to_s)\n          @explanation_type = args['explanationType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecs\"\n        end\n      end\n\n      class ModelsEvaluationExplanationSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelsEvaluationExplanationSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelsEvaluationExplanationSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/modelsevaluation_esespeegsg_source'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespigabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespxabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpec\n        attr_reader :parameters\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @parameters = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParameters.new(args['parameters'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecMetadata.new(args['metadata'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_outputs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecMetadata\n        attr_reader :feature_attributions_schema_uri\n\n        attr_reader :latent_space_source\n\n        attr_reader :outputs\n\n        attr_reader :inputs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_attributions_schema_uri = args['featureAttributionsSchemaUri']\n          @latent_space_source = args['latentSpaceSource']\n          @outputs = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecMetadataOutputs.new(args['outputs'], to_s)\n          @inputs = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecMetadataInputs.new(args['inputs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecMetadataInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecMetadataInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_metadata_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecMetadataOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecMetadataOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/modelsevaluation_esespeegsg_source'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespigabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/modelsevaluation_esespxabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParameters\n        attr_reader :output_indices\n\n        attr_reader :examples\n\n        attr_reader :xrai_attribution\n\n        attr_reader :top_k\n\n        attr_reader :integrated_gradients_attribution\n\n        attr_reader :sampled_shapley_attribution\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_indices = args['outputIndices']\n          @examples = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersExamples.new(args['examples'], to_s)\n          @xrai_attribution = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttribution.new(args['xraiAttribution'], to_s)\n          @top_k = args['topK']\n          @integrated_gradients_attribution = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttribution.new(args['integratedGradientsAttribution'], to_s)\n          @sampled_shapley_attribution = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersSampledShapleyAttribution.new(args['sampledShapleyAttribution'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/modelsevaluation_esespeegsg_source'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_presets'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersExamples\n        attr_reader :presets\n\n        attr_reader :neighbor_count\n\n        attr_reader :example_gcs_source\n\n        attr_reader :nearest_neighbor_search_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @presets = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesPresets.new(args['presets'], to_s)\n          @neighbor_count = args['neighborCount']\n          @example_gcs_source = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSource.new(args['exampleGcsSource'], to_s)\n          @nearest_neighbor_search_config = args['nearestNeighborSearchConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersExamples\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_example_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespeegsg_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSource\n        attr_reader :gcs_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_source = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSourceGcsSource.new(args['gcsSource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesExampleGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_examples_presets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesPresets\n        attr_reader :modality\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @modality = args['modality']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersExamplesPresets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_integrated_gradients_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespigabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttribution\n        attr_reader :step_count\n\n        attr_reader :smooth_grad_config\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_count = args['stepCount']\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersIntegratedGradientsAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_sampled_shapley_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersSampledShapleyAttribution\n        attr_reader :path_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_count = args['pathCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersSampledShapleyAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_explanation_specs_explanation_spec_parameters_xrai_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_esespxabb_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasg_config'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfn_sigma'\nrequire 'google/vertexai/property/modelsevaluation_esespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttribution\n        attr_reader :smooth_grad_config\n\n        attr_reader :step_count\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @step_count = args['stepCount']\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationExplanationSpecsExplanationSpecParametersXraiAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_model_explanation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/modelsevaluation_model_explanation_mean_attributions'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationModelExplanation\n        attr_reader :mean_attributions\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @mean_attributions = GoogleInSpec::VertexAI::Property::ModelsEvaluationModelExplanationMeanAttributionsArray.parse(args['meanAttributions'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationModelExplanation\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/modelsevaluation_model_explanation_mean_attributions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ModelsEvaluationModelExplanationMeanAttributions\n        attr_reader :output_display_name\n\n        attr_reader :baseline_output_value\n\n        attr_reader :output_name\n\n        attr_reader :feature_attributions\n\n        attr_reader :output_index\n\n        attr_reader :instance_output_value\n\n        attr_reader :approximation_error\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_display_name = args['outputDisplayName']\n          @baseline_output_value = args['baselineOutputValue']\n          @output_name = args['outputName']\n          @feature_attributions = args['featureAttributions']\n          @output_index = args['outputIndex']\n          @instance_output_value = args['instanceOutputValue']\n          @approximation_error = args['approximationError']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ModelsEvaluationModelExplanationMeanAttributions\"\n        end\n      end\n\n      class ModelsEvaluationModelExplanationMeanAttributionsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ModelsEvaluationModelExplanationMeanAttributions.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ModelsEvaluationModelExplanationMeanAttributions.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutput\n        attr_reader :multi_trial_job_output\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @multi_trial_job_output = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutput.new(args['multiTrialJobOutput'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutput\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutput\n        attr_reader :search_trials\n\n        attr_reader :train_trials\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @search_trials = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputSearchTrialsArray.parse(args['searchTrials'], to_s)\n          @train_trials = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputTrainTrialsArray.parse(args['trainTrials'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutput\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials_final_measurement'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputSearchTrials\n        attr_reader :id\n\n        attr_reader :state\n\n        attr_reader :final_measurement\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @state = args['state']\n          @final_measurement = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurement.new(args['finalMeasurement'], to_s)\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputSearchTrials\"\n        end\n      end\n\n      class NasJobNasJobOutputMultiTrialJobOutputSearchTrialsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobOutputMultiTrialJobOutputSearchTrials.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobOutputMultiTrialJobOutputSearchTrials.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials_final_measurement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurement\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials_final_measurement_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetrics\"\n        end\n      end\n\n      class NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobOutputMultiTrialJobOutputSearchTrialsFinalMeasurementMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials_final_measurement'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputTrainTrials\n        attr_reader :id\n\n        attr_reader :state\n\n        attr_reader :final_measurement\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @state = args['state']\n          @final_measurement = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurement.new(args['finalMeasurement'], to_s)\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputTrainTrials\"\n        end\n      end\n\n      class NasJobNasJobOutputMultiTrialJobOutputTrainTrialsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobOutputMultiTrialJobOutputTrainTrials.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobOutputMultiTrialJobOutputTrainTrials.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials_final_measurement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurement\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials_final_measurement_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetrics\"\n        end\n      end\n\n      class NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobOutputMultiTrialJobOutputTrainTrialsFinalMeasurementMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_metric'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswp_specs'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpec\n        attr_reader :search_space_spec\n\n        attr_reader :resume_nas_job_id\n\n        attr_reader :multi_trial_algorithm_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @search_space_spec = args['searchSpaceSpec']\n          @resume_nas_job_id = args['resumeNasJobId']\n          @multi_trial_algorithm_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpec.new(args['multiTrialAlgorithmSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_metric'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswp_specs'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpec\n        attr_reader :search_trial_spec\n\n        attr_reader :multi_trial_algorithm\n\n        attr_reader :train_trial_spec\n\n        attr_reader :metric\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @search_trial_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpec.new(args['searchTrialSpec'], to_s)\n          @multi_trial_algorithm = args['multiTrialAlgorithm']\n          @train_trial_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpec.new(args['trainTrialSpec'], to_s)\n          @metric = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecMetric.new(args['metric'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_metric.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecMetric\n        attr_reader :goal\n\n        attr_reader :metric_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @goal = args['goal']\n          @metric_id = args['metricId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecMetric\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpec\n        attr_reader :max_failed_trial_count\n\n        attr_reader :max_parallel_trial_count\n\n        attr_reader :search_trial_job_spec\n\n        attr_reader :max_trial_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_failed_trial_count = args['maxFailedTrialCount']\n          @max_parallel_trial_count = args['maxParallelTrialCount']\n          @search_trial_job_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpec.new(args['searchTrialJobSpec'], to_s)\n          @max_trial_count = args['maxTrialCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpec\n        attr_reader :worker_pool_specs\n\n        attr_reader :enable_web_access\n\n        attr_reader :tensorboard\n\n        attr_reader :experiment\n\n        attr_reader :experiment_run\n\n        attr_reader :scheduling\n\n        attr_reader :enable_dashboard_access\n\n        attr_reader :service_account\n\n        attr_reader :base_output_directory\n\n        attr_reader :reserved_ip_ranges\n\n        attr_reader :network\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @worker_pool_specs = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsArray.parse(args['workerPoolSpecs'], to_s)\n          @enable_web_access = args['enableWebAccess']\n          @tensorboard = args['tensorboard']\n          @experiment = args['experiment']\n          @experiment_run = args['experimentRun']\n          @scheduling = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecScheduling.new(args['scheduling'], to_s)\n          @enable_dashboard_access = args['enableDashboardAccess']\n          @service_account = args['serviceAccount']\n          @base_output_directory = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecBaseOutputDirectory.new(args['baseOutputDirectory'], to_s)\n          @reserved_ip_ranges = args['reservedIpRanges']\n          @network = args['network']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecScheduling\n        attr_reader :disable_retries\n\n        attr_reader :timeout\n\n        attr_reader :restart_job_on_worker_restart\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disable_retries = args['disableRetries']\n          @timeout = args['timeout']\n          @restart_job_on_worker_restart = args['restartJobOnWorkerRestart']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpec\n        attr_reader :frequency\n\n        attr_reader :max_parallel_trial_count\n\n        attr_reader :train_trial_job_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @frequency = args['frequency']\n          @max_parallel_trial_count = args['maxParallelTrialCount']\n          @train_trial_job_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpec.new(args['trainTrialJobSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswp_specs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpec\n        attr_reader :worker_pool_specs\n\n        attr_reader :enable_web_access\n\n        attr_reader :tensorboard\n\n        attr_reader :experiment\n\n        attr_reader :experiment_run\n\n        attr_reader :scheduling\n\n        attr_reader :enable_dashboard_access\n\n        attr_reader :service_account\n\n        attr_reader :base_output_directory\n\n        attr_reader :reserved_ip_ranges\n\n        attr_reader :network\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @worker_pool_specs = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsArray.parse(args['workerPoolSpecs'], to_s)\n          @enable_web_access = args['enableWebAccess']\n          @tensorboard = args['tensorboard']\n          @experiment = args['experiment']\n          @experiment_run = args['experimentRun']\n          @scheduling = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecScheduling.new(args['scheduling'], to_s)\n          @enable_dashboard_access = args['enableDashboardAccess']\n          @service_account = args['serviceAccount']\n          @base_output_directory = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecBaseOutputDirectory.new(args['baseOutputDirectory'], to_s)\n          @reserved_ip_ranges = args['reservedIpRanges']\n          @network = args['network']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecScheduling\n        attr_reader :disable_retries\n\n        attr_reader :timeout\n\n        attr_reader :restart_job_on_worker_restart\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @disable_retries = args['disableRetries']\n          @timeout = args['timeout']\n          @restart_job_on_worker_restart = args['restartJobOnWorkerRestart']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecScheduling\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjsbo_directory.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecBaseOutputDirectory\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecBaseOutputDirectory\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswp_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpsc_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpscs_env'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpsd_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpsm_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpsn_mounts'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpspp_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpspps_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecs\n        attr_reader :container_spec\n\n        attr_reader :machine_spec\n\n        attr_reader :replica_count\n\n        attr_reader :nfs_mounts\n\n        attr_reader :python_package_spec\n\n        attr_reader :disk_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpec.new(args['containerSpec'], to_s)\n          @machine_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsMachineSpec.new(args['machineSpec'], to_s)\n          @replica_count = args['replicaCount']\n          @nfs_mounts = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMountsArray.parse(args['nfsMounts'], to_s)\n          @python_package_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpec.new(args['pythonPackageSpec'], to_s)\n          @disk_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsDiskSpec.new(args['diskSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecs\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpsc_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpscs_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpec\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :image_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @env = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @image_uri = args['imageUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpscs_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnv\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpsd_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsDiskSpec\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsDiskSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpsm_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpsn_mounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMounts\n        attr_reader :path\n\n        attr_reader :mount_point\n\n        attr_reader :server\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @mount_point = args['mountPoint']\n          @server = args['server']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMounts\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsNfsMounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpspp_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswpspps_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpec\n        attr_reader :package_uris\n\n        attr_reader :env\n\n        attr_reader :executor_image_uri\n\n        attr_reader :args\n\n        attr_reader :python_module\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @package_uris = args['packageUris']\n          @env = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray.parse(args['env'], to_s)\n          @executor_image_uri = args['executorImageUri']\n          @args = args['args']\n          @python_module = args['pythonModule']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasstsstjswpspps_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecSearchTrialSpecSearchTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjsbo_directory.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecBaseOutputDirectory\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecBaseOutputDirectory\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswp_specs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpsc_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpscs_env'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpsd_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpsm_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpsn_mounts'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpspp_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpspps_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecs\n        attr_reader :container_spec\n\n        attr_reader :machine_spec\n\n        attr_reader :replica_count\n\n        attr_reader :nfs_mounts\n\n        attr_reader :python_package_spec\n\n        attr_reader :disk_spec\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpec.new(args['containerSpec'], to_s)\n          @machine_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsMachineSpec.new(args['machineSpec'], to_s)\n          @replica_count = args['replicaCount']\n          @nfs_mounts = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMountsArray.parse(args['nfsMounts'], to_s)\n          @python_package_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpec.new(args['pythonPackageSpec'], to_s)\n          @disk_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsDiskSpec.new(args['diskSpec'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecs\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecs.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecs.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpsc_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpscs_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpec\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :image_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @env = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @image_uri = args['imageUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpscs_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnv\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpsd_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsDiskSpec\n        attr_reader :boot_disk_type\n\n        attr_reader :boot_disk_size_gb\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @boot_disk_type = args['bootDiskType']\n          @boot_disk_size_gb = args['bootDiskSizeGb']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsDiskSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpsm_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsMachineSpec\n        attr_reader :accelerator_type\n\n        attr_reader :machine_type\n\n        attr_reader :accelerator_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @accelerator_type = args['acceleratorType']\n          @machine_type = args['machineType']\n          @accelerator_count = args['acceleratorCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsMachineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpsn_mounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMounts\n        attr_reader :path\n\n        attr_reader :mount_point\n\n        attr_reader :server\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path = args['path']\n          @mount_point = args['mountPoint']\n          @server = args['server']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMounts\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMountsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMounts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsNfsMounts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpspp_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswpspps_env'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpec\n        attr_reader :package_uris\n\n        attr_reader :env\n\n        attr_reader :executor_image_uri\n\n        attr_reader :args\n\n        attr_reader :python_module\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @package_uris = args['packageUris']\n          @env = GoogleInSpec::VertexAI::Property::NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray.parse(args['env'], to_s)\n          @executor_image_uri = args['executorImageUri']\n          @args = args['args']\n          @python_module = args['pythonModule']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjob_njsmtasttsttjswpspps_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv\"\n        end\n      end\n\n      class NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobNasJobSpecMultiTrialAlgorithmSpecTrainTrialSpecTrainTrialJobSpecWorkerPoolSpecsPythonPackageSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_search_trial.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailSearchTrial\n        attr_reader :id\n\n        attr_reader :state\n\n        attr_reader :final_measurement\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @state = args['state']\n          @final_measurement = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailSearchTrialFinalMeasurement.new(args['finalMeasurement'], to_s)\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailSearchTrial\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailSearchTrialFinalMeasurement\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailSearchTrialFinalMeasurementMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailSearchTrialFinalMeasurement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailSearchTrialFinalMeasurementMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailSearchTrialFinalMeasurementMetrics\"\n        end\n      end\n\n      class NasJobsNasTrialDetailSearchTrialFinalMeasurementMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobsNasTrialDetailSearchTrialFinalMeasurementMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobsNasTrialDetailSearchTrialFinalMeasurementMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_train_trial.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailTrainTrial\n        attr_reader :id\n\n        attr_reader :state\n\n        attr_reader :final_measurement\n\n        attr_reader :start_time\n\n        attr_reader :end_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @id = args['id']\n          @state = args['state']\n          @final_measurement = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailTrainTrialFinalMeasurement.new(args['finalMeasurement'], to_s)\n          @start_time = args['startTime']\n          @end_time = args['endTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailTrainTrial\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailTrainTrialFinalMeasurement\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailTrainTrialFinalMeasurementMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailTrainTrialFinalMeasurement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class NasJobsNasTrialDetailTrainTrialFinalMeasurementMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} NasJobsNasTrialDetailTrainTrialFinalMeasurementMetrics\"\n        end\n      end\n\n      class NasJobsNasTrialDetailTrainTrialFinalMeasurementMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return NasJobsNasTrialDetailTrainTrialFinalMeasurementMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| NasJobsNasTrialDetailTrainTrialFinalMeasurementMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetail\n        attr_reader :task_details\n\n        attr_reader :pipeline_run_context\n\n        attr_reader :pipeline_context\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @task_details = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsArray.parse(args['taskDetails'], to_s)\n          @pipeline_run_context = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineRunContext.new(args['pipelineRunContext'], to_s)\n          @pipeline_context = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineContext.new(args['pipelineContext'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineContext\n        attr_reader :name\n\n        attr_reader :schema_title\n\n        attr_reader :etag\n\n        attr_reader :description\n\n        attr_reader :display_name\n\n        attr_reader :schema_version\n\n        attr_reader :create_time\n\n        attr_reader :labels\n\n        attr_reader :metadata\n\n        attr_reader :update_time\n\n        attr_reader :parent_contexts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @schema_title = args['schemaTitle']\n          @etag = args['etag']\n          @description = args['description']\n          @display_name = args['displayName']\n          @schema_version = args['schemaVersion']\n          @create_time = args['createTime']\n          @labels = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineContextLabels.new(args['labels'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineContextMetadata.new(args['metadata'], to_s)\n          @update_time = args['updateTime']\n          @parent_contexts = args['parentContexts']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_context_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineContextLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineContextLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_context_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineContextMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineContextMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_run_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineRunContext\n        attr_reader :name\n\n        attr_reader :schema_title\n\n        attr_reader :etag\n\n        attr_reader :description\n\n        attr_reader :display_name\n\n        attr_reader :schema_version\n\n        attr_reader :create_time\n\n        attr_reader :labels\n\n        attr_reader :metadata\n\n        attr_reader :update_time\n\n        attr_reader :parent_contexts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @schema_title = args['schemaTitle']\n          @etag = args['etag']\n          @description = args['description']\n          @display_name = args['displayName']\n          @schema_version = args['schemaVersion']\n          @create_time = args['createTime']\n          @labels = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineRunContextLabels.new(args['labels'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailPipelineRunContextMetadata.new(args['metadata'], to_s)\n          @update_time = args['updateTime']\n          @parent_contexts = args['parentContexts']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineRunContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineRunContextLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineRunContextLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailPipelineRunContextMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailPipelineRunContextMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_error'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_execution'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_execution_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_execution_metadata'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_container_detail'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_custom_job_detail'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_inputs'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_outputs'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_pipeline_task_status'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetails\n        attr_reader :inputs\n\n        attr_reader :pipeline_task_status\n\n        attr_reader :end_time\n\n        attr_reader :outputs\n\n        attr_reader :create_time\n\n        attr_reader :start_time\n\n        attr_reader :execution\n\n        attr_reader :task_name\n\n        attr_reader :parent_task_id\n\n        attr_reader :state\n\n        attr_reader :task_id\n\n        attr_reader :executor_detail\n\n        attr_reader :error\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @inputs = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsInputs.new(args['inputs'], to_s)\n          @pipeline_task_status = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsPipelineTaskStatusArray.parse(args['pipelineTaskStatus'], to_s)\n          @end_time = args['endTime']\n          @outputs = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsOutputs.new(args['outputs'], to_s)\n          @create_time = args['createTime']\n          @start_time = args['startTime']\n          @execution = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecution.new(args['execution'], to_s)\n          @task_name = args['taskName']\n          @parent_task_id = args['parentTaskId']\n          @state = args['state']\n          @task_id = args['taskId']\n          @executor_detail = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecutorDetail.new(args['executorDetail'], to_s)\n          @error = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsError.new(args['error'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetails\"\n        end\n      end\n\n      class PipelineJobJobDetailTaskDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PipelineJobJobDetailTaskDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PipelineJobJobDetailTaskDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_execution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_execution_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_execution_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecution\n        attr_reader :labels\n\n        attr_reader :create_time\n\n        attr_reader :schema_version\n\n        attr_reader :state\n\n        attr_reader :name\n\n        attr_reader :etag\n\n        attr_reader :display_name\n\n        attr_reader :metadata\n\n        attr_reader :schema_title\n\n        attr_reader :description\n\n        attr_reader :update_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @labels = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecutionLabels.new(args['labels'], to_s)\n          @create_time = args['createTime']\n          @schema_version = args['schemaVersion']\n          @state = args['state']\n          @name = args['name']\n          @etag = args['etag']\n          @display_name = args['displayName']\n          @metadata = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecutionMetadata.new(args['metadata'], to_s)\n          @schema_title = args['schemaTitle']\n          @description = args['description']\n          @update_time = args['updateTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_execution_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecutionLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecutionLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_execution_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecutionMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecutionMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_container_detail'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_custom_job_detail'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecutorDetail\n        attr_reader :container_detail\n\n        attr_reader :custom_job_detail\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_detail = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail.new(args['containerDetail'], to_s)\n          @custom_job_detail = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail.new(args['customJobDetail'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecutorDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_container_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail\n        attr_reader :failed_main_jobs\n\n        attr_reader :main_job\n\n        attr_reader :pre_caching_check_job\n\n        attr_reader :failed_pre_caching_check_jobs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @failed_main_jobs = args['failedMainJobs']\n          @main_job = args['mainJob']\n          @pre_caching_check_job = args['preCachingCheckJob']\n          @failed_pre_caching_check_jobs = args['failedPreCachingCheckJobs']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_executor_detail_custom_job_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail\n        attr_reader :failed_jobs\n\n        attr_reader :job\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @failed_jobs = args['failedJobs']\n          @job = args['job']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_pipeline_task_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details_pipeline_task_status_error'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsPipelineTaskStatus\n        attr_reader :update_time\n\n        attr_reader :error\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @update_time = args['updateTime']\n          @error = GoogleInSpec::VertexAI::Property::PipelineJobJobDetailTaskDetailsPipelineTaskStatusError.new(args['error'], to_s)\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsPipelineTaskStatus\"\n        end\n      end\n\n      class PipelineJobJobDetailTaskDetailsPipelineTaskStatusArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return PipelineJobJobDetailTaskDetailsPipelineTaskStatus.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| PipelineJobJobDetailTaskDetailsPipelineTaskStatus.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_job_detail_task_details_pipeline_task_status_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobJobDetailTaskDetailsPipelineTaskStatusError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobJobDetailTaskDetailsPipelineTaskStatusError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_pipeline_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobPipelineSpec\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobPipelineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_runtime_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/pipelinejob_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/pipelinejob_runtime_config_parameter_values'\nrequire 'google/vertexai/property/pipelinejob_runtime_config_parameters'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobRuntimeConfig\n        attr_reader :gcs_output_directory\n\n        attr_reader :parameter_values\n\n        attr_reader :failure_policy\n\n        attr_reader :parameters\n\n        attr_reader :input_artifacts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_output_directory = args['gcsOutputDirectory']\n          @parameter_values = GoogleInSpec::VertexAI::Property::PipelineJobRuntimeConfigParameterValues.new(args['parameterValues'], to_s)\n          @failure_policy = args['failurePolicy']\n          @parameters = GoogleInSpec::VertexAI::Property::PipelineJobRuntimeConfigParameters.new(args['parameters'], to_s)\n          @input_artifacts = GoogleInSpec::VertexAI::Property::PipelineJobRuntimeConfigInputArtifacts.new(args['inputArtifacts'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobRuntimeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_runtime_config_input_artifacts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobRuntimeConfigInputArtifacts\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobRuntimeConfigInputArtifacts\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_runtime_config_parameter_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobRuntimeConfigParameterValues\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobRuntimeConfigParameterValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_runtime_config_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobRuntimeConfigParameters\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobRuntimeConfigParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/pipelinejob_template_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class PipelineJobTemplateMetadata\n        attr_reader :version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n        end\n\n        def to_s\n          \"#{@parent_identifier} PipelineJobTemplateMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_cpjrpjjdtdedc_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail\n        attr_reader :failed_main_jobs\n\n        attr_reader :main_job\n\n        attr_reader :pre_caching_check_job\n\n        attr_reader :failed_pre_caching_check_jobs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @failed_main_jobs = args['failedMainJobs']\n          @main_job = args['mainJob']\n          @pre_caching_check_job = args['preCachingCheckJob']\n          @failed_pre_caching_check_jobs = args['failedPreCachingCheckJobs']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_cpjrpjjdtdedcj_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail\n        attr_reader :failed_jobs\n\n        attr_reader :job\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @failed_jobs = args['failedJobs']\n          @job = args['job']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_cpjrpjjdtdpts_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatusError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatusError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_encryption_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_error'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_pipeline_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameter_values'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameters'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_template_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequest\n        attr_reader :pipeline_job\n\n        attr_reader :pipeline_job_id\n\n        attr_reader :parent\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @pipeline_job = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJob.new(args['pipelineJob'], to_s)\n          @pipeline_job_id = args['pipelineJobId']\n          @parent = args['parent']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequest\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_encryption_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_error'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_pipeline_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameter_values'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameters'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_template_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJob\n        attr_reader :encryption_spec\n\n        attr_reader :end_time\n\n        attr_reader :error\n\n        attr_reader :update_time\n\n        attr_reader :job_detail\n\n        attr_reader :template_metadata\n\n        attr_reader :state\n\n        attr_reader :create_time\n\n        attr_reader :name\n\n        attr_reader :schedule_name\n\n        attr_reader :reserved_ip_ranges\n\n        attr_reader :start_time\n\n        attr_reader :service_account\n\n        attr_reader :display_name\n\n        attr_reader :template_uri\n\n        attr_reader :pipeline_spec\n\n        attr_reader :network\n\n        attr_reader :labels\n\n        attr_reader :runtime_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @encryption_spec = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobEncryptionSpec.new(args['encryptionSpec'], to_s)\n          @end_time = args['endTime']\n          @error = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobError.new(args['error'], to_s)\n          @update_time = args['updateTime']\n          @job_detail = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetail.new(args['jobDetail'], to_s)\n          @template_metadata = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobTemplateMetadata.new(args['templateMetadata'], to_s)\n          @state = args['state']\n          @create_time = args['createTime']\n          @name = args['name']\n          @schedule_name = args['scheduleName']\n          @reserved_ip_ranges = args['reservedIpRanges']\n          @start_time = args['startTime']\n          @service_account = args['serviceAccount']\n          @display_name = args['displayName']\n          @template_uri = args['templateUri']\n          @pipeline_spec = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobPipelineSpec.new(args['pipelineSpec'], to_s)\n          @network = args['network']\n          @labels = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobLabels.new(args['labels'], to_s)\n          @runtime_config = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfig.new(args['runtimeConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJob\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetail\n        attr_reader :task_details\n\n        attr_reader :pipeline_run_context\n\n        attr_reader :pipeline_context\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @task_details = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsArray.parse(args['taskDetails'], to_s)\n          @pipeline_run_context = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContext.new(args['pipelineRunContext'], to_s)\n          @pipeline_context = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContext.new(args['pipelineContext'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContext\n        attr_reader :name\n\n        attr_reader :schema_title\n\n        attr_reader :etag\n\n        attr_reader :description\n\n        attr_reader :display_name\n\n        attr_reader :schema_version\n\n        attr_reader :create_time\n\n        attr_reader :labels\n\n        attr_reader :metadata\n\n        attr_reader :update_time\n\n        attr_reader :parent_contexts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @schema_title = args['schemaTitle']\n          @etag = args['etag']\n          @description = args['description']\n          @display_name = args['displayName']\n          @schema_version = args['schemaVersion']\n          @create_time = args['createTime']\n          @labels = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextLabels.new(args['labels'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextMetadata.new(args['metadata'], to_s)\n          @update_time = args['updateTime']\n          @parent_contexts = args['parentContexts']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineContextMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContext\n        attr_reader :name\n\n        attr_reader :schema_title\n\n        attr_reader :etag\n\n        attr_reader :description\n\n        attr_reader :display_name\n\n        attr_reader :schema_version\n\n        attr_reader :create_time\n\n        attr_reader :labels\n\n        attr_reader :metadata\n\n        attr_reader :update_time\n\n        attr_reader :parent_contexts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @schema_title = args['schemaTitle']\n          @etag = args['etag']\n          @description = args['description']\n          @display_name = args['displayName']\n          @schema_version = args['schemaVersion']\n          @create_time = args['createTime']\n          @labels = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextLabels.new(args['labels'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextMetadata.new(args['metadata'], to_s)\n          @update_time = args['updateTime']\n          @parent_contexts = args['parentContexts']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContext\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailPipelineRunContextMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_error'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_executor_detail'\nrequire 'google/vertexai/property/schedule_cpjrpjjdtdedc_detail'\nrequire 'google/vertexai/property/schedule_cpjrpjjdtdedcj_detail'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_inputs'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_outputs'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_pipeline_task_status'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetails\n        attr_reader :inputs\n\n        attr_reader :pipeline_task_status\n\n        attr_reader :end_time\n\n        attr_reader :outputs\n\n        attr_reader :create_time\n\n        attr_reader :start_time\n\n        attr_reader :execution\n\n        attr_reader :task_name\n\n        attr_reader :parent_task_id\n\n        attr_reader :state\n\n        attr_reader :task_id\n\n        attr_reader :executor_detail\n\n        attr_reader :error\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @inputs = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsInputs.new(args['inputs'], to_s)\n          @pipeline_task_status = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatusArray.parse(args['pipelineTaskStatus'], to_s)\n          @end_time = args['endTime']\n          @outputs = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsOutputs.new(args['outputs'], to_s)\n          @create_time = args['createTime']\n          @start_time = args['startTime']\n          @execution = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecution.new(args['execution'], to_s)\n          @task_name = args['taskName']\n          @parent_task_id = args['parentTaskId']\n          @state = args['state']\n          @task_id = args['taskId']\n          @executor_detail = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetail.new(args['executorDetail'], to_s)\n          @error = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsError.new(args['error'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetails\"\n        end\n      end\n\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetails.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetails.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_metadata'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecution\n        attr_reader :labels\n\n        attr_reader :create_time\n\n        attr_reader :schema_version\n\n        attr_reader :state\n\n        attr_reader :name\n\n        attr_reader :etag\n\n        attr_reader :display_name\n\n        attr_reader :metadata\n\n        attr_reader :schema_title\n\n        attr_reader :description\n\n        attr_reader :update_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @labels = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionLabels.new(args['labels'], to_s)\n          @create_time = args['createTime']\n          @schema_version = args['schemaVersion']\n          @state = args['state']\n          @name = args['name']\n          @etag = args['etag']\n          @display_name = args['displayName']\n          @metadata = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionMetadata.new(args['metadata'], to_s)\n          @schema_title = args['schemaTitle']\n          @description = args['description']\n          @update_time = args['updateTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_execution_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionMetadata\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutionMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_executor_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_cpjrpjjdtdedc_detail'\nrequire 'google/vertexai/property/schedule_cpjrpjjdtdedcj_detail'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetail\n        attr_reader :container_detail\n\n        attr_reader :custom_job_detail\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_detail = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailContainerDetail.new(args['containerDetail'], to_s)\n          @custom_job_detail = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetailCustomJobDetail.new(args['customJobDetail'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsExecutorDetail\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details_pipeline_task_status.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_cpjrpjjdtdpts_error'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatus\n        attr_reader :update_time\n\n        attr_reader :error\n\n        attr_reader :state\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @update_time = args['updateTime']\n          @error = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatusError.new(args['error'], to_s)\n          @state = args['state']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatus\"\n        end\n      end\n\n      class ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatusArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatus.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| ScheduleCreatePipelineJobRequestPipelineJobJobDetailTaskDetailsPipelineTaskStatus.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_pipeline_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobPipelineSpec\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobPipelineSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameter_values'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameters'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfig\n        attr_reader :gcs_output_directory\n\n        attr_reader :parameter_values\n\n        attr_reader :failure_policy\n\n        attr_reader :parameters\n\n        attr_reader :input_artifacts\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_output_directory = args['gcsOutputDirectory']\n          @parameter_values = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameterValues.new(args['parameterValues'], to_s)\n          @failure_policy = args['failurePolicy']\n          @parameters = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameters.new(args['parameters'], to_s)\n          @input_artifacts = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigInputArtifacts.new(args['inputArtifacts'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_input_artifacts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigInputArtifacts\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigInputArtifacts\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameter_values.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameterValues\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameterValues\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameters\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobRuntimeConfigParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_template_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleCreatePipelineJobRequestPipelineJobTemplateMetadata\n        attr_reader :version\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @version = args['version']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleCreatePipelineJobRequestPipelineJobTemplateMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/schedule_last_scheduled_run_response.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class ScheduleLastScheduledRunResponse\n        attr_reader :run_response\n\n        attr_reader :scheduled_run_time\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @run_response = args['runResponse']\n          @scheduled_run_time = args['scheduledRunTime']\n        end\n\n        def to_s\n          \"#{@parent_identifier} ScheduleLastScheduledRunResponse\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_final_measurement.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/studiestrial_final_measurement_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialFinalMeasurement\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::StudiesTrialFinalMeasurementMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialFinalMeasurement\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_final_measurement_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialFinalMeasurementMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialFinalMeasurementMetrics\"\n        end\n      end\n\n      class StudiesTrialFinalMeasurementMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return StudiesTrialFinalMeasurementMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| StudiesTrialFinalMeasurementMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_measurements.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/studiestrial_measurements_metrics'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialMeasurements\n        attr_reader :metrics\n\n        attr_reader :elapsed_duration\n\n        attr_reader :step_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metrics = GoogleInSpec::VertexAI::Property::StudiesTrialMeasurementsMetricsArray.parse(args['metrics'], to_s)\n          @elapsed_duration = args['elapsedDuration']\n          @step_count = args['stepCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialMeasurements\"\n        end\n      end\n\n      class StudiesTrialMeasurementsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return StudiesTrialMeasurements.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| StudiesTrialMeasurements.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_measurements_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialMeasurementsMetrics\n        attr_reader :metric_id\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @metric_id = args['metricId']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialMeasurementsMetrics\"\n        end\n      end\n\n      class StudiesTrialMeasurementsMetricsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return StudiesTrialMeasurementsMetrics.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| StudiesTrialMeasurementsMetrics.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialParameters\n        attr_reader :value\n\n        attr_reader :parameter_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @value = args['value']\n          @parameter_id = args['parameterId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialParameters\"\n        end\n      end\n\n      class StudiesTrialParametersArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return StudiesTrialParameters.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| StudiesTrialParameters.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/studiestrial_web_access_uris.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class StudiesTrialWebAccessUris\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} StudiesTrialWebAccessUris\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/tensorboard_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TensorboardEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TensorboardEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/tensorboard_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TensorboardLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TensorboardLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/tensorboardexperimentrun_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TensorboardExperimentRunLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TensorboardExperimentRunLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/tensorboardsexperiment_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TensorboardsExperimentLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TensorboardsExperimentLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_error.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineError\n        attr_reader :details\n\n        attr_reader :code\n\n        attr_reader :message\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @details = args['details']\n          @code = args['code']\n          @message = args['message']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineError\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_bigquery_destination'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_filter_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_fraction_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_gcs_destination'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_predefined_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_stratified_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_timestamp_split'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfig\n        attr_reader :fraction_split\n\n        attr_reader :persist_ml_use_assignment\n\n        attr_reader :saved_query_id\n\n        attr_reader :annotations_filter\n\n        attr_reader :gcs_destination\n\n        attr_reader :bigquery_destination\n\n        attr_reader :stratified_split\n\n        attr_reader :annotation_schema_uri\n\n        attr_reader :predefined_split\n\n        attr_reader :filter_split\n\n        attr_reader :timestamp_split\n\n        attr_reader :dataset_id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @fraction_split = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigFractionSplit.new(args['fractionSplit'], to_s)\n          @persist_ml_use_assignment = args['persistMlUseAssignment']\n          @saved_query_id = args['savedQueryId']\n          @annotations_filter = args['annotationsFilter']\n          @gcs_destination = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigGcsDestination.new(args['gcsDestination'], to_s)\n          @bigquery_destination = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigBigqueryDestination.new(args['bigqueryDestination'], to_s)\n          @stratified_split = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigStratifiedSplit.new(args['stratifiedSplit'], to_s)\n          @annotation_schema_uri = args['annotationSchemaUri']\n          @predefined_split = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigPredefinedSplit.new(args['predefinedSplit'], to_s)\n          @filter_split = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigFilterSplit.new(args['filterSplit'], to_s)\n          @timestamp_split = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfigTimestampSplit.new(args['timestampSplit'], to_s)\n          @dataset_id = args['datasetId']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_bigquery_destination.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigBigqueryDestination\n        attr_reader :output_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri = args['outputUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigBigqueryDestination\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_filter_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigFilterSplit\n        attr_reader :validation_filter\n\n        attr_reader :test_filter\n\n        attr_reader :training_filter\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @validation_filter = args['validationFilter']\n          @test_filter = args['testFilter']\n          @training_filter = args['trainingFilter']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigFilterSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_fraction_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigFractionSplit\n        attr_reader :training_fraction\n\n        attr_reader :test_fraction\n\n        attr_reader :validation_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @training_fraction = args['trainingFraction']\n          @test_fraction = args['testFraction']\n          @validation_fraction = args['validationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigFractionSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_gcs_destination.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigGcsDestination\n        attr_reader :output_uri_prefix\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_uri_prefix = args['outputUriPrefix']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigGcsDestination\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_predefined_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigPredefinedSplit\n        attr_reader :key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @key = args['key']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigPredefinedSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_stratified_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigStratifiedSplit\n        attr_reader :training_fraction\n\n        attr_reader :test_fraction\n\n        attr_reader :key\n\n        attr_reader :validation_fraction\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @training_fraction = args['trainingFraction']\n          @test_fraction = args['testFraction']\n          @key = args['key']\n          @validation_fraction = args['validationFraction']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigStratifiedSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_input_data_config_timestamp_split.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineInputDataConfigTimestampSplit\n        attr_reader :test_fraction\n\n        attr_reader :training_fraction\n\n        attr_reader :validation_fraction\n\n        attr_reader :key\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @test_fraction = args['testFraction']\n          @training_fraction = args['trainingFraction']\n          @validation_fraction = args['validationFraction']\n          @key = args['key']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineInputDataConfigTimestampSplit\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_env'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_ports'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_deployed_models'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_encryption_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigabb_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasg_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxabb_config'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_labels'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_model_source_info'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_original_model_info'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_predict_schemata'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_supported_export_formats'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUpload\n        attr_reader :model_source_info\n\n        attr_reader :name\n\n        attr_reader :metadata\n\n        attr_reader :update_time\n\n        attr_reader :etag\n\n        attr_reader :description\n\n        attr_reader :deployed_models\n\n        attr_reader :create_time\n\n        attr_reader :explanation_spec\n\n        attr_reader :encryption_spec\n\n        attr_reader :pipeline_job\n\n        attr_reader :predict_schemata\n\n        attr_reader :version_update_time\n\n        attr_reader :supported_export_formats\n\n        attr_reader :original_model_info\n\n        attr_reader :metadata_artifact\n\n        attr_reader :supported_input_storage_formats\n\n        attr_reader :metadata_schema_uri\n\n        attr_reader :container_spec\n\n        attr_reader :version_id\n\n        attr_reader :artifact_uri\n\n        attr_reader :training_pipeline\n\n        attr_reader :display_name\n\n        attr_reader :supported_deployment_resources_types\n\n        attr_reader :supported_output_storage_formats\n\n        attr_reader :version_aliases\n\n        attr_reader :version_create_time\n\n        attr_reader :version_description\n\n        attr_reader :labels\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @model_source_info = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadModelSourceInfo.new(args['modelSourceInfo'], to_s)\n          @name = args['name']\n          @metadata = args['metadata']\n          @update_time = args['updateTime']\n          @etag = args['etag']\n          @description = args['description']\n          @deployed_models = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadDeployedModelsArray.parse(args['deployedModels'], to_s)\n          @create_time = args['createTime']\n          @explanation_spec = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpec.new(args['explanationSpec'], to_s)\n          @encryption_spec = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadEncryptionSpec.new(args['encryptionSpec'], to_s)\n          @pipeline_job = args['pipelineJob']\n          @predict_schemata = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadPredictSchemata.new(args['predictSchemata'], to_s)\n          @version_update_time = args['versionUpdateTime']\n          @supported_export_formats = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadSupportedExportFormatsArray.parse(args['supportedExportFormats'], to_s)\n          @original_model_info = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadOriginalModelInfo.new(args['originalModelInfo'], to_s)\n          @metadata_artifact = args['metadataArtifact']\n          @supported_input_storage_formats = args['supportedInputStorageFormats']\n          @metadata_schema_uri = args['metadataSchemaUri']\n          @container_spec = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadContainerSpec.new(args['containerSpec'], to_s)\n          @version_id = args['versionId']\n          @artifact_uri = args['artifactUri']\n          @training_pipeline = args['trainingPipeline']\n          @display_name = args['displayName']\n          @supported_deployment_resources_types = args['supportedDeploymentResourcesTypes']\n          @supported_output_storage_formats = args['supportedOutputStorageFormats']\n          @version_aliases = args['versionAliases']\n          @version_create_time = args['versionCreateTime']\n          @version_description = args['versionDescription']\n          @labels = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadLabels.new(args['labels'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUpload\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_container_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_env'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_ports'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadContainerSpec\n        attr_reader :predict_route\n\n        attr_reader :image_uri\n\n        attr_reader :env\n\n        attr_reader :args\n\n        attr_reader :command\n\n        attr_reader :ports\n\n        attr_reader :health_route\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @predict_route = args['predictRoute']\n          @image_uri = args['imageUri']\n          @env = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadContainerSpecEnvArray.parse(args['env'], to_s)\n          @args = args['args']\n          @command = args['command']\n          @ports = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadContainerSpecPortsArray.parse(args['ports'], to_s)\n          @health_route = args['healthRoute']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadContainerSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_container_spec_env.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadContainerSpecEnv\n        attr_reader :name\n\n        attr_reader :value\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @value = args['value']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadContainerSpecEnv\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadContainerSpecEnvArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadContainerSpecEnv.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadContainerSpecEnv.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_container_spec_ports.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadContainerSpecPorts\n        attr_reader :container_port\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @container_port = args['containerPort']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadContainerSpecPorts\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadContainerSpecPortsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadContainerSpecPorts.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadContainerSpecPorts.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_deployed_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadDeployedModels\n        attr_reader :deployed_model_id\n\n        attr_reader :endpoint\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @deployed_model_id = args['deployedModelId']\n          @endpoint = args['endpoint']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadDeployedModels\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadDeployedModelsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadDeployedModels.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadDeployedModels.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_encryption_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadEncryptionSpec\n        attr_reader :kms_key_name\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @kms_key_name = args['kmsKeyName']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadEncryptionSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigabb_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasg_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxabb_config'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpec\n        attr_reader :parameters\n\n        attr_reader :metadata\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @parameters = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParameters.new(args['parameters'], to_s)\n          @metadata = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecMetadata.new(args['metadata'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpec\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_outputs'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecMetadata\n        attr_reader :feature_attributions_schema_uri\n\n        attr_reader :latent_space_source\n\n        attr_reader :outputs\n\n        attr_reader :inputs\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_attributions_schema_uri = args['featureAttributionsSchemaUri']\n          @latent_space_source = args['latentSpaceSource']\n          @outputs = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecMetadataOutputs.new(args['outputs'], to_s)\n          @inputs = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecMetadataInputs.new(args['inputs'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecMetadata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_inputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecMetadataInputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecMetadataInputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_outputs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecMetadataOutputs\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecMetadataOutputs\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigabb_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasg_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxabb_config'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParameters\n        attr_reader :output_indices\n\n        attr_reader :examples\n\n        attr_reader :xrai_attribution\n\n        attr_reader :top_k\n\n        attr_reader :integrated_gradients_attribution\n\n        attr_reader :sampled_shapley_attribution\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @output_indices = args['outputIndices']\n          @examples = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersExamples.new(args['examples'], to_s)\n          @xrai_attribution = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersXraiAttribution.new(args['xraiAttribution'], to_s)\n          @top_k = args['topK']\n          @integrated_gradients_attribution = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttribution.new(args['integratedGradientsAttribution'], to_s)\n          @sampled_shapley_attribution = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersSampledShapleyAttribution.new(args['sampledShapleyAttribution'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParameters\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersExamples\n        attr_reader :presets\n\n        attr_reader :neighbor_count\n\n        attr_reader :example_gcs_source\n\n        attr_reader :nearest_neighbor_search_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @presets = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersExamplesPresets.new(args['presets'], to_s)\n          @neighbor_count = args['neighborCount']\n          @example_gcs_source = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSource.new(args['exampleGcsSource'], to_s)\n          @nearest_neighbor_search_config = args['nearestNeighborSearchConfig']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersExamples\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSource\n        attr_reader :gcs_source\n\n        attr_reader :data_format\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @gcs_source = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSourceGcsSource.new(args['gcsSource'], to_s)\n          @data_format = args['dataFormat']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersExamplesPresets\n        attr_reader :modality\n\n        attr_reader :query\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @modality = args['modality']\n          @query = args['query']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersExamplesPresets\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_integrated_gradients_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespigabb_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasg_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttribution\n        attr_reader :step_count\n\n        attr_reader :smooth_grad_config\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @step_count = args['stepCount']\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_sampled_shapley_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersSampledShapleyAttribution\n        attr_reader :path_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @path_count = args['pathCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersSampledShapleyAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespxabb_config'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttribution\n        attr_reader :smooth_grad_config\n\n        attr_reader :step_count\n\n        attr_reader :blur_baseline_config\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @smooth_grad_config = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfig.new(args['smoothGradConfig'], to_s)\n          @step_count = args['stepCount']\n          @blur_baseline_config = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionBlurBaselineConfig.new(args['blurBaselineConfig'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersXraiAttribution\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_labels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadLabels\n        attr_reader :additional_properties\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @additional_properties = args['additionalProperties']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadLabels\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_model_source_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadModelSourceInfo\n        attr_reader :copy\n\n        attr_reader :source_type\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @copy = args['copy']\n          @source_type = args['sourceType']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadModelSourceInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_original_model_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadOriginalModelInfo\n        attr_reader :model\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @model = args['model']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadOriginalModelInfo\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_predict_schemata.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadPredictSchemata\n        attr_reader :instance_schema_uri\n\n        attr_reader :parameters_schema_uri\n\n        attr_reader :prediction_schema_uri\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @instance_schema_uri = args['instanceSchemaUri']\n          @parameters_schema_uri = args['parametersSchemaUri']\n          @prediction_schema_uri = args['predictionSchemaUri']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadPredictSchemata\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_model_to_upload_supported_export_formats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadSupportedExportFormats\n        attr_reader :exportable_contents\n\n        attr_reader :id\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @exportable_contents = args['exportableContents']\n          @id = args['id']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadSupportedExportFormats\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadSupportedExportFormatsArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadSupportedExportFormats.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadSupportedExportFormats.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespeegsg_source.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSourceGcsSource\n        attr_reader :uris\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @uris = args['uris']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersExamplesExampleGcsSourceGcsSource\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespigabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespigasg_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\n        attr_reader :feature_noise_sigma\n\n        attr_reader :noise_sigma\n\n        attr_reader :noisy_sample_count\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @feature_noise_sigma = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma.new(args['featureNoiseSigma'], to_s)\n          @noise_sigma = args['noiseSigma']\n          @noisy_sample_count = args['noisySampleCount']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadExplanationSpecParametersIntegratedGradientsAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespxabb_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionBlurBaselineConfig\n        attr_reader :max_blur_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @max_blur_sigma = args['maxBlurSigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionBlurBaselineConfig\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\n        attr_reader :noise_sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @noise_sigma = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray.parse(args['noiseSigma'], to_s)\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigma\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nmodule GoogleInSpec\n  module VertexAI\n    module Property\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\n        attr_reader :name\n\n        attr_reader :sigma\n\n        def initialize(args = nil, parent_identifier = nil)\n          return if args.nil?\n          @parent_identifier = parent_identifier\n          @name = args['name']\n          @sigma = args['sigma']\n        end\n\n        def to_s\n          \"#{@parent_identifier} TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma\"\n        end\n      end\n\n      class TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigmaArray\n        def self.parse(value, parent_identifier)\n          return if value.nil?\n          return TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(value, parent_identifier) unless value.is_a?(::Array)\n          value.map { |v| TrainingPipelineModelToUploadExplanationSpecParametersXraiAttributionSmoothGradConfigFeatureNoiseSigmaNoiseSigma.new(v, parent_identifier) }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_access_level.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/accesscontextmanager/property/accesslevel_basic'\nrequire 'google/accesscontextmanager/property/accesslevel_basic_conditions'\nrequire 'google/accesscontextmanager/property/accesslevel_custom'\nrequire 'google/accesscontextmanager/property/accesslevel_custom_expr'\n\n# A provider to manage Access Context Manager (VPC Service Controls) resources.\nclass AccessContextManagerAccessLevel < GcpResourceBase\n  name 'google_access_context_manager_access_level'\n  desc 'AccessLevel'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :title\n  attr_reader :description\n  attr_reader :basic\n  attr_reader :custom\n  attr_reader :parent\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @title = @fetched['title']\n    @description = @fetched['description']\n    @basic = GoogleInSpec::AccessContextManager::Property::AccessLevelBasic.new(@fetched['basic'], to_s)\n    @custom = GoogleInSpec::AccessContextManager::Property::AccessLevelCustom.new(@fetched['custom'], to_s)\n    @parent = name_from_self_link(@fetched['parent'])\n    @name = name_from_self_link(@fetched['name'])\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"AccessLevel #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies/{{parent}}/accessLevels/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_access_levels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass AccessContextManagerAccessLevels < GcpResourceBase\n  name 'google_access_context_manager_access_levels'\n  desc 'AccessLevel plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:titles, field: :title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:basics, field: :basic)\n  filter_table_config.add(:customs, field: :custom)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('accessLevels')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'title' => ->(obj) { [:title, obj['title']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'basic' => ->(obj) { [:basic, GoogleInSpec::AccessContextManager::Property::AccessLevelBasic.new(obj['basic'], to_s)] },\n      'custom' => ->(obj) { [:custom, GoogleInSpec::AccessContextManager::Property::AccessLevelCustom.new(obj['custom'], to_s)] },\n      'parent' => ->(obj) { [:parent, name_from_self_link(obj['parent'])] },\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies/{{parent}}/accessLevels'\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_access_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass AccessContextManagerAccessPolicys < GcpResourceBase\n  name 'google_access_context_manager_access_policies'\n  desc 'AccessPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:titles, field: :title)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('accessPolicies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'updateTime' => ->(obj) { [:update_time, parse_time_string(obj['updateTime'])] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'title' => ->(obj) { [:title, obj['title']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies?parent=organizations/{{org_id}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_access_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Access Context Manager (VPC Service Controls) resources.\nclass AccessContextManagerAccessPolicy < GcpResourceBase\n  name 'google_access_context_manager_access_policy'\n  desc 'AccessPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :parent\n  attr_reader :title\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = name_from_self_link(@fetched['name'])\n    @create_time = parse_time_string(@fetched['createTime'])\n    @update_time = parse_time_string(@fetched['updateTime'])\n    @parent = @fetched['parent']\n    @title = @fetched['title']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"AccessPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_service_perimeter.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/accesscontextmanager/property/serviceperimeter_spec'\nrequire 'google/accesscontextmanager/property/serviceperimeter_spec_vpc_accessible_services'\nrequire 'google/accesscontextmanager/property/serviceperimeter_status'\nrequire 'google/accesscontextmanager/property/serviceperimeter_status_vpc_accessible_services'\n\n# A provider to manage Access Context Manager (VPC Service Controls) resources.\nclass AccessContextManagerServicePerimeter < GcpResourceBase\n  name 'google_access_context_manager_service_perimeter'\n  desc 'ServicePerimeter'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :title\n  attr_reader :description\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :perimeter_type\n  attr_reader :status\n  attr_reader :spec\n  attr_reader :use_explicit_dry_run_spec\n  attr_reader :parent\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @title = @fetched['title']\n    @description = @fetched['description']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @update_time = parse_time_string(@fetched['updateTime'])\n    @perimeter_type = @fetched['perimeterType']\n    @status = GoogleInSpec::AccessContextManager::Property::ServicePerimeterStatus.new(@fetched['status'], to_s)\n    @spec = GoogleInSpec::AccessContextManager::Property::ServicePerimeterSpec.new(@fetched['spec'], to_s)\n    @use_explicit_dry_run_spec = @fetched['useExplicitDryRunSpec']\n    @parent = @fetched['parent']\n    @name = name_from_self_link(@fetched['name'])\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServicePerimeter #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies/{{policy_name}}/servicePerimeters/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_access_context_manager_service_perimeters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass AccessContextManagerServicePerimeters < GcpResourceBase\n  name 'google_access_context_manager_service_perimeters'\n  desc 'ServicePerimeter plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:titles, field: :title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:perimeter_types, field: :perimeter_type)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:specs, field: :spec)\n  filter_table_config.add(:use_explicit_dry_run_specs, field: :use_explicit_dry_run_spec)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('servicePerimeters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'title' => ->(obj) { [:title, obj['title']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'updateTime' => ->(obj) { [:update_time, parse_time_string(obj['updateTime'])] },\n      'perimeterType' => ->(obj) { [:perimeter_type, obj['perimeterType']] },\n      'status' => ->(obj) { [:status, GoogleInSpec::AccessContextManager::Property::ServicePerimeterStatus.new(obj['status'], to_s)] },\n      'spec' => ->(obj) { [:spec, GoogleInSpec::AccessContextManager::Property::ServicePerimeterSpec.new(obj['spec'], to_s)] },\n      'useExplicitDryRunSpec' => ->(obj) { [:use_explicit_dry_run_spec, obj['useExplicitDryRunSpec']] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://accesscontextmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'accessPolicies/{{policy_name}}/servicePerimeters'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_endpoint_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Apigee resources.\nclass ApigeeEndpointAttachment < GcpResourceBase\n  name 'google_apigee_endpoint_attachment'\n  desc 'EndpointAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :host\n  attr_reader :connection_state\n  attr_reader :service_attachment\n  attr_reader :location\n  attr_reader :name\n  attr_reader :state\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @host = @fetched['host']\n    @connection_state = @fetched['connectionState']\n    @service_attachment = @fetched['serviceAttachment']\n    @location = @fetched['location']\n    @name = @fetched['name']\n    @state = @fetched['state']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"EndpointAttachment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_endpoint_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeEndpointAttachments < GcpResourceBase\n  name 'google_apigee_endpoint_attachments'\n  desc 'EndpointAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:connection_states, field: :connection_state)\n  filter_table_config.add(:service_attachments, field: :service_attachment)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:states, field: :state)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('endpointAttachments')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'host' => ->(obj) { [:host, obj['host']] },\n      'connectionState' => ->(obj) { [:connection_state, obj['connectionState']] },\n      'serviceAttachment' => ->(obj) { [:service_attachment, obj['serviceAttachment']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/endpointAttachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/apigee/property/organization_addons_config'\nrequire 'google/apigee/property/organization_addons_config_advanced_api_ops_config'\nrequire 'google/apigee/property/organization_addons_config_analytics_config'\nrequire 'google/apigee/property/organization_addons_config_api_security_config'\nrequire 'google/apigee/property/organization_addons_config_connectors_platform_config'\nrequire 'google/apigee/property/organization_addons_config_integration_config'\nrequire 'google/apigee/property/organization_addons_config_monetization_config'\nrequire 'google/apigee/property/organization_properties'\nrequire 'google/apigee/property/organization_properties_property'\n\n# A provider to manage Apigee resources.\nclass ApigeeOrganization < GcpResourceBase\n  name 'google_apigee_organization'\n  desc 'Organization'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :api_consumer_data_encryption_key_name\n  attr_reader :runtime_database_encryption_key_name\n  attr_reader :environments\n  attr_reader :runtime_type\n  attr_reader :type\n  attr_reader :portal_disabled\n  attr_reader :authorized_network\n  attr_reader :project_id\n  attr_reader :description\n  attr_reader :ca_certificate\n  attr_reader :subscription_type\n  attr_reader :addons_config\n  attr_reader :customer_name\n  attr_reader :created_at\n  attr_reader :last_modified_at\n  attr_reader :subscription_plan\n  attr_reader :properties\n  attr_reader :state\n  attr_reader :name\n  attr_reader :disable_vpc_peering\n  attr_reader :control_plane_encryption_key_name\n  attr_reader :analytics_region\n  attr_reader :api_consumer_data_location\n  attr_reader :display_name\n  attr_reader :apigee_project_id\n  attr_reader :expires_at\n  attr_reader :attributes\n  attr_reader :billing_type\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @api_consumer_data_encryption_key_name = @fetched['apiConsumerDataEncryptionKeyName']\n    @runtime_database_encryption_key_name = @fetched['runtimeDatabaseEncryptionKeyName']\n    @environments = @fetched['environments']\n    @runtime_type = @fetched['runtimeType']\n    @type = @fetched['type']\n    @portal_disabled = @fetched['portalDisabled']\n    @authorized_network = @fetched['authorizedNetwork']\n    @project_id = @fetched['projectId']\n    @description = @fetched['description']\n    @ca_certificate = @fetched['caCertificate']\n    @subscription_type = @fetched['subscriptionType']\n    @addons_config = GoogleInSpec::Apigee::Property::OrganizationAddonsConfig.new(@fetched['addonsConfig'], to_s)\n    @customer_name = @fetched['customerName']\n    @created_at = @fetched['createdAt']\n    @last_modified_at = @fetched['lastModifiedAt']\n    @subscription_plan = @fetched['subscriptionPlan']\n    @properties = GoogleInSpec::Apigee::Property::OrganizationProperties.new(@fetched['properties'], to_s)\n    @state = @fetched['state']\n    @name = @fetched['name']\n    @disable_vpc_peering = @fetched['disableVpcPeering']\n    @control_plane_encryption_key_name = @fetched['controlPlaneEncryptionKeyName']\n    @analytics_region = @fetched['analyticsRegion']\n    @api_consumer_data_location = @fetched['apiConsumerDataLocation']\n    @display_name = @fetched['displayName']\n    @apigee_project_id = @fetched['apigeeProjectId']\n    @expires_at = @fetched['expiresAt']\n    @attributes = @fetched['attributes']\n    @billing_type = @fetched['billingType']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Organization #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_api.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/apigee/property/organizationapi_labels'\nrequire 'google/apigee/property/organizationapi_meta_data'\n\n# A provider to manage Apigee resources.\nclass ApigeeOrganizationApi < GcpResourceBase\n  name 'google_apigee_organization_api'\n  desc 'OrganizationApi'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :revision\n  attr_reader :latest_revision_id\n  attr_reader :meta_data\n  attr_reader :api_proxy_type\n  attr_reader :read_only\n  attr_reader :labels\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @revision = @fetched['revision']\n    @latest_revision_id = @fetched['latestRevisionId']\n    @meta_data = GoogleInSpec::Apigee::Property::OrganizationApiMetaData.new(@fetched['metaData'], to_s)\n    @api_proxy_type = @fetched['apiProxyType']\n    @read_only = @fetched['readOnly']\n    @labels = GoogleInSpec::Apigee::Property::OrganizationApiLabels.new(@fetched['labels'], to_s)\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationApi #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/apis/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_apis.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeOrganizationApis < GcpResourceBase\n  name 'google_apigee_organization_apis'\n  desc 'OrganizationApi plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:revisions, field: :revision)\n  filter_table_config.add(:latest_revision_ids, field: :latest_revision_id)\n  filter_table_config.add(:meta_data, field: :meta_data)\n  filter_table_config.add(:api_proxy_types, field: :api_proxy_type)\n  filter_table_config.add(:read_onlies, field: :read_only)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('proxies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'revision' => ->(obj) { [:revision, obj['revision']] },\n      'latestRevisionId' => ->(obj) { [:latest_revision_id, obj['latestRevisionId']] },\n      'metaData' => ->(obj) { [:meta_data, GoogleInSpec::Apigee::Property::OrganizationApiMetaData.new(obj['metaData'], to_s)] },\n      'apiProxyType' => ->(obj) { [:api_proxy_type, obj['apiProxyType']] },\n      'readOnly' => ->(obj) { [:read_only, obj['readOnly']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Apigee::Property::OrganizationApiLabels.new(obj['labels'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/apis'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_envgroup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Apigee resources.\nclass ApigeeOrganizationEnvgroup < GcpResourceBase\n  name 'google_apigee_organization_envgroup'\n  desc 'OrganizationEnvgroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :last_modified_at\n  attr_reader :hostnames\n  attr_reader :state\n  attr_reader :created_at\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @last_modified_at = @fetched['lastModifiedAt']\n    @hostnames = @fetched['hostnames']\n    @state = @fetched['state']\n    @created_at = @fetched['createdAt']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationEnvgroup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_envgroup_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Apigee resources.\nclass ApigeeOrganizationEnvgroupAttachment < GcpResourceBase\n  name 'google_apigee_organization_envgroup_attachment'\n  desc 'OrganizationEnvgroupAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :created_at\n  attr_reader :environment\n  attr_reader :environment_group_id\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @created_at = @fetched['createdAt']\n    @environment = @fetched['environment']\n    @environment_group_id = @fetched['environmentGroupId']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationEnvgroupAttachment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_envgroup_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeOrganizationEnvgroupAttachments < GcpResourceBase\n  name 'google_apigee_organization_envgroup_attachments'\n  desc 'OrganizationEnvgroupAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:created_ats, field: :created_at)\n  filter_table_config.add(:environments, field: :environment)\n  filter_table_config.add(:environment_group_ids, field: :environment_group_id)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('environmentGroupAttachments')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'createdAt' => ->(obj) { [:created_at, obj['createdAt']] },\n      'environment' => ->(obj) { [:environment, obj['environment']] },\n      'environmentGroupId' => ->(obj) { [:environment_group_id, obj['environmentGroupId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/attachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_envgroups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeOrganizationEnvgroups < GcpResourceBase\n  name 'google_apigee_organization_envgroups'\n  desc 'OrganizationEnvgroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:last_modified_ats, field: :last_modified_at)\n  filter_table_config.add(:hostnames, field: :hostnames)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:created_ats, field: :created_at)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('environmentGroups')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'lastModifiedAt' => ->(obj) { [:last_modified_at, obj['lastModifiedAt']] },\n      'hostnames' => ->(obj) { [:hostnames, obj['hostnames']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createdAt' => ->(obj) { [:created_at, obj['createdAt']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/envgroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_instance_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Apigee resources.\nclass ApigeeOrganizationInstanceAttachment < GcpResourceBase\n  name 'google_apigee_organization_instance_attachment'\n  desc 'OrganizationInstanceAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :environment\n  attr_reader :created_at\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @environment = @fetched['environment']\n    @created_at = @fetched['createdAt']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationInstanceAttachment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/attachments/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organization_instance_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeOrganizationInstanceAttachments < GcpResourceBase\n  name 'google_apigee_organization_instance_attachments'\n  desc 'OrganizationInstanceAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:environments, field: :environment)\n  filter_table_config.add(:created_ats, field: :created_at)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('attachments')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'environment' => ->(obj) { [:environment, obj['environment']] },\n      'createdAt' => ->(obj) { [:created_at, obj['createdAt']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/attachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_apigee_organizations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ApigeeOrganizations < GcpResourceBase\n  name 'google_apigee_organizations'\n  desc 'Organization plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:api_consumer_data_encryption_key_names, field: :api_consumer_data_encryption_key_name)\n  filter_table_config.add(:runtime_database_encryption_key_names, field: :runtime_database_encryption_key_name)\n  filter_table_config.add(:environments, field: :environments)\n  filter_table_config.add(:runtime_types, field: :runtime_type)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:portal_disableds, field: :portal_disabled)\n  filter_table_config.add(:authorized_networks, field: :authorized_network)\n  filter_table_config.add(:project_ids, field: :project_id)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ca_certificates, field: :ca_certificate)\n  filter_table_config.add(:subscription_types, field: :subscription_type)\n  filter_table_config.add(:addons_configs, field: :addons_config)\n  filter_table_config.add(:customer_names, field: :customer_name)\n  filter_table_config.add(:created_ats, field: :created_at)\n  filter_table_config.add(:last_modified_ats, field: :last_modified_at)\n  filter_table_config.add(:subscription_plans, field: :subscription_plan)\n  filter_table_config.add(:properties, field: :properties)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:disable_vpc_peerings, field: :disable_vpc_peering)\n  filter_table_config.add(:control_plane_encryption_key_names, field: :control_plane_encryption_key_name)\n  filter_table_config.add(:analytics_regions, field: :analytics_region)\n  filter_table_config.add(:api_consumer_data_locations, field: :api_consumer_data_location)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:apigee_project_ids, field: :apigee_project_id)\n  filter_table_config.add(:expires_ats, field: :expires_at)\n  filter_table_config.add(:attributes, field: :attributes)\n  filter_table_config.add(:billing_types, field: :billing_type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('organizations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'apiConsumerDataEncryptionKeyName' => ->(obj) { [:api_consumer_data_encryption_key_name, obj['apiConsumerDataEncryptionKeyName']] },\n      'runtimeDatabaseEncryptionKeyName' => ->(obj) { [:runtime_database_encryption_key_name, obj['runtimeDatabaseEncryptionKeyName']] },\n      'environments' => ->(obj) { [:environments, obj['environments']] },\n      'runtimeType' => ->(obj) { [:runtime_type, obj['runtimeType']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'portalDisabled' => ->(obj) { [:portal_disabled, obj['portalDisabled']] },\n      'authorizedNetwork' => ->(obj) { [:authorized_network, obj['authorizedNetwork']] },\n      'projectId' => ->(obj) { [:project_id, obj['projectId']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'caCertificate' => ->(obj) { [:ca_certificate, obj['caCertificate']] },\n      'subscriptionType' => ->(obj) { [:subscription_type, obj['subscriptionType']] },\n      'addonsConfig' => ->(obj) { [:addons_config, GoogleInSpec::Apigee::Property::OrganizationAddonsConfig.new(obj['addonsConfig'], to_s)] },\n      'customerName' => ->(obj) { [:customer_name, obj['customerName']] },\n      'createdAt' => ->(obj) { [:created_at, obj['createdAt']] },\n      'lastModifiedAt' => ->(obj) { [:last_modified_at, obj['lastModifiedAt']] },\n      'subscriptionPlan' => ->(obj) { [:subscription_plan, obj['subscriptionPlan']] },\n      'properties' => ->(obj) { [:properties, GoogleInSpec::Apigee::Property::OrganizationProperties.new(obj['properties'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'disableVpcPeering' => ->(obj) { [:disable_vpc_peering, obj['disableVpcPeering']] },\n      'controlPlaneEncryptionKeyName' => ->(obj) { [:control_plane_encryption_key_name, obj['controlPlaneEncryptionKeyName']] },\n      'analyticsRegion' => ->(obj) { [:analytics_region, obj['analyticsRegion']] },\n      'apiConsumerDataLocation' => ->(obj) { [:api_consumer_data_location, obj['apiConsumerDataLocation']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'apigeeProjectId' => ->(obj) { [:apigee_project_id, obj['apigeeProjectId']] },\n      'expiresAt' => ->(obj) { [:expires_at, obj['expiresAt']] },\n      'attributes' => ->(obj) { [:attributes, obj['attributes']] },\n      'billingType' => ->(obj) { [:billing_type, obj['billingType']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://apigee.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_appengine_standard_app_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/appengine/property/standardappversion_automatic_scaling'\nrequire 'google/appengine/property/standardappversion_automatic_scaling_standard_scheduler_settings'\nrequire 'google/appengine/property/standardappversion_basic_scaling'\nrequire 'google/appengine/property/standardappversion_manual_scaling'\nrequire 'google/appengine/property/standardappversion_vpc_access_connector'\n\n# A provider to manage App Engine resources.\nclass AppEngineStandardAppVersion < GcpResourceBase\n  name 'google_appengine_standard_app_version'\n  desc 'StandardAppVersion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :version_id\n  attr_reader :runtime\n  attr_reader :threadsafe\n  attr_reader :vpc_access_connector\n  attr_reader :inbound_services\n  attr_reader :instance_class\n  attr_reader :automatic_scaling\n  attr_reader :basic_scaling\n  attr_reader :manual_scaling\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @version_id = @fetched['id']\n    @runtime = @fetched['runtime']\n    @threadsafe = @fetched['threadsafe']\n    @vpc_access_connector = GoogleInSpec::AppEngine::Property::StandardAppVersionVPCAccessConnector.new(@fetched['vpcAccessConnector'], to_s)\n    @inbound_services = @fetched['inboundServices']\n    @instance_class = @fetched['instanceClass']\n    @automatic_scaling = GoogleInSpec::AppEngine::Property::StandardAppVersionAutomaticScaling.new(@fetched['automaticScaling'], to_s)\n    @basic_scaling = GoogleInSpec::AppEngine::Property::StandardAppVersionBasicScaling.new(@fetched['basicScaling'], to_s)\n    @manual_scaling = GoogleInSpec::AppEngine::Property::StandardAppVersionManualScaling.new(@fetched['manualScaling'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"StandardAppVersion #{@params[:version_id]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://appengine.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'apps/{{project}}/services/{{service}}/versions/{{version_id}}?view=FULL'\n  end\nend\n"
  },
  {
    "path": "libraries/google_appengine_standard_app_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass AppEngineStandardAppVersions < GcpResourceBase\n  name 'google_appengine_standard_app_versions'\n  desc 'StandardAppVersion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:version_ids, field: :version_id)\n  filter_table_config.add(:runtimes, field: :runtime)\n  filter_table_config.add(:threadsaves, field: :threadsafe)\n  filter_table_config.add(:vpc_access_connectors, field: :vpc_access_connector)\n  filter_table_config.add(:inbound_services, field: :inbound_services)\n  filter_table_config.add(:instance_classes, field: :instance_class)\n  filter_table_config.add(:automatic_scalings, field: :automatic_scaling)\n  filter_table_config.add(:basic_scalings, field: :basic_scaling)\n  filter_table_config.add(:manual_scalings, field: :manual_scaling)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('versions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'id' => ->(obj) { [:version_id, obj['id']] },\n      'runtime' => ->(obj) { [:runtime, obj['runtime']] },\n      'threadsafe' => ->(obj) { [:threadsafe, obj['threadsafe']] },\n      'vpcAccessConnector' => ->(obj) { [:vpc_access_connector, GoogleInSpec::AppEngine::Property::StandardAppVersionVPCAccessConnector.new(obj['vpcAccessConnector'], to_s)] },\n      'inboundServices' => ->(obj) { [:inbound_services, obj['inboundServices']] },\n      'instanceClass' => ->(obj) { [:instance_class, obj['instanceClass']] },\n      'automaticScaling' => ->(obj) { [:automatic_scaling, GoogleInSpec::AppEngine::Property::StandardAppVersionAutomaticScaling.new(obj['automaticScaling'], to_s)] },\n      'basicScaling' => ->(obj) { [:basic_scaling, GoogleInSpec::AppEngine::Property::StandardAppVersionBasicScaling.new(obj['basicScaling'], to_s)] },\n      'manualScaling' => ->(obj) { [:manual_scaling, GoogleInSpec::AppEngine::Property::StandardAppVersionManualScaling.new(obj['manualScaling'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://appengine.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'apps/{{project}}/services/{{service}}/versions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_artifactregistry_project_location_repositories.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ArtifactregistryProjectLocationRepositorys < GcpResourceBase\n  name 'google_artifactregistry_project_location_repositories'\n  desc 'ProjectLocationRepository plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:maven_configs, field: :maven_config)\n  filter_table_config.add(:docker_configs, field: :docker_config)\n  filter_table_config.add(:virtual_repository_configs, field: :virtual_repository_config)\n  filter_table_config.add(:remote_repository_configs, field: :remote_repository_config)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:formats, field: :format)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:kms_key_names, field: :kms_key_name)\n  filter_table_config.add(:modes, field: :mode)\n  filter_table_config.add(:cleanup_policies, field: :cleanup_policies)\n  filter_table_config.add(:size_bytes, field: :size_bytes)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:cleanup_policy_dry_runs, field: :cleanup_policy_dry_run)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('repositories')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'mavenConfig' => ->(obj) { [:maven_config, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryMavenConfig.new(obj['mavenConfig'], to_s)] },\n      'dockerConfig' => ->(obj) { [:docker_config, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryDockerConfig.new(obj['dockerConfig'], to_s)] },\n      'virtualRepositoryConfig' => ->(obj) { [:virtual_repository_config, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryVirtualRepositoryConfig.new(obj['virtualRepositoryConfig'], to_s)] },\n      'remoteRepositoryConfig' => ->(obj) { [:remote_repository_config, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfig.new(obj['remoteRepositoryConfig'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'format' => ->(obj) { [:format, obj['format']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryLabels.new(obj['labels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'kmsKeyName' => ->(obj) { [:kms_key_name, obj['kmsKeyName']] },\n      'mode' => ->(obj) { [:mode, obj['mode']] },\n      'cleanupPolicies' => ->(obj) { [:cleanup_policies, GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryCleanupPolicies.new(obj['cleanupPolicies'], to_s)] },\n      'sizeBytes' => ->(obj) { [:size_bytes, obj['sizeBytes']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'cleanupPolicyDryRun' => ->(obj) { [:cleanup_policy_dry_run, obj['cleanupPolicyDryRun']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://artifactregistry.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/repositories'\n  end\nend\n"
  },
  {
    "path": "libraries/google_artifactregistry_project_location_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/artifactregistry/property/projectlocationrepository_cleanup_policies'\nrequire 'google/artifactregistry/property/projectlocationrepository_docker_config'\nrequire 'google/artifactregistry/property/projectlocationrepository_labels'\nrequire 'google/artifactregistry/property/projectlocationrepository_maven_config'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_apt_repository_public_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_docker_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_maven_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_npm_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_python_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_upstream_credentials'\nrequire 'google/artifactregistry/property/projectlocationrepository_rrcucup_credentials'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_remote_repository_config_yum_repository_public_repository'\nrequire 'google/artifactregistry/property/projectlocationrepository_virtual_repository_config'\nrequire 'google/artifactregistry/property/projectlocationrepository_virtual_repository_config_upstream_policies'\n\n# A provider to manage Artifact Registry resources.\nclass ArtifactregistryProjectLocationRepository < GcpResourceBase\n  name 'google_artifactregistry_project_location_repository'\n  desc 'ProjectLocationRepository'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :maven_config\n  attr_reader :docker_config\n  attr_reader :virtual_repository_config\n  attr_reader :remote_repository_config\n  attr_reader :name\n  attr_reader :format\n  attr_reader :description\n  attr_reader :labels\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :kms_key_name\n  attr_reader :mode\n  attr_reader :cleanup_policies\n  attr_reader :size_bytes\n  attr_reader :satisfies_pzs\n  attr_reader :cleanup_policy_dry_run\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @maven_config = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryMavenConfig.new(@fetched['mavenConfig'], to_s)\n    @docker_config = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryDockerConfig.new(@fetched['dockerConfig'], to_s)\n    @virtual_repository_config = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryVirtualRepositoryConfig.new(@fetched['virtualRepositoryConfig'], to_s)\n    @remote_repository_config = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryRemoteRepositoryConfig.new(@fetched['remoteRepositoryConfig'], to_s)\n    @name = @fetched['name']\n    @format = @fetched['format']\n    @description = @fetched['description']\n    @labels = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryLabels.new(@fetched['labels'], to_s)\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @kms_key_name = @fetched['kmsKeyName']\n    @mode = @fetched['mode']\n    @cleanup_policies = GoogleInSpec::Artifactregistry::Property::ProjectLocationRepositoryCleanupPolicies.new(@fetched['cleanupPolicies'], to_s)\n    @size_bytes = @fetched['sizeBytes']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @cleanup_policy_dry_run = @fetched['cleanupPolicyDryRun']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectLocationRepository #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://artifactregistry.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigquery_dataset.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigquery/property/dataset_access'\nrequire 'google/bigquery/property/dataset_dataset_reference'\nrequire 'google/bigquery/property/dataset_default_encryption_configuration'\n\n# A provider to manage BigQuery resources.\nclass BigQueryDataset < GcpResourceBase\n  name 'google_bigquery_dataset'\n  desc 'Dataset'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :access\n  attr_reader :creation_time\n  attr_reader :dataset_reference\n  attr_reader :default_table_expiration_ms\n  attr_reader :default_partition_expiration_ms\n  attr_reader :description\n  attr_reader :etag\n  attr_reader :friendly_name\n  attr_reader :id\n  attr_reader :labels\n  attr_reader :last_modified_time\n  attr_reader :location\n  attr_reader :default_encryption_configuration\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @access = GoogleInSpec::BigQuery::Property::DatasetAccessArray.parse(@fetched['access'], to_s)\n    @creation_time = @fetched['creationTime']\n    @dataset_reference = GoogleInSpec::BigQuery::Property::DatasetDatasetReference.new(@fetched['datasetReference'], to_s)\n    @default_table_expiration_ms = @fetched['defaultTableExpirationMs']\n    @default_partition_expiration_ms = @fetched['defaultPartitionExpirationMs']\n    @description = @fetched['description']\n    @etag = @fetched['etag']\n    @friendly_name = @fetched['friendlyName']\n    @id = @fetched['id']\n    @labels = @fetched['labels']\n    @last_modified_time = @fetched['lastModifiedTime']\n    @location = @fetched['location']\n    @default_encryption_configuration = GoogleInSpec::BigQuery::Property::DatasetDefaultEncryptionConfiguration.new(@fetched['defaultEncryptionConfiguration'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Dataset #{@params[:name]}\"\n  end\n\n  def name\n    dataset_reference&.dataset_id\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigquery.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigquery_datasets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigQueryDatasets < GcpResourceBase\n  name 'google_bigquery_datasets'\n  desc 'Dataset plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dataset_references, field: :dataset_reference)\n  filter_table_config.add(:default_partition_expiration_ms, field: :default_partition_expiration_ms)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:friendly_names, field: :friendly_name)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:default_encryption_configurations, field: :default_encryption_configuration)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('datasets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'datasetReference' => ->(obj) { [:dataset_reference, GoogleInSpec::BigQuery::Property::DatasetDatasetReference.new(obj['datasetReference'], to_s)] },\n      'defaultPartitionExpirationMs' => ->(obj) { [:default_partition_expiration_ms, obj['defaultPartitionExpirationMs']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'friendlyName' => ->(obj) { [:friendly_name, obj['friendlyName']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'defaultEncryptionConfiguration' => ->(obj) { [:default_encryption_configuration, GoogleInSpec::BigQuery::Property::DatasetDefaultEncryptionConfiguration.new(obj['defaultEncryptionConfiguration'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigquery.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigquery_table.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigquery/property/table_encryption_configuration'\nrequire 'google/bigquery/property/table_external_data_configuration'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options'\nrequire 'google/bigquery/property/table_external_data_configuration_bigtable_options_column_families'\nrequire 'google/bigquery/property/table_external_data_configuration_csv_options'\nrequire 'google/bigquery/property/table_external_data_configuration_google_sheets_options'\nrequire 'google/bigquery/property/table_external_data_configuration_schema'\nrequire 'google/bigquery/property/table_external_data_configuration_schema_fields'\nrequire 'google/bigquery/property/table_schema'\nrequire 'google/bigquery/property/table_schema_fields'\nrequire 'google/bigquery/property/table_streaming_buffer'\nrequire 'google/bigquery/property/table_table_reference'\nrequire 'google/bigquery/property/table_time_partitioning'\nrequire 'google/bigquery/property/table_view'\nrequire 'google/bigquery/property/table_view_user_defined_function_resources'\n\n# A provider to manage BigQuery resources.\nclass BigQueryTable < GcpResourceBase\n  name 'google_bigquery_table'\n  desc 'Table'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :table_reference\n  attr_reader :clustering\n  attr_reader :creation_time\n  attr_reader :description\n  attr_reader :friendly_name\n  attr_reader :id\n  attr_reader :labels\n  attr_reader :last_modified_time\n  attr_reader :location\n  attr_reader :name\n  attr_reader :num_bytes\n  attr_reader :num_long_term_bytes\n  attr_reader :num_rows\n  attr_reader :require_partition_filter\n  attr_reader :type\n  attr_reader :view\n  attr_reader :time_partitioning\n  attr_reader :streaming_buffer\n  attr_reader :schema\n  attr_reader :encryption_configuration\n  attr_reader :expiration_time\n  attr_reader :external_data_configuration\n  attr_reader :dataset\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @table_reference = GoogleInSpec::BigQuery::Property::TableTableReference.new(@fetched['tableReference'], to_s)\n    @clustering = @fetched['clustering']\n    @creation_time = @fetched['creationTime']\n    @description = @fetched['description']\n    @friendly_name = @fetched['friendlyName']\n    @id = @fetched['id']\n    @labels = @fetched['labels']\n    @last_modified_time = @fetched['lastModifiedTime']\n    @location = @fetched['location']\n    @name = @fetched['name']\n    @num_bytes = @fetched['numBytes']\n    @num_long_term_bytes = @fetched['numLongTermBytes']\n    @num_rows = @fetched['numRows']\n    @require_partition_filter = @fetched['requirePartitionFilter']\n    @type = @fetched['type']\n    @view = GoogleInSpec::BigQuery::Property::TableView.new(@fetched['view'], to_s)\n    @time_partitioning = GoogleInSpec::BigQuery::Property::TableTimePartitioning.new(@fetched['timePartitioning'], to_s)\n    @streaming_buffer = GoogleInSpec::BigQuery::Property::TableStreamingBuffer.new(@fetched['streamingBuffer'], to_s)\n    @schema = GoogleInSpec::BigQuery::Property::TableSchema.new(@fetched['schema'], to_s)\n    @encryption_configuration = GoogleInSpec::BigQuery::Property::TableEncryptionConfiguration.new(@fetched['encryptionConfiguration'], to_s)\n    @expiration_time = @fetched['expirationTime']\n    @external_data_configuration = GoogleInSpec::BigQuery::Property::TableExternalDataConfiguration.new(@fetched['externalDataConfiguration'], to_s)\n    @dataset = @fetched['dataset']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Table #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigquery.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{dataset}}/tables/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigquery_tables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigQueryTables < GcpResourceBase\n  name 'google_bigquery_tables'\n  desc 'Table plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:table_references, field: :table_reference)\n  filter_table_config.add(:clusterings, field: :clustering)\n  filter_table_config.add(:creation_times, field: :creation_time)\n  filter_table_config.add(:friendly_names, field: :friendly_name)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:last_modified_times, field: :last_modified_time)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:num_bytes, field: :num_bytes)\n  filter_table_config.add(:num_long_term_bytes, field: :num_long_term_bytes)\n  filter_table_config.add(:num_rows, field: :num_rows)\n  filter_table_config.add(:require_partition_filters, field: :require_partition_filter)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:views, field: :view)\n  filter_table_config.add(:time_partitionings, field: :time_partitioning)\n  filter_table_config.add(:streaming_buffers, field: :streaming_buffer)\n  filter_table_config.add(:schemas, field: :schema)\n  filter_table_config.add(:encryption_configurations, field: :encryption_configuration)\n  filter_table_config.add(:expiration_times, field: :expiration_time)\n  filter_table_config.add(:external_data_configurations, field: :external_data_configuration)\n  filter_table_config.add(:datasets, field: :dataset)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tables')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'tableReference' => ->(obj) { [:table_reference, GoogleInSpec::BigQuery::Property::TableTableReference.new(obj['tableReference'], to_s)] },\n      'clustering' => ->(obj) { [:clustering, obj['clustering']] },\n      'creationTime' => ->(obj) { [:creation_time, obj['creationTime']] },\n      'friendlyName' => ->(obj) { [:friendly_name, obj['friendlyName']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'lastModifiedTime' => ->(obj) { [:last_modified_time, obj['lastModifiedTime']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'numBytes' => ->(obj) { [:num_bytes, obj['numBytes']] },\n      'numLongTermBytes' => ->(obj) { [:num_long_term_bytes, obj['numLongTermBytes']] },\n      'numRows' => ->(obj) { [:num_rows, obj['numRows']] },\n      'requirePartitionFilter' => ->(obj) { [:require_partition_filter, obj['requirePartitionFilter']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'view' => ->(obj) { [:view, GoogleInSpec::BigQuery::Property::TableView.new(obj['view'], to_s)] },\n      'timePartitioning' => ->(obj) { [:time_partitioning, GoogleInSpec::BigQuery::Property::TableTimePartitioning.new(obj['timePartitioning'], to_s)] },\n      'streamingBuffer' => ->(obj) { [:streaming_buffer, GoogleInSpec::BigQuery::Property::TableStreamingBuffer.new(obj['streamingBuffer'], to_s)] },\n      'schema' => ->(obj) { [:schema, GoogleInSpec::BigQuery::Property::TableSchema.new(obj['schema'], to_s)] },\n      'encryptionConfiguration' => ->(obj) { [:encryption_configuration, GoogleInSpec::BigQuery::Property::TableEncryptionConfiguration.new(obj['encryptionConfiguration'], to_s)] },\n      'expirationTime' => ->(obj) { [:expiration_time, obj['expirationTime']] },\n      'externalDataConfiguration' => ->(obj) { [:external_data_configuration, GoogleInSpec::BigQuery::Property::TableExternalDataConfiguration.new(obj['externalDataConfiguration'], to_s)] },\n      'dataset' => ->(obj) { [:dataset, obj['dataset']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigquery.googleapis.com/bigquery/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/datasets/{{dataset}}/tables'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigtableadmin/property/cluster_cluster_config'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_limits'\nrequire 'google/bigtableadmin/property/cluster_cluster_config_cluster_autoscaling_config_autoscaling_targets'\nrequire 'google/bigtableadmin/property/cluster_encryption_config'\n\n# A provider to manage bigtableadmin resources.\nclass BigtableadminCluster < GcpResourceBase\n  name 'google_bigtableadmin_cluster'\n  desc 'Cluster'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :location\n  attr_reader :state\n  attr_reader :serve_nodes\n  attr_reader :cluster_config\n  attr_reader :default_storage_type\n  attr_reader :encryption_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @location = @fetched['location']\n    @state = @fetched['state']\n    @serve_nodes = @fetched['serveNodes']\n    @cluster_config = GoogleInSpec::Bigtableadmin::Property::ClusterClusterConfig.new(@fetched['clusterConfig'], to_s)\n    @default_storage_type = @fetched['defaultStorageType']\n    @encryption_config = GoogleInSpec::Bigtableadmin::Property::ClusterEncryptionConfig.new(@fetched['encryptionConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Cluster #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_cluster_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigtableadmin/property/clusterbackup_encryption_info'\nrequire 'google/bigtableadmin/property/clusterbackup_encryption_info_encryption_status'\n\n# A provider to manage bigtableadmin resources.\nclass BigtableadminClusterBackup < GcpResourceBase\n  name 'google_bigtableadmin_cluster_backup'\n  desc 'ClusterBackup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :source_table\n  attr_reader :source_backup\n  attr_reader :expire_time\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :size_bytes\n  attr_reader :state\n  attr_reader :encryption_info\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @source_table = @fetched['sourceTable']\n    @source_backup = @fetched['sourceBackup']\n    @expire_time = @fetched['expireTime']\n    @start_time = @fetched['startTime']\n    @end_time = @fetched['endTime']\n    @size_bytes = @fetched['sizeBytes']\n    @state = @fetched['state']\n    @encryption_info = GoogleInSpec::Bigtableadmin::Property::ClusterBackupEncryptionInfo.new(@fetched['encryptionInfo'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ClusterBackup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_cluster_backups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigtableadminClusterBackups < GcpResourceBase\n  name 'google_bigtableadmin_cluster_backups'\n  desc 'ClusterBackup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:source_tables, field: :source_table)\n  filter_table_config.add(:source_backups, field: :source_backup)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:size_bytes, field: :size_bytes)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:encryption_infos, field: :encryption_info)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('backups')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'sourceTable' => ->(obj) { [:source_table, obj['sourceTable']] },\n      'sourceBackup' => ->(obj) { [:source_backup, obj['sourceBackup']] },\n      'expireTime' => ->(obj) { [:expire_time, obj['expireTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'sizeBytes' => ->(obj) { [:size_bytes, obj['sizeBytes']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'encryptionInfo' => ->(obj) { [:encryption_info, GoogleInSpec::Bigtableadmin::Property::ClusterBackupEncryptionInfo.new(obj['encryptionInfo'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/backups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_clusters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigtableadminClusters < GcpResourceBase\n  name 'google_bigtableadmin_clusters'\n  desc 'Cluster plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:serve_nodes, field: :serve_nodes)\n  filter_table_config.add(:cluster_configs, field: :cluster_config)\n  filter_table_config.add(:default_storage_types, field: :default_storage_type)\n  filter_table_config.add(:encryption_configs, field: :encryption_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('clusters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'serveNodes' => ->(obj) { [:serve_nodes, obj['serveNodes']] },\n      'clusterConfig' => ->(obj) { [:cluster_config, GoogleInSpec::Bigtableadmin::Property::ClusterClusterConfig.new(obj['clusterConfig'], to_s)] },\n      'defaultStorageType' => ->(obj) { [:default_storage_type, obj['defaultStorageType']] },\n      'encryptionConfig' => ->(obj) { [:encryption_config, GoogleInSpec::Bigtableadmin::Property::ClusterEncryptionConfig.new(obj['encryptionConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/clusters'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_instance_app_profile.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/bigtableadmin/property/instanceappprofile_data_boost_isolation_read_only'\nrequire 'google/bigtableadmin/property/instanceappprofile_multi_cluster_routing_use_any'\nrequire 'google/bigtableadmin/property/instanceappprofile_single_cluster_routing'\nrequire 'google/bigtableadmin/property/instanceappprofile_standard_isolation'\n\n# A provider to manage bigtableadmin resources.\nclass BigtableadminInstanceAppProfile < GcpResourceBase\n  name 'google_bigtableadmin_instance_app_profile'\n  desc 'InstanceAppProfile'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :etag\n  attr_reader :description\n  attr_reader :multi_cluster_routing_use_any\n  attr_reader :single_cluster_routing\n  attr_reader :priority\n  attr_reader :standard_isolation\n  attr_reader :data_boost_isolation_read_only\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @etag = @fetched['etag']\n    @description = @fetched['description']\n    @multi_cluster_routing_use_any = GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileMultiClusterRoutingUseAny.new(@fetched['multiClusterRoutingUseAny'], to_s)\n    @single_cluster_routing = GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileSingleClusterRouting.new(@fetched['singleClusterRouting'], to_s)\n    @priority = @fetched['priority']\n    @standard_isolation = GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileStandardIsolation.new(@fetched['standardIsolation'], to_s)\n    @data_boost_isolation_read_only = GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileDataBoostIsolationReadOnly.new(@fetched['dataBoostIsolationReadOnly'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceAppProfile #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_bigtableadmin_instance_app_profiles.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass BigtableadminInstanceAppProfiles < GcpResourceBase\n  name 'google_bigtableadmin_instance_app_profiles'\n  desc 'InstanceAppProfile plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:multi_cluster_routing_use_anies, field: :multi_cluster_routing_use_any)\n  filter_table_config.add(:single_cluster_routings, field: :single_cluster_routing)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:standard_isolations, field: :standard_isolation)\n  filter_table_config.add(:data_boost_isolation_read_onlies, field: :data_boost_isolation_read_only)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('appProfiles')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'multiClusterRoutingUseAny' => ->(obj) { [:multi_cluster_routing_use_any, GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileMultiClusterRoutingUseAny.new(obj['multiClusterRoutingUseAny'], to_s)] },\n      'singleClusterRouting' => ->(obj) { [:single_cluster_routing, GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileSingleClusterRouting.new(obj['singleClusterRouting'], to_s)] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'standardIsolation' => ->(obj) { [:standard_isolation, GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileStandardIsolation.new(obj['standardIsolation'], to_s)] },\n      'dataBoostIsolationReadOnly' => ->(obj) { [:data_boost_isolation_read_only, GoogleInSpec::Bigtableadmin::Property::InstanceAppProfileDataBoostIsolationReadOnly.new(obj['dataBoostIsolationReadOnly'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://bigtableadmin.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/appProfiles'\n  end\nend\n"
  },
  {
    "path": "libraries/google_billing_project_billing_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Billing resources.\nclass BillingProjectBillingInfo < GcpResourceBase\n  name 'google_billing_project_billing_info'\n  desc 'ProjectBillingInfo'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :project_id\n  attr_reader :billing_account_name\n  attr_reader :billing_enabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @project_id = @fetched['projectId']\n    @billing_account_name = @fetched['billingAccountName']\n    @billing_enabled = @fetched['billingEnabled']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectBillingInfo #{@params[:projectId]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudbilling.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project_id}}/billingInfo'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloud_scheduler_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/cloudscheduler/property/job_app_engine_http_target'\nrequire 'google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing'\nrequire 'google/cloudscheduler/property/job_http_target'\nrequire 'google/cloudscheduler/property/job_http_target_oauth_token'\nrequire 'google/cloudscheduler/property/job_http_target_oidc_token'\nrequire 'google/cloudscheduler/property/job_pubsub_target'\nrequire 'google/cloudscheduler/property/job_retry_config'\n\n# A provider to manage Cloud Scheduler resources.\nclass CloudSchedulerJob < GcpResourceBase\n  name 'google_cloud_scheduler_job'\n  desc 'Job'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :schedule\n  attr_reader :time_zone\n  attr_reader :state\n  attr_reader :attempt_deadline\n  attr_reader :retry_config\n  attr_reader :pubsub_target\n  attr_reader :app_engine_http_target\n  attr_reader :http_target\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @schedule = @fetched['schedule']\n    @time_zone = @fetched['timeZone']\n    @state = @fetched['state']\n    @attempt_deadline = @fetched['attemptDeadline']\n    @retry_config = GoogleInSpec::CloudScheduler::Property::JobRetryConfig.new(@fetched['retryConfig'], to_s)\n    @pubsub_target = GoogleInSpec::CloudScheduler::Property::JobPubsubTarget.new(@fetched['pubsubTarget'], to_s)\n    @app_engine_http_target = GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTarget.new(@fetched['appEngineHttpTarget'], to_s)\n    @http_target = GoogleInSpec::CloudScheduler::Property::JobHttpTarget.new(@fetched['httpTarget'], to_s)\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Job #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudscheduler.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/jobs/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloud_scheduler_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass CloudSchedulerJobs < GcpResourceBase\n  name 'google_cloud_scheduler_jobs'\n  desc 'Job plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:schedules, field: :schedule)\n  filter_table_config.add(:time_zones, field: :time_zone)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:attempt_deadlines, field: :attempt_deadline)\n  filter_table_config.add(:retry_configs, field: :retry_config)\n  filter_table_config.add(:pubsub_targets, field: :pubsub_target)\n  filter_table_config.add(:app_engine_http_targets, field: :app_engine_http_target)\n  filter_table_config.add(:http_targets, field: :http_target)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'schedule' => ->(obj) { [:schedule, obj['schedule']] },\n      'timeZone' => ->(obj) { [:time_zone, obj['timeZone']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'attemptDeadline' => ->(obj) { [:attempt_deadline, obj['attemptDeadline']] },\n      'retryConfig' => ->(obj) { [:retry_config, GoogleInSpec::CloudScheduler::Property::JobRetryConfig.new(obj['retryConfig'], to_s)] },\n      'pubsubTarget' => ->(obj) { [:pubsub_target, GoogleInSpec::CloudScheduler::Property::JobPubsubTarget.new(obj['pubsubTarget'], to_s)] },\n      'appEngineHttpTarget' => ->(obj) { [:app_engine_http_target, GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTarget.new(obj['appEngineHttpTarget'], to_s)] },\n      'httpTarget' => ->(obj) { [:http_target, GoogleInSpec::CloudScheduler::Property::JobHttpTarget.new(obj['httpTarget'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudscheduler.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/jobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloudbuild_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/cloudbuild/property/trigger_build'\nrequire 'google/cloudbuild/property/trigger_build_artifacts'\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects'\nrequire 'google/cloudbuild/property/trigger_build_artifacts_objects_timing'\nrequire 'google/cloudbuild/property/trigger_build_options'\nrequire 'google/cloudbuild/property/trigger_build_options_volumes'\nrequire 'google/cloudbuild/property/trigger_build_secrets'\nrequire 'google/cloudbuild/property/trigger_build_source'\nrequire 'google/cloudbuild/property/trigger_build_source_repo_source'\nrequire 'google/cloudbuild/property/trigger_build_source_storage_source'\nrequire 'google/cloudbuild/property/trigger_build_steps'\nrequire 'google/cloudbuild/property/trigger_github'\nrequire 'google/cloudbuild/property/trigger_github_pull_request'\nrequire 'google/cloudbuild/property/trigger_github_push'\nrequire 'google/cloudbuild/property/trigger_trigger_template'\n\n# A provider to manage Cloud Build resources.\nclass CloudBuildTrigger < GcpResourceBase\n  name 'google_cloudbuild_trigger'\n  desc 'Trigger'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :name\n  attr_reader :description\n  attr_reader :tags\n  attr_reader :disabled\n  attr_reader :create_time\n  attr_reader :substitutions\n  attr_reader :filename\n  attr_reader :ignored_files\n  attr_reader :included_files\n  attr_reader :trigger_template\n  attr_reader :github\n  attr_reader :build\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @tags = @fetched['tags']\n    @disabled = @fetched['disabled']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @substitutions = @fetched['substitutions']\n    @filename = @fetched['filename']\n    @ignored_files = @fetched['ignoredFiles']\n    @included_files = @fetched['includedFiles']\n    @trigger_template = GoogleInSpec::CloudBuild::Property::TriggerTriggerTemplate.new(@fetched['triggerTemplate'], to_s)\n    @github = GoogleInSpec::CloudBuild::Property::TriggerGithub.new(@fetched['github'], to_s)\n    @build = GoogleInSpec::CloudBuild::Property::TriggerBuild.new(@fetched['build'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Trigger #{@params[:id]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudbuild.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/triggers/{{id}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloudbuild_triggers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass CloudBuildTriggers < GcpResourceBase\n  name 'google_cloudbuild_triggers'\n  desc 'Trigger plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:tags, field: :tags)\n  filter_table_config.add(:disableds, field: :disabled)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:substitutions, field: :substitutions)\n  filter_table_config.add(:filenames, field: :filename)\n  filter_table_config.add(:ignored_files, field: :ignored_files)\n  filter_table_config.add(:included_files, field: :included_files)\n  filter_table_config.add(:trigger_templates, field: :trigger_template)\n  filter_table_config.add(:githubs, field: :github)\n  filter_table_config.add(:builds, field: :build)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('triggers')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'tags' => ->(obj) { [:tags, obj['tags']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'substitutions' => ->(obj) { [:substitutions, obj['substitutions']] },\n      'filename' => ->(obj) { [:filename, obj['filename']] },\n      'ignoredFiles' => ->(obj) { [:ignored_files, obj['ignoredFiles']] },\n      'includedFiles' => ->(obj) { [:included_files, obj['includedFiles']] },\n      'triggerTemplate' => ->(obj) { [:trigger_template, GoogleInSpec::CloudBuild::Property::TriggerTriggerTemplate.new(obj['triggerTemplate'], to_s)] },\n      'github' => ->(obj) { [:github, GoogleInSpec::CloudBuild::Property::TriggerGithub.new(obj['github'], to_s)] },\n      'build' => ->(obj) { [:build, GoogleInSpec::CloudBuild::Property::TriggerBuild.new(obj['build'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudbuild.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/triggers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloudfunctions_cloud_function.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/cloudfunctions/property/cloudfunction_event_trigger'\nrequire 'google/cloudfunctions/property/cloudfunction_https_trigger'\nrequire 'google/cloudfunctions/property/cloudfunction_source_repository'\n\n# A provider to manage Cloud Functions resources.\nclass CloudFunctionsCloudFunction < GcpResourceBase\n  name 'google_cloudfunctions_cloud_function'\n  desc 'CloudFunction'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :status\n  attr_reader :entry_point\n  attr_reader :runtime\n  attr_reader :timeout\n  attr_reader :available_memory_mb\n  attr_reader :service_account_email\n  attr_reader :update_time\n  attr_reader :version_id\n  attr_reader :labels\n  attr_reader :environment_variables\n  attr_reader :source_archive_url\n  attr_reader :source_upload_url\n  attr_reader :source_repository\n  attr_reader :https_trigger\n  attr_reader :event_trigger\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @status = @fetched['status']\n    @entry_point = @fetched['entryPoint']\n    @runtime = @fetched['runtime']\n    @timeout = @fetched['timeout']\n    @available_memory_mb = @fetched['availableMemoryMb']\n    @service_account_email = @fetched['serviceAccountEmail']\n    @update_time = @fetched['updateTime']\n    @version_id = @fetched['versionId']\n    @labels = @fetched['labels']\n    @environment_variables = @fetched['environmentVariables']\n    @source_archive_url = @fetched['sourceArchiveUrl']\n    @source_upload_url = @fetched['sourceUploadUrl']\n    @source_repository = GoogleInSpec::CloudFunctions::Property::CloudFunctionSourceRepository.new(@fetched['sourceRepository'], to_s)\n    @https_trigger = GoogleInSpec::CloudFunctions::Property::CloudFunctionHttpsTrigger.new(@fetched['httpsTrigger'], to_s)\n    @event_trigger = GoogleInSpec::CloudFunctions::Property::CloudFunctionEventTrigger.new(@fetched['eventTrigger'], to_s)\n    @location = @fetched['location']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CloudFunction #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudfunctions.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/functions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_cloudfunctions_cloud_functions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass CloudFunctionsCloudFunctions < GcpResourceBase\n  name 'google_cloudfunctions_cloud_functions'\n  desc 'CloudFunction plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:entry_points, field: :entry_point)\n  filter_table_config.add(:runtimes, field: :runtime)\n  filter_table_config.add(:timeouts, field: :timeout)\n  filter_table_config.add(:available_memory_mbs, field: :available_memory_mb)\n  filter_table_config.add(:service_account_emails, field: :service_account_email)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:version_ids, field: :version_id)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:environment_variables, field: :environment_variables)\n  filter_table_config.add(:source_archive_urls, field: :source_archive_url)\n  filter_table_config.add(:source_upload_urls, field: :source_upload_url)\n  filter_table_config.add(:source_repositories, field: :source_repository)\n  filter_table_config.add(:https_triggers, field: :https_trigger)\n  filter_table_config.add(:event_triggers, field: :event_trigger)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('functions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'entryPoint' => ->(obj) { [:entry_point, obj['entryPoint']] },\n      'runtime' => ->(obj) { [:runtime, obj['runtime']] },\n      'timeout' => ->(obj) { [:timeout, obj['timeout']] },\n      'availableMemoryMb' => ->(obj) { [:available_memory_mb, obj['availableMemoryMb']] },\n      'serviceAccountEmail' => ->(obj) { [:service_account_email, obj['serviceAccountEmail']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'versionId' => ->(obj) { [:version_id, obj['versionId']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'environmentVariables' => ->(obj) { [:environment_variables, obj['environmentVariables']] },\n      'sourceArchiveUrl' => ->(obj) { [:source_archive_url, obj['sourceArchiveUrl']] },\n      'sourceUploadUrl' => ->(obj) { [:source_upload_url, obj['sourceUploadUrl']] },\n      'sourceRepository' => ->(obj) { [:source_repository, GoogleInSpec::CloudFunctions::Property::CloudFunctionSourceRepository.new(obj['sourceRepository'], to_s)] },\n      'httpsTrigger' => ->(obj) { [:https_trigger, GoogleInSpec::CloudFunctions::Property::CloudFunctionHttpsTrigger.new(obj['httpsTrigger'], to_s)] },\n      'eventTrigger' => ->(obj) { [:event_trigger, GoogleInSpec::CloudFunctions::Property::CloudFunctionEventTrigger.new(obj['eventTrigger'], to_s)] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudfunctions.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/functions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_composer_project_location_environment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/composer/property/projectlocationenvironment_config'\nrequire 'google/composer/property/projectlocationenvironment_config_database_config'\nrequire 'google/composer/property/projectlocationenvironment_config_encryption_config'\nrequire 'google/composer/property/projectlocationenvironment_config_maintenance_window'\nrequire 'google/composer/property/projectlocationenvironment_config_master_authorized_networks_config'\nrequire 'google/composer/property/projectlocationenvironment_config_master_authorized_networks_config_cidr_blocks'\nrequire 'google/composer/property/projectlocationenvironment_config_node_config'\nrequire 'google/composer/property/projectlocationenvironment_config_node_config_ip_allocation_policy'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_networking_config'\nrequire 'google/composer/property/projectlocationenvironment_config_private_environment_config_private_cluster_config'\nrequire 'google/composer/property/projectlocationenvironment_config_recovery_config'\nrequire 'google/composer/property/projectlocationenvironment_config_recovery_config_scheduled_snapshots_config'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_airflow_config_overrides'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_env_variables'\nrequire 'google/composer/property/projectlocationenvironment_config_software_config_pypi_packages'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_config'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_network_access_control'\nrequire 'google/composer/property/projectlocationenvironment_config_web_server_network_access_control_allowed_ip_ranges'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_scheduler'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_triggerer'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_web_server'\nrequire 'google/composer/property/projectlocationenvironment_config_workloads_config_worker'\nrequire 'google/composer/property/projectlocationenvironment_labels'\nrequire 'google/composer/property/projectlocationenvironment_storage_config'\n\n# A provider to manage composer resources.\nclass ComposerProjectLocationEnvironment < GcpResourceBase\n  name 'google_composer_project_location_environment'\n  desc 'ProjectLocationEnvironment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :config\n  attr_reader :uuid\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :satisfies_pzs\n  attr_reader :storage_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfig.new(@fetched['config'], to_s)\n    @uuid = @fetched['uuid']\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentLabels.new(@fetched['labels'], to_s)\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @storage_config = GoogleInSpec::Composer::Property::ProjectLocationEnvironmentStorageConfig.new(@fetched['storageConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectLocationEnvironment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://composer.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_composer_project_location_environments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComposerProjectLocationEnvironments < GcpResourceBase\n  name 'google_composer_project_location_environments'\n  desc 'ProjectLocationEnvironment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:uuids, field: :uuid)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:storage_configs, field: :storage_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('environments')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::Composer::Property::ProjectLocationEnvironmentConfig.new(obj['config'], to_s)] },\n      'uuid' => ->(obj) { [:uuid, obj['uuid']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Composer::Property::ProjectLocationEnvironmentLabels.new(obj['labels'], to_s)] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'storageConfig' => ->(obj) { [:storage_config, GoogleInSpec::Composer::Property::ProjectLocationEnvironmentStorageConfig.new(obj['storageConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://composer.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/environments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_composer_project_location_image_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComposerProjectLocationImageVersions < GcpResourceBase\n  name 'google_composer_project_location_image_versions'\n  desc 'ProjectLocationImageVersion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:image_versions, field: :image_versions)\n  filter_table_config.add(:next_page_tokens, field: :next_page_token)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('imageVersions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'imageVersions' => ->(obj) { [:image_versions, obj['imageVersions']] },\n      'nextPageToken' => ->(obj) { [:next_page_token, obj['nextPageToken']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://composer.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/imageVersions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_accelerator_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/acceleratortype_deprecated'\n\n# A provider to manage Compute Engine resources.\nclass ComputeAcceleratorType < GcpResourceBase\n  name 'google_compute_accelerator_type'\n  desc 'AcceleratorType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @deprecated = GoogleInSpec::Compute::Property::AcceleratorTypeDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"AcceleratorType #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/acceleratorTypes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_accelerator_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeAcceleratorTypes < GcpResourceBase\n  name 'google_compute_accelerator_types'\n  desc 'AcceleratorType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::AcceleratorTypeDeprecated.new(obj['deprecated'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/acceleratorTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_address.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeAddress < GcpResourceBase\n  name 'google_compute_address'\n  desc 'Address'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :address\n  attr_reader :address_type\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :purpose\n  attr_reader :network_tier\n  attr_reader :subnetwork\n  attr_reader :users\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :status\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @address = @fetched['address']\n    @address_type = @fetched['addressType']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @purpose = @fetched['purpose']\n    @network_tier = @fetched['networkTier']\n    @subnetwork = @fetched['subnetwork']\n    @users = @fetched['users']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @status = @fetched['status']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Address #{@params[:name]}\"\n  end\n\n  def address_ip_exists\n    !@address.nil?\n  end\n\n  # How many users are there for the address\n  def user_count\n    return 0 if @users.nil?\n    @users.count\n  end\n\n  # Return the first user resource base name\n  def user_resource_name\n    @users.first.split('/').last\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{location}}/addresses/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_addresses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeAddresss < GcpResourceBase\n  name 'google_compute_addresses'\n  desc 'Address plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:addresses, field: :address)\n  filter_table_config.add(:address_types, field: :address_type)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:purposes, field: :purpose)\n  filter_table_config.add(:network_tiers, field: :network_tier)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:users, field: :users)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'address' => ->(obj) { [:address, obj['address']] },\n      'addressType' => ->(obj) { [:address_type, obj['addressType']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'purpose' => ->(obj) { [:purpose, obj['purpose']] },\n      'networkTier' => ->(obj) { [:network_tier, obj['networkTier']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'users' => ->(obj) { [:users, obj['users']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{location}}/addresses'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_autoscaler.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/autoscaler_autoscaling_policy'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_load_balancing_utilization'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_down_control'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_in_control'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nrequire 'google/compute/property/autoscaler_autoscaling_policy_scaling_schedules'\n\n# A provider to manage Compute Engine resources.\nclass ComputeAutoscaler < GcpResourceBase\n  name 'google_compute_autoscaler'\n  desc 'Autoscaler'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :autoscaling_policy\n  attr_reader :target\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @autoscaling_policy = GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicy.new(@fetched['autoscalingPolicy'], to_s)\n    @target = @fetched['target']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Autoscaler #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/autoscalers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_autoscalers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeAutoscalers < GcpResourceBase\n  name 'google_compute_autoscalers'\n  desc 'Autoscaler plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:autoscaling_policies, field: :autoscaling_policy)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'autoscalingPolicy' => ->(obj) { [:autoscaling_policy, GoogleInSpec::Compute::Property::AutoscalerAutoscalingPolicy.new(obj['autoscalingPolicy'], to_s)] },\n      'target' => ->(obj) { [:target, obj['target']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/autoscalers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_backend_bucket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/backendbucket_cdn_policy'\nrequire 'google/compute/property/backendbucket_cdn_policy_negative_caching_policy'\n\n# A provider to manage Compute Engine resources.\nclass ComputeBackendBucket < GcpResourceBase\n  name 'google_compute_backend_bucket'\n  desc 'BackendBucket'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bucket_name\n  attr_reader :cdn_policy\n  attr_reader :custom_response_headers\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :enable_cdn\n  attr_reader :id\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bucket_name = @fetched['bucketName']\n    @cdn_policy = GoogleInSpec::Compute::Property::BackendBucketCdnPolicy.new(@fetched['cdnPolicy'], to_s)\n    @custom_response_headers = @fetched['customResponseHeaders']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @enable_cdn = @fetched['enableCdn']\n    @id = @fetched['id']\n    @name = @fetched['name']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BackendBucket #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendBuckets/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_backend_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeBackendBuckets < GcpResourceBase\n  name 'google_compute_backend_buckets'\n  desc 'BackendBucket plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:bucket_names, field: :bucket_name)\n  filter_table_config.add(:cdn_policies, field: :cdn_policy)\n  filter_table_config.add(:custom_response_headers, field: :custom_response_headers)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:enable_cdns, field: :enable_cdn)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'bucketName' => ->(obj) { [:bucket_name, obj['bucketName']] },\n      'cdnPolicy' => ->(obj) { [:cdn_policy, GoogleInSpec::Compute::Property::BackendBucketCdnPolicy.new(obj['cdnPolicy'], to_s)] },\n      'customResponseHeaders' => ->(obj) { [:custom_response_headers, obj['customResponseHeaders']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'enableCdn' => ->(obj) { [:enable_cdn, obj['enableCdn']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendBuckets'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_backend_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/backendservice_backends'\nrequire 'google/compute/property/backendservice_cdn_policy'\nrequire 'google/compute/property/backendservice_cdn_policy_cache_key_policy'\nrequire 'google/compute/property/backendservice_cdn_policy_negative_caching_policy'\nrequire 'google/compute/property/backendservice_circuit_breakers'\nrequire 'google/compute/property/backendservice_circuit_breakers_connect_timeout'\nrequire 'google/compute/property/backendservice_connection_draining'\nrequire 'google/compute/property/backendservice_consistent_hash'\nrequire 'google/compute/property/backendservice_consistent_hash_http_cookie'\nrequire 'google/compute/property/backendservice_consistent_hash_http_cookie_ttl'\nrequire 'google/compute/property/backendservice_iap'\nrequire 'google/compute/property/backendservice_log_config'\nrequire 'google/compute/property/backendservice_outlier_detection'\nrequire 'google/compute/property/backendservice_outlier_detection_base_ejection_time'\nrequire 'google/compute/property/backendservice_outlier_detection_interval'\n\n# A provider to manage Compute Engine resources.\nclass ComputeBackendService < GcpResourceBase\n  name 'google_compute_backend_service'\n  desc 'BackendService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :affinity_cookie_ttl_sec\n  attr_reader :backends\n  attr_reader :circuit_breakers\n  attr_reader :consistent_hash\n  attr_reader :cdn_policy\n  attr_reader :connection_draining\n  attr_reader :creation_timestamp\n  attr_reader :custom_request_headers\n  attr_reader :custom_response_headers\n  attr_reader :fingerprint\n  attr_reader :description\n  attr_reader :enable_cdn\n  attr_reader :health_checks\n  attr_reader :id\n  attr_reader :iap\n  attr_reader :load_balancing_scheme\n  attr_reader :locality_lb_policy\n  attr_reader :name\n  attr_reader :outlier_detection\n  attr_reader :port_name\n  attr_reader :protocol\n  attr_reader :security_policy\n  attr_reader :session_affinity\n  attr_reader :timeout_sec\n  attr_reader :log_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @affinity_cookie_ttl_sec = @fetched['affinityCookieTtlSec']\n    @backends = GoogleInSpec::Compute::Property::BackendServiceBackendsArray.parse(@fetched['backends'], to_s)\n    @circuit_breakers = GoogleInSpec::Compute::Property::BackendServiceCircuitBreakers.new(@fetched['circuitBreakers'], to_s)\n    @consistent_hash = GoogleInSpec::Compute::Property::BackendServiceConsistentHash.new(@fetched['consistentHash'], to_s)\n    @cdn_policy = GoogleInSpec::Compute::Property::BackendServiceCdnPolicy.new(@fetched['cdnPolicy'], to_s)\n    @connection_draining = GoogleInSpec::Compute::Property::BackendServiceConnectionDraining.new(@fetched['connectionDraining'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @custom_request_headers = @fetched['customRequestHeaders']\n    @custom_response_headers = @fetched['customResponseHeaders']\n    @fingerprint = @fetched['fingerprint']\n    @description = @fetched['description']\n    @enable_cdn = @fetched['enableCDN']\n    @health_checks = @fetched['healthChecks']\n    @id = @fetched['id']\n    @iap = GoogleInSpec::Compute::Property::BackendServiceIap.new(@fetched['iap'], to_s)\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @locality_lb_policy = @fetched['localityLbPolicy']\n    @name = @fetched['name']\n    @outlier_detection = GoogleInSpec::Compute::Property::BackendServiceOutlierDetection.new(@fetched['outlierDetection'], to_s)\n    @port_name = @fetched['portName']\n    @protocol = @fetched['protocol']\n    @security_policy = @fetched['securityPolicy']\n    @session_affinity = @fetched['sessionAffinity']\n    @timeout_sec = @fetched['timeoutSec']\n    @log_config = GoogleInSpec::Compute::Property::BackendServiceLogConfig.new(@fetched['logConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BackendService #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeBackendServices < GcpResourceBase\n  name 'google_compute_backend_services'\n  desc 'BackendService plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:affinity_cookie_ttl_secs, field: :affinity_cookie_ttl_sec)\n  filter_table_config.add(:backends, field: :backends)\n  filter_table_config.add(:circuit_breakers, field: :circuit_breakers)\n  filter_table_config.add(:consistent_hashes, field: :consistent_hash)\n  filter_table_config.add(:cdn_policies, field: :cdn_policy)\n  filter_table_config.add(:connection_drainings, field: :connection_draining)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:custom_request_headers, field: :custom_request_headers)\n  filter_table_config.add(:custom_response_headers, field: :custom_response_headers)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:enable_cdns, field: :enable_cdn)\n  filter_table_config.add(:health_checks, field: :health_checks)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:iaps, field: :iap)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n  filter_table_config.add(:locality_lb_policies, field: :locality_lb_policy)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:outlier_detections, field: :outlier_detection)\n  filter_table_config.add(:port_names, field: :port_name)\n  filter_table_config.add(:protocols, field: :protocol)\n  filter_table_config.add(:security_policies, field: :security_policy)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:log_configs, field: :log_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'affinityCookieTtlSec' => ->(obj) { [:affinity_cookie_ttl_sec, obj['affinityCookieTtlSec']] },\n      'backends' => ->(obj) { [:backends, GoogleInSpec::Compute::Property::BackendServiceBackendsArray.parse(obj['backends'], to_s)] },\n      'circuitBreakers' => ->(obj) { [:circuit_breakers, GoogleInSpec::Compute::Property::BackendServiceCircuitBreakers.new(obj['circuitBreakers'], to_s)] },\n      'consistentHash' => ->(obj) { [:consistent_hash, GoogleInSpec::Compute::Property::BackendServiceConsistentHash.new(obj['consistentHash'], to_s)] },\n      'cdnPolicy' => ->(obj) { [:cdn_policy, GoogleInSpec::Compute::Property::BackendServiceCdnPolicy.new(obj['cdnPolicy'], to_s)] },\n      'connectionDraining' => ->(obj) { [:connection_draining, GoogleInSpec::Compute::Property::BackendServiceConnectionDraining.new(obj['connectionDraining'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'customRequestHeaders' => ->(obj) { [:custom_request_headers, obj['customRequestHeaders']] },\n      'customResponseHeaders' => ->(obj) { [:custom_response_headers, obj['customResponseHeaders']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'enableCDN' => ->(obj) { [:enable_cdn, obj['enableCDN']] },\n      'healthChecks' => ->(obj) { [:health_checks, obj['healthChecks']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'iap' => ->(obj) { [:iap, GoogleInSpec::Compute::Property::BackendServiceIap.new(obj['iap'], to_s)] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n      'localityLbPolicy' => ->(obj) { [:locality_lb_policy, obj['localityLbPolicy']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'outlierDetection' => ->(obj) { [:outlier_detection, GoogleInSpec::Compute::Property::BackendServiceOutlierDetection.new(obj['outlierDetection'], to_s)] },\n      'portName' => ->(obj) { [:port_name, obj['portName']] },\n      'protocol' => ->(obj) { [:protocol, obj['protocol']] },\n      'securityPolicy' => ->(obj) { [:security_policy, obj['securityPolicy']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::BackendServiceLogConfig.new(obj['logConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/backendServices'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_disk.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/disk_disk_encryption_key'\nrequire 'google/compute/property/disk_source_image_encryption_key'\nrequire 'google/compute/property/disk_source_snapshot_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass ComputeDisk < GcpResourceBase\n  name 'google_compute_disk'\n  desc 'Disk'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :label_fingerprint\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :last_attach_timestamp\n  attr_reader :last_detach_timestamp\n  attr_reader :labels\n  attr_reader :licenses\n  attr_reader :name\n  attr_reader :size_gb\n  attr_reader :users\n  attr_reader :physical_block_size_bytes\n  attr_reader :interface\n  attr_reader :type\n  attr_reader :source_image\n  attr_reader :resource_policies\n  attr_reader :multi_writer\n  attr_reader :zone\n  attr_reader :source_image_encryption_key\n  attr_reader :source_image_id\n  attr_reader :disk_encryption_key\n  attr_reader :source_snapshot\n  attr_reader :source_snapshot_encryption_key\n  attr_reader :source_snapshot_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @label_fingerprint = @fetched['labelFingerprint']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @last_attach_timestamp = parse_time_string(@fetched['lastAttachTimestamp'])\n    @last_detach_timestamp = parse_time_string(@fetched['lastDetachTimestamp'])\n    @labels = @fetched['labels']\n    @licenses = @fetched['licenses']\n    @name = @fetched['name']\n    @size_gb = @fetched['sizeGb']\n    @users = @fetched['users']\n    @physical_block_size_bytes = @fetched['physicalBlockSizeBytes']\n    @interface = @fetched['interface']\n    @type = @fetched['type']\n    @source_image = @fetched['sourceImage']\n    @resource_policies = @fetched['resourcePolicies']\n    @multi_writer = @fetched['multiWriter']\n    @zone = @fetched['zone']\n    @source_image_encryption_key = GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(@fetched['sourceImageEncryptionKey'], to_s)\n    @source_image_id = @fetched['sourceImageId']\n    @disk_encryption_key = GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(@fetched['diskEncryptionKey'], to_s)\n    @source_snapshot = @fetched['sourceSnapshot']\n    @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(@fetched['sourceSnapshotEncryptionKey'], to_s)\n    @source_snapshot_id = @fetched['sourceSnapshotId']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Disk #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/disks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_disk_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/disktype_deprecated'\n\n# A provider to manage Compute Engine resources.\nclass ComputeDiskType < GcpResourceBase\n  name 'google_compute_disk_type'\n  desc 'DiskType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :default_disk_size_gb\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :valid_disk_size\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @default_disk_size_gb = @fetched['defaultDiskSizeGb']\n    @deprecated = GoogleInSpec::Compute::Property::DiskTypeDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @valid_disk_size = @fetched['validDiskSize']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"DiskType #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/diskTypes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_disk_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeDiskTypes < GcpResourceBase\n  name 'google_compute_disk_types'\n  desc 'DiskType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:default_disk_size_gbs, field: :default_disk_size_gb)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:valid_disk_sizes, field: :valid_disk_size)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'defaultDiskSizeGb' => ->(obj) { [:default_disk_size_gb, obj['defaultDiskSizeGb']] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::DiskTypeDeprecated.new(obj['deprecated'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'validDiskSize' => ->(obj) { [:valid_disk_size, obj['validDiskSize']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/diskTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_disks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeDisks < GcpResourceBase\n  name 'google_compute_disks'\n  desc 'Disk plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:last_attach_timestamps, field: :last_attach_timestamp)\n  filter_table_config.add(:last_detach_timestamps, field: :last_detach_timestamp)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:licenses, field: :licenses)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:size_gbs, field: :size_gb)\n  filter_table_config.add(:users, field: :users)\n  filter_table_config.add(:physical_block_size_bytes, field: :physical_block_size_bytes)\n  filter_table_config.add(:interfaces, field: :interface)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:source_images, field: :source_image)\n  filter_table_config.add(:resource_policies, field: :resource_policies)\n  filter_table_config.add(:multi_writers, field: :multi_writer)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:source_image_encryption_keys, field: :source_image_encryption_key)\n  filter_table_config.add(:source_image_ids, field: :source_image_id)\n  filter_table_config.add(:disk_encryption_keys, field: :disk_encryption_key)\n  filter_table_config.add(:source_snapshots, field: :source_snapshot)\n  filter_table_config.add(:source_snapshot_encryption_keys, field: :source_snapshot_encryption_key)\n  filter_table_config.add(:source_snapshot_ids, field: :source_snapshot_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'lastAttachTimestamp' => ->(obj) { [:last_attach_timestamp, parse_time_string(obj['lastAttachTimestamp'])] },\n      'lastDetachTimestamp' => ->(obj) { [:last_detach_timestamp, parse_time_string(obj['lastDetachTimestamp'])] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'licenses' => ->(obj) { [:licenses, obj['licenses']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'sizeGb' => ->(obj) { [:size_gb, obj['sizeGb']] },\n      'users' => ->(obj) { [:users, obj['users']] },\n      'physicalBlockSizeBytes' => ->(obj) { [:physical_block_size_bytes, obj['physicalBlockSizeBytes']] },\n      'interface' => ->(obj) { [:interface, obj['interface']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'sourceImage' => ->(obj) { [:source_image, obj['sourceImage']] },\n      'resourcePolicies' => ->(obj) { [:resource_policies, obj['resourcePolicies']] },\n      'multiWriter' => ->(obj) { [:multi_writer, obj['multiWriter']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'sourceImageEncryptionKey' => ->(obj) { [:source_image_encryption_key, GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(obj['sourceImageEncryptionKey'], to_s)] },\n      'sourceImageId' => ->(obj) { [:source_image_id, obj['sourceImageId']] },\n      'diskEncryptionKey' => ->(obj) { [:disk_encryption_key, GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(obj['diskEncryptionKey'], to_s)] },\n      'sourceSnapshot' => ->(obj) { [:source_snapshot, obj['sourceSnapshot']] },\n      'sourceSnapshotEncryptionKey' => ->(obj) { [:source_snapshot_encryption_key, GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(obj['sourceSnapshotEncryptionKey'], to_s)] },\n      'sourceSnapshotId' => ->(obj) { [:source_snapshot_id, obj['sourceSnapshotId']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/disks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_external_vpn_gateway.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/externalvpngateway_interfaces'\n\n# A provider to manage Compute Engine resources.\nclass ComputeexternalVpnGateway < GcpResourceBase\n  name 'google_compute_external_vpn_gateway'\n  desc 'externalVpnGateway'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :redundancy_type\n  attr_reader :interfaces\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :next_page_token\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @redundancy_type = @fetched['redundancyType']\n    @interfaces = GoogleInSpec::Compute::Property::ExternalVpnGatewayInterfacesArray.parse(@fetched['interfaces'], to_s)\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @next_page_token = @fetched['nextPageToken']\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"externalVpnGateway #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/externalVpnGateways/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_external_vpn_gateways.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeexternalVpnGateways < GcpResourceBase\n  name 'google_compute_external_vpn_gateways'\n  desc 'externalVpnGateway plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:redundancy_types, field: :redundancy_type)\n  filter_table_config.add(:interfaces, field: :interfaces)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:next_page_tokens, field: :next_page_token)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'redundancyType' => ->(obj) { [:redundancy_type, obj['redundancyType']] },\n      'interfaces' => ->(obj) { [:interfaces, GoogleInSpec::Compute::Property::ExternalVpnGatewayInterfacesArray.parse(obj['interfaces'], to_s)] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'nextPageToken' => ->(obj) { [:next_page_token, obj['nextPageToken']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/externalVpnGateways'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_firewall.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/firewall_allowed'\nrequire 'google/compute/property/firewall_denied'\nrequire 'google/compute/property/firewall_log_config'\n\n# A provider to manage Compute Engine resources.\nclass ComputeFirewall < GcpResourceBase\n  name 'google_compute_firewall'\n  desc 'Firewall'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :allowed\n  attr_reader :creation_timestamp\n  attr_reader :denied\n  attr_reader :description\n  attr_reader :destination_ranges\n  attr_reader :direction\n  attr_reader :disabled\n  attr_reader :log_config\n  attr_reader :id\n  attr_reader :name\n  attr_reader :network\n  attr_reader :priority\n  attr_reader :source_ranges\n  attr_reader :source_service_accounts\n  attr_reader :source_tags\n  attr_reader :target_service_accounts\n  attr_reader :target_tags\n  attr_reader :action\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @allowed = GoogleInSpec::Compute::Property::FirewallAllowedArray.parse(@fetched['allowed'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @denied = GoogleInSpec::Compute::Property::FirewallDeniedArray.parse(@fetched['denied'], to_s)\n    @description = @fetched['description']\n    @destination_ranges = @fetched['destinationRanges']\n    @direction = @fetched['direction']\n    @disabled = @fetched['disabled']\n    @log_config = GoogleInSpec::Compute::Property::FirewallLogConfig.new(@fetched['logConfig'], to_s)\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @priority = @fetched['priority']\n    @source_ranges = @fetched['sourceRanges']\n    @source_service_accounts = @fetched['sourceServiceAccounts']\n    @source_tags = @fetched['sourceTags']\n    @target_service_accounts = @fetched['targetServiceAccounts']\n    @target_tags = @fetched['targetTags']\n    @action = @allowed.nil? ? 'deny' : 'allow'\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Firewall #{@params[:name]}\"\n  end\n\n  # Check whether the firewall rule allows HTTP access (tcp ingress on port 80)\n  def allowed_http?\n    port_protocol_allowed('80')\n  end\n\n  def denied_http?\n    port_protocol_denied('80')\n  end\n\n  # Check whether the firewall rule allows SSH access (tcp ingress on port 22)\n  def allowed_ssh?\n    port_protocol_allowed('22')\n  end\n\n  def denied_ssh?\n    port_protocol_denied('22')\n  end\n\n  def allowed_https?\n    port_protocol_allowed('443')\n  end\n\n  def denied_https?\n    port_protocol_denied('443')\n  end\n\n  def allowed_rdp?\n    port_protocol_allowed('3389')\n  end\n\n  def denied_rdp?\n    port_protocol_denied('3389')\n  end\n\n  def allowed_dns?\n    port_protocol_allowed('53') || port_protocol_allowed('53', 'udp')\n  end\n\n  def allowed_cifs?\n    port_protocol_allowed('445', 'udp')\n  end\n\n  def allowed_ftp?\n    port_protocol_allowed('20') || port_protocol_allowed('21')\n  end\n\n  def allowed_hdfs_name_node_service?\n    port_protocol_allowed('8020')\n  end\n\n  def allowed_name_node_webui_service?\n    port_protocol_allowed('50070') || port_protocol_allowed('50470')\n  end\n\n  def allowed_kibana?\n    port_protocol_allowed('5601')\n  end\n\n  def allowed_mysql?\n    port_protocol_allowed('4333') || port_protocol_allowed('3306')\n  end\n\n  def allowed_net_bios?\n    port_protocol_allowed('137', 'udp') || port_protocol_allowed('138', 'udp')\n  end\n\n  def allowed_oracle?\n    port_protocol_allowed('1521')\n  end\n\n  def allowed_postgre_sql?\n    port_protocol_allowed('5432')\n  end\n\n  def allowed_rpc?\n    port_protocol_allowed('135')\n  end\n\n  def allowed_sql_server?\n    port_protocol_allowed('1434') || port_protocol_allowed('1433')\n  end\n\n  def allowed_smtp?\n    port_protocol_allowed('25')\n  end\n\n  def allowed_windows_smb?\n    port_protocol_allowed('445')\n  end\n\n  def allowed_vnc_server?\n    port_protocol_allowed('5900')\n  end\n\n  def allowed_vnc_client?\n    port_protocol_allowed('5500')\n  end\n\n  def allowed_telnet?\n    port_protocol_allowed('23')\n  end\n\n  def allowed_oracle_auto_data_warehouse?\n    port_protocol_allowed('1522')\n  end\n\n  def allowed_salt_master?\n    port_protocol_allowed('4505') || port_protocol_allowed('4506')\n  end\n\n  def allowed_docker?\n    port_protocol_allowed('2375') || port_protocol_allowed('2376')\n  end\n\n  def allow_port_protocol?(port, protocol)\n    port_protocol_allowed(port, protocol)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_port_protocol, :be_allow_port_protocol\n\n  def deny_port_protocol?(port, protocol)\n    port_protocol_denied(port, protocol)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_port_protocol, :be_deny_port_protocol\n\n  # initial implementation allows to search for target source and destination tags - can\n  # filter plural firewalls based on direction to pin down the desired rules and choose the appropriate method\n  # see similar below example for ip_range_list\n  def allow_source_tags?(tag_list)\n    return false if !defined?(source_tags) || source_tags.nil?\n    match_list_helper(source_tags, tag_list)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_source_tags, :be_allow_source_tags\n\n  def deny_source_tags?(tag_list)\n    return false if !defined?(source_tags) || source_tags.nil?\n    match_list_helper(source_tags, tag_list)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_source_tags, :be_deny_source_tags\n\n  def allow_target_tags?(tag_list)\n    return false if !defined?(target_tags) || target_tags.nil?\n    match_list_helper(target_tags, tag_list)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_target_tags, :be_allow_target_tags\n\n  def deny_target_tags?(tag_list)\n    return false if !defined?(target_tags) || target_tags.nil?\n    match_list_helper(target_tags, tag_list)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_target_tags, :be_deny_target_tags\n\n  def allow_source_tags_only?(tag_list)\n    return false if !defined?(source_tags) || source_tags.nil?\n    match_list_helper(source_tags, tag_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_source_tags_only, :be_allow_source_tags_only\n\n  def deny_source_tags_only?(tag_list)\n    return false if !defined?(source_tags) || source_tags.nil?\n    match_list_helper(source_tags, tag_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_source_tags_only, :be_deny_source_tags_only\n\n  def allow_target_tags_only?(tag_list)\n    return false if !defined?(target_tags) || target_tags.nil?\n    match_list_helper(target_tags, tag_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_target_tags_only, :be_allow_target_tags_only\n\n  def deny_target_tags_only?(tag_list)\n    return false if !defined?(target_tags) || target_tags.nil?\n    match_list_helper(target_tags, tag_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_target_tags_only, :be_deny_target_tags_only\n\n  def match_list_helper(source_list, target_list, only = false)\n    # helps streamline matching exact equality versus inclusion of target and source lists\n    return source_list.sort == target_list.sort if only # i.e. exact equality\n    # check the source list includes at least all specified target list elements\n    target_list.each do |must_be_present|\n      return false if !source_list.include? must_be_present\n    end\n    true\n  end\n\n  # initial implementation is direction agnostic and treats IP ranges separately\n  # Can revisit in the future to include AWS style matchers such as allow_in/out with multiple criteria\n  # including protocols/ports for example\n  def allow_ip_ranges_only?(ip_range_list)\n    allow_ip_range_list(ip_range_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_ip_ranges_only, :be_allow_ip_ranges_only\n\n  def deny_ip_ranges_only?(ip_range_list)\n    deny_ip_range_list(ip_range_list, true)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_ip_ranges_only, :be_deny_ip_ranges_only\n\n  def allow_ip_ranges?(ip_range_list)\n    allow_ip_range_list(ip_range_list)\n  end\n\n  RSpec::Matchers.alias_matcher :allow_ip_ranges, :be_allow_ip_ranges\n\n  def deny_ip_ranges?(ip_range_list)\n    deny_ip_range_list(ip_range_list)\n  end\n\n  RSpec::Matchers.alias_matcher :deny_ip_ranges, :be_deny_ip_ranges\n\n  def allow_ip_range_list(ip_range_list, only = false)\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall is missing expected property 'direction'\" if !defined?(direction) || direction.nil?\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall is missing expected property 'allowed'\" if !defined?(allowed) || allowed.nil?\n    # the intention here is for firewall rules plural to be filtered based on direction, then tested for particular IP ranges\n    # e.g.        describe google_compute_firewalls(project: 'chef-inspec-gcp').where(firewall_direction: 'INGRESS').firewall_names.each do |firewall_name| do\n    #               describe google_compute_firewall(project: 'chef-inspec-gcp',  name: firewall_name) do\n    #                 it { should_not allow_ip_ranges [\"0.0.0.0/0\"] }\n    #               end\n    #             end\n    # direction affects what the property is e.g. INGRESS->source_ranges, EGRESS->destination_ranges\n    ranges = nil\n    if direction == 'INGRESS'\n      return false if !defined?(source_ranges) || source_ranges.nil?\n      ranges = source_ranges\n    else\n      return false if !defined?(destination_ranges) || destination_ranges.nil?\n      ranges = destination_ranges\n    end\n    return false if !defined?(ranges) || ranges.nil?\n    # so now we have a list of IP addresses to compare\n    match_list_helper(ranges, ip_range_list, only)\n  end\n\n  def deny_ip_range_list(ip_range_list, only = false)\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall is missing expected property 'direction'\" if !defined?(direction) || direction.nil?\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall is missing expected property 'denied'\" if !defined?(denied) || denied.nil?\n    ranges = nil\n    if direction == 'INGRESS'\n      return false if !defined?(source_ranges) || source_ranges.nil?\n      ranges = source_ranges\n    else\n      return false if !defined?(destination_ranges) || destination_ranges.nil?\n      ranges = destination_ranges\n    end\n    return false if !defined?(ranges) || ranges.nil?\n    # so now we have a list of IP addresses to compare\n    match_list_helper(ranges, ip_range_list, only)\n  end\n\n  def match_rule_protocol(property, single_port, protocol, allowed_flag)\n    # this covers both property 'allowed' and 'denied' as they have the same structure\n    # however in the case of 'denied' the logic of allowed is inverted\n    # first consider the special case of 'all' where no ports/protocols are listed explicitly\n    # and applies to all protocols\n    if property.count == 1 and property[0].ip_protocol == 'all'\n      return true if allowed_flag # an allowed rule that will match all ports/protocols\n      return false # i.e. this is a deny all rule and will block all ports/protocols\n    end\n\n    # \"allowed\"/\"denied\" can have several port/protocol pairing entries e.g. tcp:80 or udp:4000-5000\n    # first, let's find the matching protocol indexes to compare against\n    protocol_match_indexes = []\n    property.each_with_index do |rule, index|\n      next if !defined?(rule.ip_protocol)\n      protocol_match_indexes << index if rule.ip_protocol == protocol\n    end\n    # Now we know the list of matching protocol entries to check against.\n    # Note the syntax for protocol port definitions versus what we see here is:\n    # \"tcp:80\" -> \"tcp\" [\"80\"]\n    # \"tcp:90,91\" -> \"tcp:90\", \"tcp:91\" -> \"tcp\" [\"90\",\"91\"]\n    # \"udp:3000-4000\" -> \"udp\" [\"3000-4000\"] # can also potentially include single port combinations in the list for a single rule here\n    # We now check for a match based on each of the above cases\n    protocol_match_indexes.each do |protocol_index|\n      # there can be multiple protocol rules for different ports etc. [\"22\"] or [\"123-126\"]\n      ports_in_rule = property[protocol_index].ports\n      next if ports_in_rule.nil?\n      ports_in_rule.each do |rule_port|\n        matched_result = single_port_matches(rule_port, single_port)\n        return true if matched_result and allowed_flag\n        return false if matched_result and !allowed_flag\n      end\n    end\n    return true if !allowed_flag # i.e. here we matched no port/protocol rules for a deny rule and therefore result in allowing\n    false\n  end\n\n  # NOTE: that port_list only accepts individual ports to match, not ranges\n  def port_protocol_allowed(single_port, protocol = 'tcp')\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall is missing expected property 'allowed' or 'denied'\" if !defined?(allowed) || !defined?(denied)\n    raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall 'allowed' and 'denied' cannot both be nil\" if allowed.nil? && denied.nil?\n    allowed_flag = denied.nil?\n    return match_rule_protocol(allowed, single_port, protocol, allowed_flag) if allowed_flag\n    match_rule_protocol(denied, single_port, protocol, allowed_flag)\n  end\n\n  def port_protocol_denied(single_port, protocol = 'tcp')\n    port_protocol_allowed(single_port, protocol)\n  end\n\n  def single_port_matches(rule_port, single_port)\n    # if '-' in there it means we should check each provided port for existence in a range\n    if !rule_port.include? '-'\n      # simplest case, only one port string specified\n      return true if rule_port == single_port\n      # if not, no match\n    else\n      # the rule_port here is a range such as \"4000-5000\", protect against any non-integer input by checking for nil values\n      upper_limit = rule_port.split('-')[1].to_i\n      lower_limit = rule_port.split('-')[0].to_i\n      raise Inspec::Exceptions::ResourceFailed, \"google_compute_firewall unexpected port range specified: '#{rule_port}'\" if upper_limit.nil? || lower_limit.nil?\n      return true if single_port.to_i.between?(lower_limit, upper_limit)\n      # if not, no match\n    end\n    false\n  end\n\n  def log_config_enabled?\n    return false if !defined?(log_config) || !defined?(log_config.enable_logging)\n    log_config.enable_logging\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewalls/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_firewalls.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeFirewalls < GcpResourceBase\n  name 'google_compute_firewalls'\n  desc 'Firewall plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:alloweds, field: :allowed)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:denieds, field: :denied)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:destination_ranges, field: :destination_ranges)\n  filter_table_config.add(:firewall_directions, field: :firewall_direction)\n  filter_table_config.add(:disableds, field: :disabled)\n  filter_table_config.add(:log_configs, field: :log_config)\n  filter_table_config.add(:firewall_ids, field: :firewall_id)\n  filter_table_config.add(:firewall_names, field: :firewall_name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:source_ranges, field: :source_ranges)\n  filter_table_config.add(:source_service_accounts, field: :source_service_accounts)\n  filter_table_config.add(:source_tags, field: :source_tags)\n  filter_table_config.add(:target_service_accounts, field: :target_service_accounts)\n  filter_table_config.add(:target_tags, field: :target_tags)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'allowed' => ->(obj) { [:allowed, GoogleInSpec::Compute::Property::FirewallAllowedArray.parse(obj['allowed'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'denied' => ->(obj) { [:denied, GoogleInSpec::Compute::Property::FirewallDeniedArray.parse(obj['denied'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'destinationRanges' => ->(obj) { [:destination_ranges, obj['destinationRanges']] },\n      'direction' => ->(obj) { [:firewall_direction, obj['direction']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::FirewallLogConfig.new(obj['logConfig'], to_s)] },\n      'id' => ->(obj) { [:firewall_id, obj['id']] },\n      'name' => ->(obj) { [:firewall_name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'sourceRanges' => ->(obj) { [:source_ranges, obj['sourceRanges']] },\n      'sourceServiceAccounts' => ->(obj) { [:source_service_accounts, obj['sourceServiceAccounts']] },\n      'sourceTags' => ->(obj) { [:source_tags, obj['sourceTags']] },\n      'targetServiceAccounts' => ->(obj) { [:target_service_accounts, obj['targetServiceAccounts']] },\n      'targetTags' => ->(obj) { [:target_tags, obj['targetTags']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewalls'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_forwarding_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeForwardingRule < GcpResourceBase\n  name 'google_compute_forwarding_rule'\n  desc 'ForwardingRule'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :is_mirroring_collector\n  attr_reader :description\n  attr_reader :id\n  attr_reader :ip_address\n  attr_reader :ip_protocol\n  attr_reader :backend_service\n  attr_reader :load_balancing_scheme\n  attr_reader :name\n  attr_reader :network\n  attr_reader :port_range\n  attr_reader :ports\n  attr_reader :subnetwork\n  attr_reader :target\n  attr_reader :allow_global_access\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :all_ports\n  attr_reader :network_tier\n  attr_reader :service_label\n  attr_reader :service_name\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @is_mirroring_collector = @fetched['isMirroringCollector']\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @ip_address = @fetched['IPAddress']\n    @ip_protocol = @fetched['IPProtocol']\n    @backend_service = @fetched['backendService']\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @name = @fetched['name']\n    @network = name_from_self_link(@fetched['network'])\n    @port_range = @fetched['portRange']\n    @ports = @fetched['ports']\n    @subnetwork = @fetched['subnetwork']\n    @target = @fetched['target']\n    @allow_global_access = @fetched['allowGlobalAccess']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @all_ports = @fetched['allPorts']\n    @network_tier = @fetched['networkTier']\n    @service_label = @fetched['serviceLabel']\n    @service_name = @fetched['serviceName']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ForwardingRule #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/forwardingRules/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_forwarding_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeForwardingRules < GcpResourceBase\n  name 'google_compute_forwarding_rules'\n  desc 'ForwardingRule plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:is_mirroring_collectors, field: :is_mirroring_collector)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:forwarding_rule_ids, field: :forwarding_rule_id)\n  filter_table_config.add(:ip_addresses, field: :ip_address)\n  filter_table_config.add(:ip_protocols, field: :ip_protocol)\n  filter_table_config.add(:backend_services, field: :backend_service)\n  filter_table_config.add(:forwarding_rule_load_balancing_schemes, field: :forwarding_rule_load_balancing_scheme)\n  filter_table_config.add(:forwarding_rule_names, field: :forwarding_rule_name)\n  filter_table_config.add(:forwarding_rule_networks, field: :forwarding_rule_network)\n  filter_table_config.add(:port_ranges, field: :port_range)\n  filter_table_config.add(:ports, field: :ports)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:allow_global_accesses, field: :allow_global_access)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:all_ports, field: :all_ports)\n  filter_table_config.add(:network_tiers, field: :network_tier)\n  filter_table_config.add(:service_labels, field: :service_label)\n  filter_table_config.add(:service_names, field: :service_name)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'isMirroringCollector' => ->(obj) { [:is_mirroring_collector, obj['isMirroringCollector']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:forwarding_rule_id, obj['id']] },\n      'IPAddress' => ->(obj) { [:ip_address, obj['IPAddress']] },\n      'IPProtocol' => ->(obj) { [:ip_protocol, obj['IPProtocol']] },\n      'backendService' => ->(obj) { [:backend_service, obj['backendService']] },\n      'loadBalancingScheme' => ->(obj) { [:forwarding_rule_load_balancing_scheme, obj['loadBalancingScheme']] },\n      'name' => ->(obj) { [:forwarding_rule_name, obj['name']] },\n      'network' => ->(obj) { [:forwarding_rule_network, name_from_self_link(obj['network'])] },\n      'portRange' => ->(obj) { [:port_range, obj['portRange']] },\n      'ports' => ->(obj) { [:ports, obj['ports']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'target' => ->(obj) { [:target, obj['target']] },\n      'allowGlobalAccess' => ->(obj) { [:allow_global_access, obj['allowGlobalAccess']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'allPorts' => ->(obj) { [:all_ports, obj['allPorts']] },\n      'networkTier' => ->(obj) { [:network_tier, obj['networkTier']] },\n      'serviceLabel' => ->(obj) { [:service_label, obj['serviceLabel']] },\n      'serviceName' => ->(obj) { [:service_name, obj['serviceName']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/forwardingRules'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_address.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalAddress < GcpResourceBase\n  name 'google_compute_global_address'\n  desc 'GlobalAddress'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :address\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :ip_version\n  attr_reader :region\n  attr_reader :prefix_length\n  attr_reader :address_type\n  attr_reader :purpose\n  attr_reader :network\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @address = @fetched['address']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @ip_version = @fetched['ipVersion']\n    @region = @fetched['region']\n    @prefix_length = @fetched['prefixLength']\n    @address_type = @fetched['addressType']\n    @purpose = @fetched['purpose']\n    @network = @fetched['network']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalAddress #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/addresses/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_addresses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalAddresss < GcpResourceBase\n  name 'google_compute_global_addresses'\n  desc 'GlobalAddress plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:addresses, field: :address)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:ip_versions, field: :ip_version)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:prefix_lengths, field: :prefix_length)\n  filter_table_config.add(:address_types, field: :address_type)\n  filter_table_config.add(:purposes, field: :purpose)\n  filter_table_config.add(:networks, field: :network)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'address' => ->(obj) { [:address, obj['address']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'ipVersion' => ->(obj) { [:ip_version, obj['ipVersion']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'prefixLength' => ->(obj) { [:prefix_length, obj['prefixLength']] },\n      'addressType' => ->(obj) { [:address_type, obj['addressType']] },\n      'purpose' => ->(obj) { [:purpose, obj['purpose']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/addresses'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_forwarding_rule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/globalforwardingrule_metadata_filters'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalForwardingRule < GcpResourceBase\n  name 'google_compute_global_forwarding_rule'\n  desc 'GlobalForwardingRule'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :ip_address\n  attr_reader :ip_protocol\n  attr_reader :ip_version\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :load_balancing_scheme\n  attr_reader :metadata_filters\n  attr_reader :name\n  attr_reader :network\n  attr_reader :port_range\n  attr_reader :target\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @ip_address = @fetched['IPAddress']\n    @ip_protocol = @fetched['IPProtocol']\n    @ip_version = @fetched['ipVersion']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @metadata_filters = GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersArray.parse(@fetched['metadataFilters'], to_s)\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @port_range = @fetched['portRange']\n    @target = @fetched['target']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalForwardingRule #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/forwardingRules/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_forwarding_rules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalForwardingRules < GcpResourceBase\n  name 'google_compute_global_forwarding_rules'\n  desc 'GlobalForwardingRule plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:ip_addresses, field: :ip_address)\n  filter_table_config.add(:ip_protocols, field: :ip_protocol)\n  filter_table_config.add(:ip_versions, field: :ip_version)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n  filter_table_config.add(:metadata_filters, field: :metadata_filters)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:port_ranges, field: :port_range)\n  filter_table_config.add(:targets, field: :target)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'IPAddress' => ->(obj) { [:ip_address, obj['IPAddress']] },\n      'IPProtocol' => ->(obj) { [:ip_protocol, obj['IPProtocol']] },\n      'ipVersion' => ->(obj) { [:ip_version, obj['ipVersion']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n      'metadataFilters' => ->(obj) { [:metadata_filters, GoogleInSpec::Compute::Property::GlobalForwardingRuleMetadataFiltersArray.parse(obj['metadataFilters'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'portRange' => ->(obj) { [:port_range, obj['portRange']] },\n      'target' => ->(obj) { [:target, obj['target']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/forwardingRules'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_network_endpoint_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/globalnetworkendpointgroup_annotations'\nrequire 'google/compute/property/globalnetworkendpointgroup_app_engine'\nrequire 'google/compute/property/globalnetworkendpointgroup_cloud_function'\nrequire 'google/compute/property/globalnetworkendpointgroup_cloud_run'\nrequire 'google/compute/property/globalnetworkendpointgroup_psc_data'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalNetworkEndpointGroup < GcpResourceBase\n  name 'google_compute_global_network_endpoint_group'\n  desc 'GlobalNetworkEndpointGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network_endpoint_type\n  attr_reader :size\n  attr_reader :region\n  attr_reader :zone\n  attr_reader :network\n  attr_reader :subnetwork\n  attr_reader :default_port\n  attr_reader :annotations\n  attr_reader :cloud_run\n  attr_reader :app_engine\n  attr_reader :cloud_function\n  attr_reader :psc_target_service\n  attr_reader :psc_data\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network_endpoint_type = @fetched['networkEndpointType']\n    @size = @fetched['size']\n    @region = @fetched['region']\n    @zone = @fetched['zone']\n    @network = @fetched['network']\n    @subnetwork = @fetched['subnetwork']\n    @default_port = @fetched['defaultPort']\n    @annotations = GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupAnnotations.new(@fetched['annotations'], to_s)\n    @cloud_run = GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupCloudRun.new(@fetched['cloudRun'], to_s)\n    @app_engine = GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupAppEngine.new(@fetched['appEngine'], to_s)\n    @cloud_function = GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupCloudFunction.new(@fetched['cloudFunction'], to_s)\n    @psc_target_service = @fetched['pscTargetService']\n    @psc_data = GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupPscData.new(@fetched['pscData'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalNetworkEndpointGroup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networkEndpointGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_network_endpoint_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalNetworkEndpointGroups < GcpResourceBase\n  name 'google_compute_global_network_endpoint_groups'\n  desc 'GlobalNetworkEndpointGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:network_endpoint_types, field: :network_endpoint_type)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:default_ports, field: :default_port)\n  filter_table_config.add(:annotations, field: :annotations)\n  filter_table_config.add(:cloud_runs, field: :cloud_run)\n  filter_table_config.add(:app_engines, field: :app_engine)\n  filter_table_config.add(:cloud_functions, field: :cloud_function)\n  filter_table_config.add(:psc_target_services, field: :psc_target_service)\n  filter_table_config.add(:psc_data, field: :psc_data)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'networkEndpointType' => ->(obj) { [:network_endpoint_type, obj['networkEndpointType']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'defaultPort' => ->(obj) { [:default_port, obj['defaultPort']] },\n      'annotations' => ->(obj) { [:annotations, GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupAnnotations.new(obj['annotations'], to_s)] },\n      'cloudRun' => ->(obj) { [:cloud_run, GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupCloudRun.new(obj['cloudRun'], to_s)] },\n      'appEngine' => ->(obj) { [:app_engine, GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupAppEngine.new(obj['appEngine'], to_s)] },\n      'cloudFunction' => ->(obj) { [:cloud_function, GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupCloudFunction.new(obj['cloudFunction'], to_s)] },\n      'pscTargetService' => ->(obj) { [:psc_target_service, obj['pscTargetService']] },\n      'pscData' => ->(obj) { [:psc_data, GoogleInSpec::Compute::Property::GlobalNetworkEndpointGroupPscData.new(obj['pscData'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networkEndpointGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_operation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeGlobalOperation < GcpResourceBase\n  name 'google_compute_global_operation'\n  desc 'GlobalOperation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :zone\n  attr_reader :client_operation_id\n  attr_reader :operation_type\n  attr_reader :user\n  attr_reader :progress\n  attr_reader :insert_time\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :status\n  attr_reader :status_message\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @zone = @fetched['zone']\n    @client_operation_id = @fetched['clientOperationId']\n    @operation_type = @fetched['operationType']\n    @user = @fetched['user']\n    @progress = @fetched['progress']\n    @insert_time = parse_time_string(@fetched['insertTime'])\n    @start_time = parse_time_string(@fetched['startTime'])\n    @end_time = parse_time_string(@fetched['endTime'])\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"GlobalOperation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/operations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_global_operations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeGlobalOperations < GcpResourceBase\n  name 'google_compute_global_operations'\n  desc 'GlobalOperation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:client_operation_ids, field: :client_operation_id)\n  filter_table_config.add(:operation_types, field: :operation_type)\n  filter_table_config.add(:users, field: :user)\n  filter_table_config.add(:progresses, field: :progress)\n  filter_table_config.add(:insert_times, field: :insert_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'clientOperationId' => ->(obj) { [:client_operation_id, obj['clientOperationId']] },\n      'operationType' => ->(obj) { [:operation_type, obj['operationType']] },\n      'user' => ->(obj) { [:user, obj['user']] },\n      'progress' => ->(obj) { [:progress, obj['progress']] },\n      'insertTime' => ->(obj) { [:insert_time, parse_time_string(obj['insertTime'])] },\n      'startTime' => ->(obj) { [:start_time, parse_time_string(obj['startTime'])] },\n      'endTime' => ->(obj) { [:end_time, parse_time_string(obj['endTime'])] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/operations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/healthcheck_grpc_health_check'\nrequire 'google/compute/property/healthcheck_http2_health_check'\nrequire 'google/compute/property/healthcheck_http_health_check'\nrequire 'google/compute/property/healthcheck_https_health_check'\nrequire 'google/compute/property/healthcheck_log_config'\nrequire 'google/compute/property/healthcheck_ssl_health_check'\nrequire 'google/compute/property/healthcheck_tcp_health_check'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHealthCheck < GcpResourceBase\n  name 'google_compute_health_check'\n  desc 'HealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :id\n  attr_reader :name\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n  attr_reader :type\n  attr_reader :http_health_check\n  attr_reader :https_health_check\n  attr_reader :tcp_health_check\n  attr_reader :ssl_health_check\n  attr_reader :http2_health_check\n  attr_reader :grpc_health_check\n  attr_reader :log_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n    @type = @fetched['type']\n    @http_health_check = GoogleInSpec::Compute::Property::HealthCheckHttpHealthCheck.new(@fetched['httpHealthCheck'], to_s)\n    @https_health_check = GoogleInSpec::Compute::Property::HealthCheckHttpsHealthCheck.new(@fetched['httpsHealthCheck'], to_s)\n    @tcp_health_check = GoogleInSpec::Compute::Property::HealthCheckTcpHealthCheck.new(@fetched['tcpHealthCheck'], to_s)\n    @ssl_health_check = GoogleInSpec::Compute::Property::HealthCheckSslHealthCheck.new(@fetched['sslHealthCheck'], to_s)\n    @http2_health_check = GoogleInSpec::Compute::Property::HealthCheckHttp2HealthCheck.new(@fetched['http2HealthCheck'], to_s)\n    @grpc_health_check = GoogleInSpec::Compute::Property::HealthCheckGrpcHealthCheck.new(@fetched['grpcHealthCheck'], to_s)\n    @log_config = GoogleInSpec::Compute::Property::HealthCheckLogConfig.new(@fetched['logConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HealthCheck #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/healthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_health_check_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHealthCheckService < GcpResourceBase\n  name 'google_compute_health_check_service'\n  desc 'HealthCheckService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :health_status_aggregation_policy\n  attr_reader :health_checks\n  attr_reader :network_endpoint_groups\n  attr_reader :notification_endpoints\n  attr_reader :fingerprint\n  attr_reader :next_page_token\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @health_status_aggregation_policy = @fetched['healthStatusAggregationPolicy']\n    @health_checks = @fetched['healthChecks']\n    @network_endpoint_groups = @fetched['networkEndpointGroups']\n    @notification_endpoints = @fetched['notificationEndpoints']\n    @fingerprint = @fetched['fingerprint']\n    @next_page_token = @fetched['nextPageToken']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HealthCheckService #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/healthCheckServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_health_check_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHealthCheckServices < GcpResourceBase\n  name 'google_compute_health_check_services'\n  desc 'HealthCheckService plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:health_status_aggregation_policies, field: :health_status_aggregation_policy)\n  filter_table_config.add(:health_checks, field: :health_checks)\n  filter_table_config.add(:network_endpoint_groups, field: :network_endpoint_groups)\n  filter_table_config.add(:notification_endpoints, field: :notification_endpoints)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:next_page_tokens, field: :next_page_token)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'healthStatusAggregationPolicy' => ->(obj) { [:health_status_aggregation_policy, obj['healthStatusAggregationPolicy']] },\n      'healthChecks' => ->(obj) { [:health_checks, obj['healthChecks']] },\n      'networkEndpointGroups' => ->(obj) { [:network_endpoint_groups, obj['networkEndpointGroups']] },\n      'notificationEndpoints' => ->(obj) { [:notification_endpoints, obj['notificationEndpoints']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'nextPageToken' => ->(obj) { [:next_page_token, obj['nextPageToken']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/healthCheckServices'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHealthChecks < GcpResourceBase\n  name 'google_compute_health_checks'\n  desc 'HealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:http_health_checks, field: :http_health_check)\n  filter_table_config.add(:https_health_checks, field: :https_health_check)\n  filter_table_config.add(:tcp_health_checks, field: :tcp_health_check)\n  filter_table_config.add(:ssl_health_checks, field: :ssl_health_check)\n  filter_table_config.add(:http2_health_checks, field: :http2_health_check)\n  filter_table_config.add(:grpc_health_checks, field: :grpc_health_check)\n  filter_table_config.add(:log_configs, field: :log_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'httpHealthCheck' => ->(obj) { [:http_health_check, GoogleInSpec::Compute::Property::HealthCheckHttpHealthCheck.new(obj['httpHealthCheck'], to_s)] },\n      'httpsHealthCheck' => ->(obj) { [:https_health_check, GoogleInSpec::Compute::Property::HealthCheckHttpsHealthCheck.new(obj['httpsHealthCheck'], to_s)] },\n      'tcpHealthCheck' => ->(obj) { [:tcp_health_check, GoogleInSpec::Compute::Property::HealthCheckTcpHealthCheck.new(obj['tcpHealthCheck'], to_s)] },\n      'sslHealthCheck' => ->(obj) { [:ssl_health_check, GoogleInSpec::Compute::Property::HealthCheckSslHealthCheck.new(obj['sslHealthCheck'], to_s)] },\n      'http2HealthCheck' => ->(obj) { [:http2_health_check, GoogleInSpec::Compute::Property::HealthCheckHttp2HealthCheck.new(obj['http2HealthCheck'], to_s)] },\n      'grpcHealthCheck' => ->(obj) { [:grpc_health_check, GoogleInSpec::Compute::Property::HealthCheckGrpcHealthCheck.new(obj['grpcHealthCheck'], to_s)] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::HealthCheckLogConfig.new(obj['logConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/healthChecks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_http_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHttpHealthCheck < GcpResourceBase\n  name 'google_compute_http_health_check'\n  desc 'HttpHealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :host\n  attr_reader :id\n  attr_reader :name\n  attr_reader :port\n  attr_reader :request_path\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @host = @fetched['host']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @port = @fetched['port']\n    @request_path = @fetched['requestPath']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HttpHealthCheck #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpHealthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_http_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHttpHealthChecks < GcpResourceBase\n  name 'google_compute_http_health_checks'\n  desc 'HttpHealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:request_paths, field: :request_path)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'requestPath' => ->(obj) { [:request_path, obj['requestPath']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpHealthChecks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_https_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeHttpsHealthCheck < GcpResourceBase\n  name 'google_compute_https_health_check'\n  desc 'HttpsHealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :host\n  attr_reader :id\n  attr_reader :name\n  attr_reader :port\n  attr_reader :request_path\n  attr_reader :timeout_sec\n  attr_reader :unhealthy_threshold\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @host = @fetched['host']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @port = @fetched['port']\n    @request_path = @fetched['requestPath']\n    @timeout_sec = @fetched['timeoutSec']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HttpsHealthCheck #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpsHealthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_https_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeHttpsHealthChecks < GcpResourceBase\n  name 'google_compute_https_health_checks'\n  desc 'HttpsHealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:request_paths, field: :request_path)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'requestPath' => ->(obj) { [:request_path, obj['requestPath']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/httpsHealthChecks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_image.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/image_deprecated'\nrequire 'google/compute/property/image_guest_os_features'\nrequire 'google/compute/property/image_image_encryption_key'\nrequire 'google/compute/property/image_raw_disk'\nrequire 'google/compute/property/image_source_disk_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass ComputeImage < GcpResourceBase\n  name 'google_compute_image'\n  desc 'Image'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :archive_size_bytes\n  attr_reader :creation_timestamp\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :disk_size_gb\n  attr_reader :family\n  attr_reader :guest_os_features\n  attr_reader :id\n  attr_reader :image_encryption_key\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :licenses\n  attr_reader :name\n  attr_reader :raw_disk\n  attr_reader :source_disk\n  attr_reader :source_disk_encryption_key\n  attr_reader :source_disk_id\n  attr_reader :source_image\n  attr_reader :source_snapshot\n  attr_reader :source_type\n  attr_reader :self_link\n  attr_reader :status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    if @fetched.nil?\n      @fetched = @connection.fetch(product_url(params[:beta]), 'projects/{{project}}/global/images/family/{{name}}', params, 'Get')\n    end\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @archive_size_bytes = @fetched['archiveSizeBytes']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @deprecated = GoogleInSpec::Compute::Property::ImageDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @disk_size_gb = @fetched['diskSizeGb']\n    @family = @fetched['family']\n    @guest_os_features = GoogleInSpec::Compute::Property::ImageGuestOsFeaturesArray.parse(@fetched['guestOsFeatures'], to_s)\n    @id = @fetched['id']\n    @image_encryption_key = GoogleInSpec::Compute::Property::ImageImageEncryptionKey.new(@fetched['imageEncryptionKey'], to_s)\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @licenses = @fetched['licenses']\n    @name = @fetched['name']\n    @raw_disk = GoogleInSpec::Compute::Property::ImageRawDisk.new(@fetched['rawDisk'], to_s)\n    @source_disk = @fetched['sourceDisk']\n    @source_disk_encryption_key = GoogleInSpec::Compute::Property::ImageSourceDiskEncryptionKey.new(@fetched['sourceDiskEncryptionKey'], to_s)\n    @source_disk_id = @fetched['sourceDiskId']\n    @source_image = @fetched['sourceImage']\n    @source_snapshot = @fetched['sourceSnapshot']\n    @source_type = @fetched['sourceType']\n    @self_link = @fetched['selfLink']\n    @status = @fetched['status']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Image #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/images/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_image_family_view.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/imagefamilyview_image'\nrequire 'google/compute/property/imagefamilyview_image_deprecated'\nrequire 'google/compute/property/imagefamilyview_image_image_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_raw_disk'\nrequire 'google/compute/property/imagefamilyview_image_source_disk_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_dbxs'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_keks'\nrequire 'google/compute/property/imagefamilyview_image_source_snapshot_encryption_key_pk'\n\n# A provider to manage Compute Engine resources.\nclass ComputeImageFamilyView < GcpResourceBase\n  name 'google_compute_image_family_view'\n  desc 'ImageFamilyView'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :image\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @image = GoogleInSpec::Compute::Property::ImageFamilyViewImage.new(@fetched['image'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ImageFamilyView #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/imageFamilyViews/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instance_disks'\nrequire 'google/compute/property/instance_guest_accelerators'\nrequire 'google/compute/property/instance_network_interfaces'\nrequire 'google/compute/property/instance_scheduling'\nrequire 'google/compute/property/instance_service_accounts'\nrequire 'google/compute/property/instance_shielded_instance_config'\nrequire 'google/compute/property/instance_tags'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstance < GcpResourceBase\n  name 'google_compute_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :can_ip_forward\n  attr_reader :cpu_platform\n  attr_reader :creation_timestamp\n  attr_reader :deletion_protection\n  attr_reader :disks\n  attr_reader :guest_accelerators\n  attr_reader :hostname\n  attr_reader :id\n  attr_reader :label_fingerprint\n  attr_reader :labels\n  attr_reader :metadata\n  attr_reader :machine_type\n  attr_reader :min_cpu_platform\n  attr_reader :name\n  attr_reader :network_interfaces\n  attr_reader :scheduling\n  attr_reader :service_accounts\n  attr_reader :shielded_instance_config\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :tags\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @can_ip_forward = @fetched['canIpForward']\n    @cpu_platform = @fetched['cpuPlatform']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @deletion_protection = @fetched['deletionProtection']\n    @disks = GoogleInSpec::Compute::Property::InstanceDisksArray.parse(@fetched['disks'], to_s)\n    @guest_accelerators = GoogleInSpec::Compute::Property::InstanceGuestAcceleratorsArray.parse(@fetched['guestAccelerators'], to_s)\n    @hostname = @fetched['hostname']\n    @id = @fetched['id']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @labels = @fetched['labels']\n    @metadata = @fetched['metadata']\n    @machine_type = @fetched['machineType']\n    @min_cpu_platform = @fetched['minCpuPlatform']\n    @name = @fetched['name']\n    @network_interfaces = GoogleInSpec::Compute::Property::InstanceNetworkInterfacesArray.parse(@fetched['networkInterfaces'], to_s)\n    @scheduling = GoogleInSpec::Compute::Property::InstanceScheduling.new(@fetched['scheduling'], to_s)\n    @service_accounts = GoogleInSpec::Compute::Property::InstanceServiceAccountsArray.parse(@fetched['serviceAccounts'], to_s)\n    @shielded_instance_config = GoogleInSpec::Compute::Property::InstanceShieldedInstanceConfig.new(@fetched['shieldedInstanceConfig'], to_s)\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @tags = GoogleInSpec::Compute::Property::InstanceTags.new(@fetched['tags'], to_s)\n    @zone = @fetched['zone']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  def disk_count\n    @disks&.count || 0\n  end\n\n  def tag_count\n    @tags&.items&.count || 0\n  end\n\n  def network_interfaces_count\n    @network_interfaces&.count || 0\n  end\n\n  # TBD: Below few methods are present to make the tests simpler e.g. avoid looping over arrays etc.\n  #     but passing index arguments from the inspec test would be better\n\n  def first_network_interface_nat_ip_exists\n    !@network_interfaces[0].access_configs[0].nat_ip.nil?\n  end\n\n  def first_network_interface_name\n    @network_interfaces[0].access_configs[0].name\n  end\n\n  def first_network_interface_type\n    @network_interfaces[0].access_configs[0].type.downcase\n  end\n\n  def first_disks_source_name\n    disks_source_name(0)\n  end\n\n  def first_disks_first_license\n    disks_license(0, 0)\n  end\n\n  def second_disks_device_name\n    return '' if @disks[1].nil? || !defined?(@disks[1].device_name) || @disks[1].device_name.nil?\n    disks[1].device_name\n  end\n\n  def second_disks_source_name\n    disks_source_name(1)\n  end\n\n  def second_disks_first_license\n    disks_license(1, 0)\n  end\n\n  # helper method for retrieving a disk source basename\n  def disks_source_name(index = 0)\n    return '' if @disks[index].nil? || !defined?(@disks[index].source) || @disks[index].source.nil?\n    @disks[index].source.split('/').last\n  end\n\n  # helper method for retrieving a disk license string\n  def disks_license(disk_index = 0, license_index = 0)\n    return '' if @disks[disk_index].nil? || !defined?(@disks[disk_index].licenses[license_index]) || @disks[disk_index].licenses[license_index].nil?\n    @disks[disk_index].licenses[license_index].downcase\n  end\n\n  def machine_size\n    return '' if !defined?(@machine_type) || @machine_type.nil?\n    @machine_type.split('/').last\n  end\n\n  # helper for returning label keys to perform checks\n  def labels_keys\n    return [] if !defined?(@labels) || @labels.nil?\n    @labels.keys\n  end\n\n  # helper for returning label values to perform checks\n  def labels_values\n    return [] if !defined?(@labels) || @labels.nil?\n    @labels.values\n  end\n\n  def label_value_by_key(label_key)\n    return [] if !defined?(@labels) || @labels.nil?\n    @labels[label_key]\n  end\n\n  def metadata_keys\n    return [] if !defined?(@metadata) || @metadata.nil?\n    @metadata['items']&.map { |m| m['key'] }\n  end\n\n  def metadata_values\n    return [] if !defined?(@metadata) || @metadata.nil?\n    @metadata['items']&.map { |m| m['value'] }\n  end\n\n  def metadata_value_by_key(metadata_key)\n    return [] if !defined?(@metadata) || @metadata.nil?\n    @metadata['items']&.each do |item|\n      if item['key'] == metadata_key\n        return item['value']\n      end\n    end\n    []\n  end\n\n  def service_account_scopes\n    # NOTE: instances can have only one service account defined\n    return [] if @service_accounts[0].nil? || !defined?(@service_accounts[0].scopes) || @service_accounts[0].scopes.nil?\n    @service_accounts[0].scopes\n  end\n\n  def block_project_ssh_keys\n    return false if !defined?(@metadata['items']) || @metadata['items'].nil?\n    @metadata['items'].each do |element|\n      return true if element['key']=='block-project-ssh-keys' and element['value'].casecmp('true').zero?\n      return true if element['key']=='block-project-ssh-keys' and element['value']=='1'\n    end\n    false\n  end\n\n  def has_serial_port_disabled?\n    return false if !defined?(@metadata['items']) || @metadata['items'].nil?\n    @metadata['items'].each do |element|\n      return false if element['key']=='serial-port-enable' and element['value'].casecmp('true').zero?\n      return false if element['key']=='serial-port-enable' and element['value']=='1'\n    end\n    true\n  end\n\n  def has_disks_encrypted_with_csek?\n    return false if !defined?(@disks) || @disks.nil?\n    @disks.each do |disk|\n      return false if !defined?(disk.disk_encryption_key)\n      return false if disk.disk_encryption_key.nil?\n      return false if !defined?(disk.disk_encryption_key.sha256)\n      return false if disk.disk_encryption_key.sha256.nil?\n    end\n    true\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instancegroup_named_ports'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstanceGroup < GcpResourceBase\n  name 'google_compute_instance_group'\n  desc 'InstanceGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :named_ports\n  attr_reader :network\n  attr_reader :region\n  attr_reader :subnetwork\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @named_ports = GoogleInSpec::Compute::Property::InstanceGroupNamedPortsArray.parse(@fetched['namedPorts'], to_s)\n    @network = @fetched['network']\n    @region = @fetched['region']\n    @subnetwork = @fetched['subnetwork']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceGroup #{@params[:name]}\"\n  end\n\n  def port_name\n    find_named_ports(:name)\n  end\n  RSpec::Matchers.alias_matcher :has_port_name, :be_allow_port_name\n\n  def port_value\n    find_named_ports(:port)\n  end\n  RSpec::Matchers.alias_matcher :has_port_value, :be_allow_port_value\n\n  def find_named_ports(key = :name)\n    # check all name/port values for a match\n    @named_ports.each do |named_port|\n      next if !defined?(named_port.item[key]) || named_port.item[key].nil?\n      return named_port.item[key]\n    end\n    false\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_group_manager.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instancegroupmanager_current_actions'\nrequire 'google/compute/property/instancegroupmanager_named_ports'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstanceGroupManager < GcpResourceBase\n  name 'google_compute_instance_group_manager'\n  desc 'InstanceGroupManager'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :base_instance_name\n  attr_reader :creation_timestamp\n  attr_reader :current_actions\n  attr_reader :description\n  attr_reader :id\n  attr_reader :instance_group\n  attr_reader :instance_template\n  attr_reader :name\n  attr_reader :named_ports\n  attr_reader :region\n  attr_reader :target_pools\n  attr_reader :target_size\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @base_instance_name = @fetched['baseInstanceName']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @current_actions = GoogleInSpec::Compute::Property::InstanceGroupManagerCurrentActions.new(@fetched['currentActions'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @instance_group = @fetched['instanceGroup']\n    @instance_template = @fetched['instanceTemplate']\n    @name = @fetched['name']\n    @named_ports = GoogleInSpec::Compute::Property::InstanceGroupManagerNamedPortsArray.parse(@fetched['namedPorts'], to_s)\n    @region = @fetched['region']\n    @target_pools = @fetched['targetPools']\n    @target_size = @fetched['targetSize']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceGroupManager #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_group_managers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstanceGroupManagers < GcpResourceBase\n  name 'google_compute_instance_group_managers'\n  desc 'InstanceGroupManager plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:base_instance_names, field: :base_instance_name)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:current_actions, field: :current_actions)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:instance_groups, field: :instance_group)\n  filter_table_config.add(:instance_templates, field: :instance_template)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:named_ports, field: :named_ports)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:target_pools, field: :target_pools)\n  filter_table_config.add(:target_sizes, field: :target_size)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'baseInstanceName' => ->(obj) { [:base_instance_name, obj['baseInstanceName']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'currentActions' => ->(obj) { [:current_actions, GoogleInSpec::Compute::Property::InstanceGroupManagerCurrentActions.new(obj['currentActions'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'instanceGroup' => ->(obj) { [:instance_group, obj['instanceGroup']] },\n      'instanceTemplate' => ->(obj) { [:instance_template, obj['instanceTemplate']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'namedPorts' => ->(obj) { [:named_ports, GoogleInSpec::Compute::Property::InstanceGroupManagerNamedPortsArray.parse(obj['namedPorts'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'targetPools' => ->(obj) { [:target_pools, obj['targetPools']] },\n      'targetSize' => ->(obj) { [:target_size, obj['targetSize']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroupManagers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstanceGroups < GcpResourceBase\n  name 'google_compute_instance_groups'\n  desc 'InstanceGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:instance_group_ids, field: :instance_group_id)\n  filter_table_config.add(:instance_group_names, field: :instance_group_name)\n  filter_table_config.add(:named_ports, field: :named_ports)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:instance_group_id, obj['id']] },\n      'name' => ->(obj) { [:instance_group_name, obj['name']] },\n      'namedPorts' => ->(obj) { [:named_ports, GoogleInSpec::Compute::Property::InstanceGroupNamedPortsArray.parse(obj['namedPorts'], to_s)] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instanceGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/instancetemplate_properties'\nrequire 'google/compute/property/instancetemplate_properties_disks'\nrequire 'google/compute/property/instancetemplate_properties_guest_accelerators'\nrequire 'google/compute/property/instancetemplate_properties_network_interfaces'\nrequire 'google/compute/property/instancetemplate_properties_scheduling'\nrequire 'google/compute/property/instancetemplate_properties_service_accounts'\nrequire 'google/compute/property/instancetemplate_properties_tags'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInstanceTemplate < GcpResourceBase\n  name 'google_compute_instance_template'\n  desc 'InstanceTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :properties\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @properties = GoogleInSpec::Compute::Property::InstanceTemplateProperties.new(@fetched['properties'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InstanceTemplate #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/instanceTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instance_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstanceTemplates < GcpResourceBase\n  name 'google_compute_instance_templates'\n  desc 'InstanceTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:properties, field: :properties)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'properties' => ->(obj) { [:properties, GoogleInSpec::Compute::Property::InstanceTemplateProperties.new(obj['properties'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/instanceTemplates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInstances < GcpResourceBase\n  name 'google_compute_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:can_ip_forwards, field: :can_ip_forward)\n  filter_table_config.add(:cpu_platforms, field: :cpu_platform)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deletion_protections, field: :deletion_protection)\n  filter_table_config.add(:disks, field: :disks)\n  filter_table_config.add(:guest_accelerators, field: :guest_accelerators)\n  filter_table_config.add(:hostnames, field: :hostname)\n  filter_table_config.add(:instance_ids, field: :instance_id)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:machine_types, field: :machine_type)\n  filter_table_config.add(:min_cpu_platforms, field: :min_cpu_platform)\n  filter_table_config.add(:instance_names, field: :instance_name)\n  filter_table_config.add(:network_interfaces, field: :network_interfaces)\n  filter_table_config.add(:schedulings, field: :scheduling)\n  filter_table_config.add(:service_accounts, field: :service_accounts)\n  filter_table_config.add(:shielded_instance_configs, field: :shielded_instance_config)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:tags, field: :tags)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'canIpForward' => ->(obj) { [:can_ip_forward, obj['canIpForward']] },\n      'cpuPlatform' => ->(obj) { [:cpu_platform, obj['cpuPlatform']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'deletionProtection' => ->(obj) { [:deletion_protection, obj['deletionProtection']] },\n      'disks' => ->(obj) { [:disks, GoogleInSpec::Compute::Property::InstanceDisksArray.parse(obj['disks'], to_s)] },\n      'guestAccelerators' => ->(obj) { [:guest_accelerators, GoogleInSpec::Compute::Property::InstanceGuestAcceleratorsArray.parse(obj['guestAccelerators'], to_s)] },\n      'hostname' => ->(obj) { [:hostname, obj['hostname']] },\n      'id' => ->(obj) { [:instance_id, obj['id']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'machineType' => ->(obj) { [:machine_type, obj['machineType']] },\n      'minCpuPlatform' => ->(obj) { [:min_cpu_platform, obj['minCpuPlatform']] },\n      'name' => ->(obj) { [:instance_name, obj['name']] },\n      'networkInterfaces' => ->(obj) { [:network_interfaces, GoogleInSpec::Compute::Property::InstanceNetworkInterfacesArray.parse(obj['networkInterfaces'], to_s)] },\n      'scheduling' => ->(obj) { [:scheduling, GoogleInSpec::Compute::Property::InstanceScheduling.new(obj['scheduling'], to_s)] },\n      'serviceAccounts' => ->(obj) { [:service_accounts, GoogleInSpec::Compute::Property::InstanceServiceAccountsArray.parse(obj['serviceAccounts'], to_s)] },\n      'shieldedInstanceConfig' => ->(obj) { [:shielded_instance_config, GoogleInSpec::Compute::Property::InstanceShieldedInstanceConfig.new(obj['shieldedInstanceConfig'], to_s)] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'tags' => ->(obj) { [:tags, GoogleInSpec::Compute::Property::InstanceTags.new(obj['tags'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/interconnect_circuit_infos'\nrequire 'google/compute/property/interconnect_expected_outages'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInterconnect < GcpResourceBase\n  name 'google_compute_interconnect'\n  desc 'Interconnect'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :admin_enabled\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :location\n  attr_reader :id\n  attr_reader :name\n  attr_reader :noc_contact_email\n  attr_reader :peer_ip_address\n  attr_reader :google_ip_address\n  attr_reader :client_operation_id\n  attr_reader :google_reference_id\n  attr_reader :provisioned_link_count\n  attr_reader :customer_name\n  attr_reader :requested_link_count\n  attr_reader :operational_status\n  attr_reader :link_type\n  attr_reader :interconnect_type\n  attr_reader :interconnect_attachments\n  attr_reader :expected_outages\n  attr_reader :circuit_infos\n  attr_reader :satisfies_pzs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @admin_enabled = @fetched['adminEnabled']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @location = @fetched['location']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @noc_contact_email = @fetched['nocContactEmail']\n    @peer_ip_address = @fetched['peerIpAddress']\n    @google_ip_address = @fetched['googleIpAddress']\n    @client_operation_id = @fetched['clientOperationId']\n    @google_reference_id = @fetched['googleReferenceId']\n    @provisioned_link_count = @fetched['provisionedLinkCount']\n    @customer_name = @fetched['customerName']\n    @requested_link_count = @fetched['requestedLinkCount']\n    @operational_status = @fetched['operationalStatus']\n    @link_type = @fetched['linkType']\n    @interconnect_type = @fetched['interconnectType']\n    @interconnect_attachments = @fetched['interconnectAttachments']\n    @expected_outages = GoogleInSpec::Compute::Property::InterconnectExpectedOutagesArray.parse(@fetched['expectedOutages'], to_s)\n    @circuit_infos = GoogleInSpec::Compute::Property::InterconnectCircuitInfosArray.parse(@fetched['circuitInfos'], to_s)\n    @satisfies_pzs = @fetched['satisfiesPzs']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Interconnect #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/interconnects/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnect_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/interconnectattachment_configuration_constraints'\nrequire 'google/compute/property/interconnectattachment_configuration_constraints_bgp_peer_asn_ranges'\nrequire 'google/compute/property/interconnectattachment_labels'\nrequire 'google/compute/property/interconnectattachment_partner_metadata'\nrequire 'google/compute/property/interconnectattachment_private_interconnect_info'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInterconnectAttachment < GcpResourceBase\n  name 'google_compute_interconnect_attachment'\n  desc 'InterconnectAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :interconnect\n  attr_reader :router\n  attr_reader :region\n  attr_reader :google_reference_id\n  attr_reader :mtu\n  attr_reader :private_interconnect_info\n  attr_reader :operational_status\n  attr_reader :cloud_router_ip_address\n  attr_reader :customer_router_ip_address\n  attr_reader :type\n  attr_reader :pairing_key\n  attr_reader :admin_enabled\n  attr_reader :vlan_tag8021q\n  attr_reader :edge_availability_domain\n  attr_reader :candidate_subnets\n  attr_reader :bandwidth\n  attr_reader :partner_metadata\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :state\n  attr_reader :partner_asn\n  attr_reader :encryption\n  attr_reader :ipsec_internal_addresses\n  attr_reader :dataplane_version\n  attr_reader :satisfies_pzs\n  attr_reader :stack_type\n  attr_reader :cloud_router_ipv6_address\n  attr_reader :customer_router_ipv6_address\n  attr_reader :candidate_ipv6_subnets\n  attr_reader :cloud_router_ipv6_interface_id\n  attr_reader :customer_router_ipv6_interface_id\n  attr_reader :subnet_length\n  attr_reader :remote_service\n  attr_reader :configuration_constraints\n  attr_reader :multicast_enabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @interconnect = @fetched['interconnect']\n    @router = @fetched['router']\n    @region = @fetched['region']\n    @google_reference_id = @fetched['googleReferenceId']\n    @mtu = @fetched['mtu']\n    @private_interconnect_info = GoogleInSpec::Compute::Property::InterconnectAttachmentPrivateInterconnectInfo.new(@fetched['privateInterconnectInfo'], to_s)\n    @operational_status = @fetched['operationalStatus']\n    @cloud_router_ip_address = @fetched['cloudRouterIpAddress']\n    @customer_router_ip_address = @fetched['customerRouterIpAddress']\n    @type = @fetched['type']\n    @pairing_key = @fetched['pairingKey']\n    @admin_enabled = @fetched['adminEnabled']\n    @vlan_tag8021q = @fetched['vlanTag8021q']\n    @edge_availability_domain = @fetched['edgeAvailabilityDomain']\n    @candidate_subnets = @fetched['candidateSubnets']\n    @bandwidth = @fetched['bandwidth']\n    @partner_metadata = GoogleInSpec::Compute::Property::InterconnectAttachmentPartnerMetadata.new(@fetched['partnerMetadata'], to_s)\n    @labels = GoogleInSpec::Compute::Property::InterconnectAttachmentLabels.new(@fetched['labels'], to_s)\n    @label_fingerprint = @fetched['labelFingerprint']\n    @state = @fetched['state']\n    @partner_asn = @fetched['partnerAsn']\n    @encryption = @fetched['encryption']\n    @ipsec_internal_addresses = @fetched['ipsecInternalAddresses']\n    @dataplane_version = @fetched['dataplaneVersion']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @stack_type = @fetched['stackType']\n    @cloud_router_ipv6_address = @fetched['cloudRouterIpv6Address']\n    @customer_router_ipv6_address = @fetched['customerRouterIpv6Address']\n    @candidate_ipv6_subnets = @fetched['candidateIpv6Subnets']\n    @cloud_router_ipv6_interface_id = @fetched['cloudRouterIpv6InterfaceId']\n    @customer_router_ipv6_interface_id = @fetched['customerRouterIpv6InterfaceId']\n    @subnet_length = @fetched['subnetLength']\n    @remote_service = @fetched['remoteService']\n    @configuration_constraints = GoogleInSpec::Compute::Property::InterconnectAttachmentConfigurationConstraints.new(@fetched['configurationConstraints'], to_s)\n    @multicast_enabled = @fetched['multicastEnabled']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InterconnectAttachment #{@params[:interconnectAttachment]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/interconnectAttachments/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnect_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInterconnectAttachments < GcpResourceBase\n  name 'google_compute_interconnect_attachments'\n  desc 'InterconnectAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:interconnects, field: :interconnect)\n  filter_table_config.add(:routers, field: :router)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:google_reference_ids, field: :google_reference_id)\n  filter_table_config.add(:mtus, field: :mtu)\n  filter_table_config.add(:private_interconnect_infos, field: :private_interconnect_info)\n  filter_table_config.add(:operational_statuses, field: :operational_status)\n  filter_table_config.add(:cloud_router_ip_addresses, field: :cloud_router_ip_address)\n  filter_table_config.add(:customer_router_ip_addresses, field: :customer_router_ip_address)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:pairing_keys, field: :pairing_key)\n  filter_table_config.add(:admin_enableds, field: :admin_enabled)\n  filter_table_config.add(:vlan_tag8021qs, field: :vlan_tag8021q)\n  filter_table_config.add(:edge_availability_domains, field: :edge_availability_domain)\n  filter_table_config.add(:candidate_subnets, field: :candidate_subnets)\n  filter_table_config.add(:bandwidths, field: :bandwidth)\n  filter_table_config.add(:partner_metadata, field: :partner_metadata)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:partner_asns, field: :partner_asn)\n  filter_table_config.add(:encryptions, field: :encryption)\n  filter_table_config.add(:ipsec_internal_addresses, field: :ipsec_internal_addresses)\n  filter_table_config.add(:dataplane_versions, field: :dataplane_version)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:stack_types, field: :stack_type)\n  filter_table_config.add(:cloud_router_ipv6_addresses, field: :cloud_router_ipv6_address)\n  filter_table_config.add(:customer_router_ipv6_addresses, field: :customer_router_ipv6_address)\n  filter_table_config.add(:candidate_ipv6_subnets, field: :candidate_ipv6_subnets)\n  filter_table_config.add(:cloud_router_ipv6_interface_ids, field: :cloud_router_ipv6_interface_id)\n  filter_table_config.add(:customer_router_ipv6_interface_ids, field: :customer_router_ipv6_interface_id)\n  filter_table_config.add(:subnet_lengths, field: :subnet_length)\n  filter_table_config.add(:remote_services, field: :remote_service)\n  filter_table_config.add(:configuration_constraints, field: :configuration_constraints)\n  filter_table_config.add(:multicast_enableds, field: :multicast_enabled)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'interconnect' => ->(obj) { [:interconnect, obj['interconnect']] },\n      'router' => ->(obj) { [:router, obj['router']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'googleReferenceId' => ->(obj) { [:google_reference_id, obj['googleReferenceId']] },\n      'mtu' => ->(obj) { [:mtu, obj['mtu']] },\n      'privateInterconnectInfo' => ->(obj) { [:private_interconnect_info, GoogleInSpec::Compute::Property::InterconnectAttachmentPrivateInterconnectInfo.new(obj['privateInterconnectInfo'], to_s)] },\n      'operationalStatus' => ->(obj) { [:operational_status, obj['operationalStatus']] },\n      'cloudRouterIpAddress' => ->(obj) { [:cloud_router_ip_address, obj['cloudRouterIpAddress']] },\n      'customerRouterIpAddress' => ->(obj) { [:customer_router_ip_address, obj['customerRouterIpAddress']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'pairingKey' => ->(obj) { [:pairing_key, obj['pairingKey']] },\n      'adminEnabled' => ->(obj) { [:admin_enabled, obj['adminEnabled']] },\n      'vlanTag8021q' => ->(obj) { [:vlan_tag8021q, obj['vlanTag8021q']] },\n      'edgeAvailabilityDomain' => ->(obj) { [:edge_availability_domain, obj['edgeAvailabilityDomain']] },\n      'candidateSubnets' => ->(obj) { [:candidate_subnets, obj['candidateSubnets']] },\n      'bandwidth' => ->(obj) { [:bandwidth, obj['bandwidth']] },\n      'partnerMetadata' => ->(obj) { [:partner_metadata, GoogleInSpec::Compute::Property::InterconnectAttachmentPartnerMetadata.new(obj['partnerMetadata'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Compute::Property::InterconnectAttachmentLabels.new(obj['labels'], to_s)] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'partnerAsn' => ->(obj) { [:partner_asn, obj['partnerAsn']] },\n      'encryption' => ->(obj) { [:encryption, obj['encryption']] },\n      'ipsecInternalAddresses' => ->(obj) { [:ipsec_internal_addresses, obj['ipsecInternalAddresses']] },\n      'dataplaneVersion' => ->(obj) { [:dataplane_version, obj['dataplaneVersion']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'stackType' => ->(obj) { [:stack_type, obj['stackType']] },\n      'cloudRouterIpv6Address' => ->(obj) { [:cloud_router_ipv6_address, obj['cloudRouterIpv6Address']] },\n      'customerRouterIpv6Address' => ->(obj) { [:customer_router_ipv6_address, obj['customerRouterIpv6Address']] },\n      'candidateIpv6Subnets' => ->(obj) { [:candidate_ipv6_subnets, obj['candidateIpv6Subnets']] },\n      'cloudRouterIpv6InterfaceId' => ->(obj) { [:cloud_router_ipv6_interface_id, obj['cloudRouterIpv6InterfaceId']] },\n      'customerRouterIpv6InterfaceId' => ->(obj) { [:customer_router_ipv6_interface_id, obj['customerRouterIpv6InterfaceId']] },\n      'subnetLength' => ->(obj) { [:subnet_length, obj['subnetLength']] },\n      'remoteService' => ->(obj) { [:remote_service, obj['remoteService']] },\n      'configurationConstraints' => ->(obj) { [:configuration_constraints, GoogleInSpec::Compute::Property::InterconnectAttachmentConfigurationConstraints.new(obj['configurationConstraints'], to_s)] },\n      'multicastEnabled' => ->(obj) { [:multicast_enabled, obj['multicastEnabled']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/interconnectAttachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnect_location.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeInterconnectLocation < GcpResourceBase\n  name 'google_compute_interconnect_location'\n  desc 'InterconnectLocation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :availability_zone\n  attr_reader :client_operation_id\n  attr_reader :facility_provider\n  attr_reader :facility_provider_facility_id\n  attr_reader :status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @availability_zone = @fetched['availabilityZone']\n    @client_operation_id = @fetched['clientOperationId']\n    @facility_provider = @fetched['facilityProvider']\n    @facility_provider_facility_id = @fetched['facilityProviderFacilityId']\n    @status = @fetched['status']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InterconnectLocation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/interconnectLocations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnect_locations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInterconnectLocations < GcpResourceBase\n  name 'google_compute_interconnect_locations'\n  desc 'InterconnectLocation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:availability_zones, field: :availability_zone)\n  filter_table_config.add(:client_operation_ids, field: :client_operation_id)\n  filter_table_config.add(:facility_providers, field: :facility_provider)\n  filter_table_config.add(:facility_provider_facility_ids, field: :facility_provider_facility_id)\n  filter_table_config.add(:statuses, field: :status)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'availabilityZone' => ->(obj) { [:availability_zone, obj['availabilityZone']] },\n      'clientOperationId' => ->(obj) { [:client_operation_id, obj['clientOperationId']] },\n      'facilityProvider' => ->(obj) { [:facility_provider, obj['facilityProvider']] },\n      'facilityProviderFacilityId' => ->(obj) { [:facility_provider_facility_id, obj['facilityProviderFacilityId']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/interconnectLocations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_interconnects.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeInterconnects < GcpResourceBase\n  name 'google_compute_interconnects'\n  desc 'Interconnect plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:admin_enableds, field: :admin_enabled)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:noc_contact_emails, field: :noc_contact_email)\n  filter_table_config.add(:peer_ip_addresses, field: :peer_ip_address)\n  filter_table_config.add(:google_ip_addresses, field: :google_ip_address)\n  filter_table_config.add(:client_operation_ids, field: :client_operation_id)\n  filter_table_config.add(:google_reference_ids, field: :google_reference_id)\n  filter_table_config.add(:provisioned_link_counts, field: :provisioned_link_count)\n  filter_table_config.add(:customer_names, field: :customer_name)\n  filter_table_config.add(:requested_link_counts, field: :requested_link_count)\n  filter_table_config.add(:operational_statuses, field: :operational_status)\n  filter_table_config.add(:link_types, field: :link_type)\n  filter_table_config.add(:interconnect_types, field: :interconnect_type)\n  filter_table_config.add(:interconnect_attachments, field: :interconnect_attachments)\n  filter_table_config.add(:expected_outages, field: :expected_outages)\n  filter_table_config.add(:circuit_infos, field: :circuit_infos)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'adminEnabled' => ->(obj) { [:admin_enabled, obj['adminEnabled']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'nocContactEmail' => ->(obj) { [:noc_contact_email, obj['nocContactEmail']] },\n      'peerIpAddress' => ->(obj) { [:peer_ip_address, obj['peerIpAddress']] },\n      'googleIpAddress' => ->(obj) { [:google_ip_address, obj['googleIpAddress']] },\n      'clientOperationId' => ->(obj) { [:client_operation_id, obj['clientOperationId']] },\n      'googleReferenceId' => ->(obj) { [:google_reference_id, obj['googleReferenceId']] },\n      'provisionedLinkCount' => ->(obj) { [:provisioned_link_count, obj['provisionedLinkCount']] },\n      'customerName' => ->(obj) { [:customer_name, obj['customerName']] },\n      'requestedLinkCount' => ->(obj) { [:requested_link_count, obj['requestedLinkCount']] },\n      'operationalStatus' => ->(obj) { [:operational_status, obj['operationalStatus']] },\n      'linkType' => ->(obj) { [:link_type, obj['linkType']] },\n      'interconnectType' => ->(obj) { [:interconnect_type, obj['interconnectType']] },\n      'interconnectAttachments' => ->(obj) { [:interconnect_attachments, obj['interconnectAttachments']] },\n      'expectedOutages' => ->(obj) { [:expected_outages, GoogleInSpec::Compute::Property::InterconnectExpectedOutagesArray.parse(obj['expectedOutages'], to_s)] },\n      'circuitInfos' => ->(obj) { [:circuit_infos, GoogleInSpec::Compute::Property::InterconnectCircuitInfosArray.parse(obj['circuitInfos'], to_s)] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/interconnects'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_license.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/license_resource_requirements'\n\n# A provider to manage Compute Engine resources.\nclass ComputeLicense < GcpResourceBase\n  name 'google_compute_license'\n  desc 'License'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :name\n  attr_reader :charges_use_fee\n  attr_reader :id\n  attr_reader :license_code\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :transferable\n  attr_reader :self_link\n  attr_reader :resource_requirements\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @name = @fetched['name']\n    @charges_use_fee = @fetched['chargesUseFee']\n    @id = @fetched['id']\n    @license_code = @fetched['licenseCode']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @description = @fetched['description']\n    @transferable = @fetched['transferable']\n    @self_link = @fetched['selfLink']\n    @resource_requirements = GoogleInSpec::Compute::Property::LicenseResourceRequirements.new(@fetched['resourceRequirements'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"License #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/licenses/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_license_code.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/licensecode_license_alias'\n\n# A provider to manage Compute Engine resources.\nclass ComputeLicenseCode < GcpResourceBase\n  name 'google_compute_license_code'\n  desc 'LicenseCode'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :transferable\n  attr_reader :state\n  attr_reader :license_alias\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @transferable = @fetched['transferable']\n    @state = @fetched['state']\n    @license_alias = GoogleInSpec::Compute::Property::LicenseCodeLicenseAliasArray.parse(@fetched['licenseAlias'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"LicenseCode #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/licenseCodes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_licenses.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeLicenses < GcpResourceBase\n  name 'google_compute_licenses'\n  desc 'License plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:charges_use_fees, field: :charges_use_fee)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:license_codes, field: :license_code)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:transferables, field: :transferable)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:resource_requirements, field: :resource_requirements)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'chargesUseFee' => ->(obj) { [:charges_use_fee, obj['chargesUseFee']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'licenseCode' => ->(obj) { [:license_code, obj['licenseCode']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'transferable' => ->(obj) { [:transferable, obj['transferable']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'resourceRequirements' => ->(obj) { [:resource_requirements, GoogleInSpec::Compute::Property::LicenseResourceRequirements.new(obj['resourceRequirements'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/licenses'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_machine_image.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/machineimage_instance_properties'\nrequire 'google/compute/property/machineimage_instance_properties_advanced_machine_features'\nrequire 'google/compute/property/machineimage_instance_properties_confidential_instance_config'\nrequire 'google/compute/property/machineimage_instance_properties_disks'\nrequire 'google/compute/property/machineimage_instance_properties_guest_accelerators'\nrequire 'google/compute/property/machineimage_instance_properties_labels'\nrequire 'google/compute/property/machineimage_instance_properties_metadata'\nrequire 'google/compute/property/machineimage_instance_properties_metadata_items'\nrequire 'google/compute/property/machineimage_instance_properties_network_interfaces'\nrequire 'google/compute/property/machineimage_instance_properties_network_performance_config'\nrequire 'google/compute/property/machineimage_instance_properties_reservation_affinity'\nrequire 'google/compute/property/machineimage_instance_properties_resource_manager_tags'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_instance_properties_scheduling_node_affinities'\nrequire 'google/compute/property/machineimage_instance_properties_service_accounts'\nrequire 'google/compute/property/machineimage_instance_properties_shielded_instance_config'\nrequire 'google/compute/property/machineimage_instance_properties_tags'\nrequire 'google/compute/property/machineimage_machine_image_encryption_key'\nrequire 'google/compute/property/machineimage_saved_disks'\nrequire 'google/compute/property/machineimage_source_disk_encryption_keys'\nrequire 'google/compute/property/machineimage_source_instance_properties'\nrequire 'google/compute/property/machineimage_source_instance_properties_disks'\nrequire 'google/compute/property/machineimage_source_instance_properties_guest_accelerators'\nrequire 'google/compute/property/machineimage_source_instance_properties_labels'\nrequire 'google/compute/property/machineimage_source_instance_properties_metadata'\nrequire 'google/compute/property/machineimage_source_instance_properties_metadata_items'\nrequire 'google/compute/property/machineimage_source_instance_properties_network_interfaces'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_local_ssd_recovery_timeout'\nrequire 'google/compute/property/machineimage_source_instance_properties_scheduling_node_affinities'\nrequire 'google/compute/property/machineimage_source_instance_properties_service_accounts'\nrequire 'google/compute/property/machineimage_source_instance_properties_tags'\n\n# A provider to manage Compute Engine resources.\nclass ComputeMachineImage < GcpResourceBase\n  name 'google_compute_machine_image'\n  desc 'MachineImage'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :source_instance\n  attr_reader :status\n  attr_reader :source_instance_properties\n  attr_reader :instance_properties\n  attr_reader :saved_disks\n  attr_reader :storage_locations\n  attr_reader :machine_image_encryption_key\n  attr_reader :guest_flush\n  attr_reader :source_disk_encryption_keys\n  attr_reader :total_storage_bytes\n  attr_reader :satisfies_pzs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @source_instance = @fetched['sourceInstance']\n    @status = @fetched['status']\n    @source_instance_properties = GoogleInSpec::Compute::Property::MachineImageSourceInstanceProperties.new(@fetched['sourceInstanceProperties'], to_s)\n    @instance_properties = GoogleInSpec::Compute::Property::MachineImageInstanceProperties.new(@fetched['instanceProperties'], to_s)\n    @saved_disks = GoogleInSpec::Compute::Property::MachineImageSavedDisksArray.parse(@fetched['savedDisks'], to_s)\n    @storage_locations = @fetched['storageLocations']\n    @machine_image_encryption_key = GoogleInSpec::Compute::Property::MachineImageMachineImageEncryptionKey.new(@fetched['machineImageEncryptionKey'], to_s)\n    @guest_flush = @fetched['guestFlush']\n    @source_disk_encryption_keys = GoogleInSpec::Compute::Property::MachineImageSourceDiskEncryptionKeysArray.parse(@fetched['sourceDiskEncryptionKeys'], to_s)\n    @total_storage_bytes = @fetched['totalStorageBytes']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MachineImage #{@params[:machineImage]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/machineImages/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_machine_images.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeMachineImages < GcpResourceBase\n  name 'google_compute_machine_images'\n  desc 'MachineImage plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:source_instances, field: :source_instance)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:source_instance_properties, field: :source_instance_properties)\n  filter_table_config.add(:instance_properties, field: :instance_properties)\n  filter_table_config.add(:saved_disks, field: :saved_disks)\n  filter_table_config.add(:storage_locations, field: :storage_locations)\n  filter_table_config.add(:machine_image_encryption_keys, field: :machine_image_encryption_key)\n  filter_table_config.add(:guest_flushes, field: :guest_flush)\n  filter_table_config.add(:source_disk_encryption_keys, field: :source_disk_encryption_keys)\n  filter_table_config.add(:total_storage_bytes, field: :total_storage_bytes)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'sourceInstance' => ->(obj) { [:source_instance, obj['sourceInstance']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'sourceInstanceProperties' => ->(obj) { [:source_instance_properties, GoogleInSpec::Compute::Property::MachineImageSourceInstanceProperties.new(obj['sourceInstanceProperties'], to_s)] },\n      'instanceProperties' => ->(obj) { [:instance_properties, GoogleInSpec::Compute::Property::MachineImageInstanceProperties.new(obj['instanceProperties'], to_s)] },\n      'savedDisks' => ->(obj) { [:saved_disks, GoogleInSpec::Compute::Property::MachineImageSavedDisksArray.parse(obj['savedDisks'], to_s)] },\n      'storageLocations' => ->(obj) { [:storage_locations, obj['storageLocations']] },\n      'machineImageEncryptionKey' => ->(obj) { [:machine_image_encryption_key, GoogleInSpec::Compute::Property::MachineImageMachineImageEncryptionKey.new(obj['machineImageEncryptionKey'], to_s)] },\n      'guestFlush' => ->(obj) { [:guest_flush, obj['guestFlush']] },\n      'sourceDiskEncryptionKeys' => ->(obj) { [:source_disk_encryption_keys, GoogleInSpec::Compute::Property::MachineImageSourceDiskEncryptionKeysArray.parse(obj['sourceDiskEncryptionKeys'], to_s)] },\n      'totalStorageBytes' => ->(obj) { [:total_storage_bytes, obj['totalStorageBytes']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/machineImages'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_machine_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/machinetype_accelerators'\nrequire 'google/compute/property/machinetype_deprecated'\nrequire 'google/compute/property/machinetype_scratch_disks'\n\n# A provider to manage Compute Engine resources.\nclass ComputeMachineType < GcpResourceBase\n  name 'google_compute_machine_type'\n  desc 'MachineType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :guest_cpus\n  attr_reader :memory_mb\n  attr_reader :image_space_gb\n  attr_reader :scratch_disks\n  attr_reader :maximum_persistent_disks\n  attr_reader :maximum_persistent_disks_size_gb\n  attr_reader :deprecated\n  attr_reader :zone\n  attr_reader :self_link\n  attr_reader :is_shared_cpu\n  attr_reader :accelerators\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @guest_cpus = @fetched['guestCpus']\n    @memory_mb = @fetched['memoryMb']\n    @image_space_gb = @fetched['imageSpaceGb']\n    @scratch_disks = GoogleInSpec::Compute::Property::MachineTypeScratchDisksArray.parse(@fetched['scratchDisks'], to_s)\n    @maximum_persistent_disks = @fetched['maximumPersistentDisks']\n    @maximum_persistent_disks_size_gb = @fetched['maximumPersistentDisksSizeGb']\n    @deprecated = GoogleInSpec::Compute::Property::MachineTypeDeprecated.new(@fetched['deprecated'], to_s)\n    @zone = @fetched['zone']\n    @self_link = @fetched['selfLink']\n    @is_shared_cpu = @fetched['isSharedCpu']\n    @accelerators = GoogleInSpec::Compute::Property::MachineTypeAcceleratorsArray.parse(@fetched['accelerators'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MachineType #{@params[:machineType]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/machineTypes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_machine_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeMachineTypes < GcpResourceBase\n  name 'google_compute_machine_types'\n  desc 'MachineType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:guest_cpus, field: :guest_cpus)\n  filter_table_config.add(:memory_mbs, field: :memory_mb)\n  filter_table_config.add(:image_space_gbs, field: :image_space_gb)\n  filter_table_config.add(:scratch_disks, field: :scratch_disks)\n  filter_table_config.add(:maximum_persistent_disks, field: :maximum_persistent_disks)\n  filter_table_config.add(:maximum_persistent_disks_size_gbs, field: :maximum_persistent_disks_size_gb)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:is_shared_cpus, field: :is_shared_cpu)\n  filter_table_config.add(:accelerators, field: :accelerators)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'guestCpus' => ->(obj) { [:guest_cpus, obj['guestCpus']] },\n      'memoryMb' => ->(obj) { [:memory_mb, obj['memoryMb']] },\n      'imageSpaceGb' => ->(obj) { [:image_space_gb, obj['imageSpaceGb']] },\n      'scratchDisks' => ->(obj) { [:scratch_disks, GoogleInSpec::Compute::Property::MachineTypeScratchDisksArray.parse(obj['scratchDisks'], to_s)] },\n      'maximumPersistentDisks' => ->(obj) { [:maximum_persistent_disks, obj['maximumPersistentDisks']] },\n      'maximumPersistentDisksSizeGb' => ->(obj) { [:maximum_persistent_disks_size_gb, obj['maximumPersistentDisksSizeGb']] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::MachineTypeDeprecated.new(obj['deprecated'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'isSharedCpu' => ->(obj) { [:is_shared_cpu, obj['isSharedCpu']] },\n      'accelerators' => ->(obj) { [:accelerators, GoogleInSpec::Compute::Property::MachineTypeAcceleratorsArray.parse(obj['accelerators'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/machineTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/network_peerings'\nrequire 'google/compute/property/network_routing_config'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetwork < GcpResourceBase\n  name 'google_compute_network'\n  desc 'Network'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :gateway_ipv4\n  attr_reader :id\n  attr_reader :name\n  attr_reader :subnetworks\n  attr_reader :auto_create_subnetworks\n  attr_reader :creation_timestamp\n  attr_reader :routing_config\n  attr_reader :peerings\n  attr_reader :mtu\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @gateway_ipv4 = @fetched['gatewayIPv4']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @subnetworks = @fetched['subnetworks']\n    @auto_create_subnetworks = @fetched['autoCreateSubnetworks']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @routing_config = GoogleInSpec::Compute::Property::NetworkRoutingConfig.new(@fetched['routingConfig'], to_s)\n    @peerings = GoogleInSpec::Compute::Property::NetworkPeeringsArray.parse(@fetched['peerings'], to_s)\n    @mtu = @fetched['mtu']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Network #{@params[:name]}\"\n  end\n\n  def legacy?\n    return false if @auto_create_subnetworks\n    return false if !defined?(@gateway_ipv4)\n    return false if !defined?(@network.ipv4_range)\n    return false if @ipv4_range.nil?\n    return false if @gateway_i_pv4.nil?\n    true\n  end\n\n  def creation_timestamp_date\n    @creation_timestamp\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/networkattachment_connection_endpoints'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetworkAttachment < GcpResourceBase\n  name 'google_compute_network_attachment'\n  desc 'NetworkAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :region\n  attr_reader :connection_preference\n  attr_reader :connection_endpoints\n  attr_reader :subnetworks\n  attr_reader :producer_reject_lists\n  attr_reader :producer_accept_lists\n  attr_reader :fingerprint\n  attr_reader :network\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @region = @fetched['region']\n    @connection_preference = @fetched['connectionPreference']\n    @connection_endpoints = GoogleInSpec::Compute::Property::NetworkAttachmentConnectionEndpointsArray.parse(@fetched['connectionEndpoints'], to_s)\n    @subnetworks = @fetched['subnetworks']\n    @producer_reject_lists = @fetched['producerRejectLists']\n    @producer_accept_lists = @fetched['producerAcceptLists']\n    @fingerprint = @fetched['fingerprint']\n    @network = @fetched['network']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NetworkAttachment #{@params[:networkAttachment]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/networkAttachments/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworkAttachments < GcpResourceBase\n  name 'google_compute_network_attachments'\n  desc 'NetworkAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:connection_preferences, field: :connection_preference)\n  filter_table_config.add(:connection_endpoints, field: :connection_endpoints)\n  filter_table_config.add(:subnetworks, field: :subnetworks)\n  filter_table_config.add(:producer_reject_lists, field: :producer_reject_lists)\n  filter_table_config.add(:producer_accept_lists, field: :producer_accept_lists)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:networks, field: :network)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'connectionPreference' => ->(obj) { [:connection_preference, obj['connectionPreference']] },\n      'connectionEndpoints' => ->(obj) { [:connection_endpoints, GoogleInSpec::Compute::Property::NetworkAttachmentConnectionEndpointsArray.parse(obj['connectionEndpoints'], to_s)] },\n      'subnetworks' => ->(obj) { [:subnetworks, obj['subnetworks']] },\n      'producerRejectLists' => ->(obj) { [:producer_reject_lists, obj['producerRejectLists']] },\n      'producerAcceptLists' => ->(obj) { [:producer_accept_lists, obj['producerAcceptLists']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/networkAttachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_edge_security_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetworkEdgeSecurityService < GcpResourceBase\n  name 'google_compute_network_edge_security_service'\n  desc 'NetworkEdgeSecurityService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :region\n  attr_reader :fingerprint\n  attr_reader :security_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @region = @fetched['region']\n    @fingerprint = @fetched['fingerprint']\n    @security_policy = @fetched['securityPolicy']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NetworkEdgeSecurityService #{@params[:networkEdgeSecurityService]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/networkEdgeSecurityServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_endpoint_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetworkEndpointGroup < GcpResourceBase\n  name 'google_compute_network_endpoint_group'\n  desc 'NetworkEndpointGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network_endpoint_type\n  attr_reader :size\n  attr_reader :network\n  attr_reader :subnetwork\n  attr_reader :default_port\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network_endpoint_type = @fetched['networkEndpointType']\n    @size = @fetched['size']\n    @network = @fetched['network']\n    @subnetwork = @fetched['subnetwork']\n    @default_port = @fetched['defaultPort']\n    @zone = @fetched['zone']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NetworkEndpointGroup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/networkEndpointGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_endpoint_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworkEndpointGroups < GcpResourceBase\n  name 'google_compute_network_endpoint_groups'\n  desc 'NetworkEndpointGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:network_endpoint_types, field: :network_endpoint_type)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:default_ports, field: :default_port)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'networkEndpointType' => ->(obj) { [:network_endpoint_type, obj['networkEndpointType']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'defaultPort' => ->(obj) { [:default_port, obj['defaultPort']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/networkEndpointGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_firewall_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworkFirewallPolicys < GcpResourceBase\n  name 'google_compute_network_firewall_policies'\n  desc 'NetworkFirewallPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:rules, field: :rules)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:associations, field: :associations)\n  filter_table_config.add(:rule_tuple_counts, field: :rule_tuple_count)\n  filter_table_config.add(:short_names, field: :short_name)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'rules' => ->(obj) { [:rules, GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesArray.parse(obj['rules'], to_s)] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'associations' => ->(obj) { [:associations, GoogleInSpec::Compute::Property::NetworkFirewallPolicyAssociationsArray.parse(obj['associations'], to_s)] },\n      'ruleTupleCount' => ->(obj) { [:rule_tuple_count, obj['ruleTupleCount']] },\n      'shortName' => ->(obj) { [:short_name, obj['shortName']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewallPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_network_firewall_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/networkfirewallpolicy_associations'\nrequire 'google/compute/property/networkfirewallpolicy_rules'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNetworkFirewallPolicy < GcpResourceBase\n  name 'google_compute_network_firewall_policy'\n  desc 'NetworkFirewallPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :rules\n  attr_reader :fingerprint\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :associations\n  attr_reader :rule_tuple_count\n  attr_reader :short_name\n  attr_reader :display_name\n  attr_reader :parent\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @rules = GoogleInSpec::Compute::Property::NetworkFirewallPolicyRulesArray.parse(@fetched['rules'], to_s)\n    @fingerprint = @fetched['fingerprint']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @associations = GoogleInSpec::Compute::Property::NetworkFirewallPolicyAssociationsArray.parse(@fetched['associations'], to_s)\n    @rule_tuple_count = @fetched['ruleTupleCount']\n    @short_name = @fetched['shortName']\n    @display_name = @fetched['displayName']\n    @parent = @fetched['parent']\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NetworkFirewallPolicy #{@params[:firewallPolicy]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/firewallPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_networks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNetworks < GcpResourceBase\n  name 'google_compute_networks'\n  desc 'Network plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:gateway_ipv4s, field: :gateway_ipv4)\n  filter_table_config.add(:network_ids, field: :network_id)\n  filter_table_config.add(:network_names, field: :network_name)\n  filter_table_config.add(:subnetworks, field: :subnetworks)\n  filter_table_config.add(:auto_create_subnetworks, field: :auto_create_subnetworks)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:routing_configs, field: :routing_config)\n  filter_table_config.add(:peerings, field: :peerings)\n  filter_table_config.add(:mtus, field: :mtu)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'gatewayIPv4' => ->(obj) { [:gateway_ipv4, obj['gatewayIPv4']] },\n      'id' => ->(obj) { [:network_id, obj['id']] },\n      'name' => ->(obj) { [:network_name, obj['name']] },\n      'subnetworks' => ->(obj) { [:subnetworks, obj['subnetworks']] },\n      'autoCreateSubnetworks' => ->(obj) { [:auto_create_subnetworks, obj['autoCreateSubnetworks']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'routingConfig' => ->(obj) { [:routing_config, GoogleInSpec::Compute::Property::NetworkRoutingConfig.new(obj['routingConfig'], to_s)] },\n      'peerings' => ->(obj) { [:peerings, GoogleInSpec::Compute::Property::NetworkPeeringsArray.parse(obj['peerings'], to_s)] },\n      'mtu' => ->(obj) { [:mtu, obj['mtu']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/networks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/nodegroup_autoscaling_policy'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNodeGroup < GcpResourceBase\n  name 'google_compute_node_group'\n  desc 'NodeGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :name\n  attr_reader :node_template\n  attr_reader :size\n  attr_reader :maintenance_policy\n  attr_reader :autoscaling_policy\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @node_template = @fetched['nodeTemplate']\n    @size = @fetched['size']\n    @maintenance_policy = @fetched['maintenancePolicy']\n    @autoscaling_policy = GoogleInSpec::Compute::Property::NodeGroupAutoscalingPolicy.new(@fetched['autoscalingPolicy'], to_s)\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodeGroup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNodeGroups < GcpResourceBase\n  name 'google_compute_node_groups'\n  desc 'NodeGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:node_templates, field: :node_template)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:maintenance_policies, field: :maintenance_policy)\n  filter_table_config.add(:autoscaling_policies, field: :autoscaling_policy)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'nodeTemplate' => ->(obj) { [:node_template, obj['nodeTemplate']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'maintenancePolicy' => ->(obj) { [:maintenance_policy, obj['maintenancePolicy']] },\n      'autoscalingPolicy' => ->(obj) { [:autoscaling_policy, GoogleInSpec::Compute::Property::NodeGroupAutoscalingPolicy.new(obj['autoscalingPolicy'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/nodetemplate_node_type_flexibility'\nrequire 'google/compute/property/nodetemplate_server_binding'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNodeTemplate < GcpResourceBase\n  name 'google_compute_node_template'\n  desc 'NodeTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :name\n  attr_reader :node_affinity_labels\n  attr_reader :node_type\n  attr_reader :node_type_flexibility\n  attr_reader :server_binding\n  attr_reader :cpu_overcommit_type\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @node_affinity_labels = @fetched['nodeAffinityLabels']\n    @node_type = @fetched['nodeType']\n    @node_type_flexibility = GoogleInSpec::Compute::Property::NodeTemplateNodeTypeFlexibility.new(@fetched['nodeTypeFlexibility'], to_s)\n    @server_binding = GoogleInSpec::Compute::Property::NodeTemplateServerBinding.new(@fetched['serverBinding'], to_s)\n    @cpu_overcommit_type = @fetched['cpuOvercommitType']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodeTemplate #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNodeTemplates < GcpResourceBase\n  name 'google_compute_node_templates'\n  desc 'NodeTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:node_affinity_labels, field: :node_affinity_labels)\n  filter_table_config.add(:node_types, field: :node_type)\n  filter_table_config.add(:node_type_flexibilities, field: :node_type_flexibility)\n  filter_table_config.add(:server_bindings, field: :server_binding)\n  filter_table_config.add(:cpu_overcommit_types, field: :cpu_overcommit_type)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'nodeAffinityLabels' => ->(obj) { [:node_affinity_labels, obj['nodeAffinityLabels']] },\n      'nodeType' => ->(obj) { [:node_type, obj['nodeType']] },\n      'nodeTypeFlexibility' => ->(obj) { [:node_type_flexibility, GoogleInSpec::Compute::Property::NodeTemplateNodeTypeFlexibility.new(obj['nodeTypeFlexibility'], to_s)] },\n      'serverBinding' => ->(obj) { [:server_binding, GoogleInSpec::Compute::Property::NodeTemplateServerBinding.new(obj['serverBinding'], to_s)] },\n      'cpuOvercommitType' => ->(obj) { [:cpu_overcommit_type, obj['cpuOvercommitType']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/nodeTemplates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/nodetype_deprecated'\n\n# A provider to manage Compute Engine resources.\nclass ComputeNodeType < GcpResourceBase\n  name 'google_compute_node_type'\n  desc 'NodeType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :cpu_platform\n  attr_reader :guest_cpus\n  attr_reader :memory_mb\n  attr_reader :local_ssd_gb\n  attr_reader :deprecated\n  attr_reader :zone\n  attr_reader :self_link\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @cpu_platform = @fetched['cpuPlatform']\n    @guest_cpus = @fetched['guestCpus']\n    @memory_mb = @fetched['memoryMb']\n    @local_ssd_gb = @fetched['localSsdGb']\n    @deprecated = GoogleInSpec::Compute::Property::NodeTypeDeprecated.new(@fetched['deprecated'], to_s)\n    @zone = @fetched['zone']\n    @self_link = @fetched['selfLink']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodeType #{@params[:nodeType]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeTypes/{{node_type}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_node_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeNodeTypes < GcpResourceBase\n  name 'google_compute_node_types'\n  desc 'NodeType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:cpu_platforms, field: :cpu_platform)\n  filter_table_config.add(:guest_cpus, field: :guest_cpus)\n  filter_table_config.add(:memory_mbs, field: :memory_mb)\n  filter_table_config.add(:local_ssd_gbs, field: :local_ssd_gb)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:self_links, field: :self_link)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'cpuPlatform' => ->(obj) { [:cpu_platform, obj['cpuPlatform']] },\n      'guestCpus' => ->(obj) { [:guest_cpus, obj['guestCpus']] },\n      'memoryMb' => ->(obj) { [:memory_mb, obj['memoryMb']] },\n      'localSsdGb' => ->(obj) { [:local_ssd_gb, obj['localSsdGb']] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::NodeTypeDeprecated.new(obj['deprecated'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/nodeTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_packet_mirroring.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/packetmirroring_collector_ilb'\nrequire 'google/compute/property/packetmirroring_filter'\nrequire 'google/compute/property/packetmirroring_mirrored_resources'\nrequire 'google/compute/property/packetmirroring_mirrored_resources_instances'\nrequire 'google/compute/property/packetmirroring_mirrored_resources_subnetworks'\nrequire 'google/compute/property/packetmirroring_network'\n\n# A provider to manage Compute Engine resources.\nclass ComputePacketMirroring < GcpResourceBase\n  name 'google_compute_packet_mirroring'\n  desc 'PacketMirroring'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :name\n  attr_reader :description\n  attr_reader :region\n  attr_reader :network\n  attr_reader :priority\n  attr_reader :collector_ilb\n  attr_reader :mirrored_resources\n  attr_reader :filter\n  attr_reader :enable\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @region = @fetched['region']\n    @network = GoogleInSpec::Compute::Property::PacketMirroringNetwork.new(@fetched['network'], to_s)\n    @priority = @fetched['priority']\n    @collector_ilb = GoogleInSpec::Compute::Property::PacketMirroringCollectorIlb.new(@fetched['collectorIlb'], to_s)\n    @mirrored_resources = GoogleInSpec::Compute::Property::PacketMirroringMirroredResources.new(@fetched['mirroredResources'], to_s)\n    @filter = GoogleInSpec::Compute::Property::PacketMirroringFilter.new(@fetched['filter'], to_s)\n    @enable = @fetched['enable']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"PacketMirroring #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/packetMirrorings/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_packet_mirrorings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputePacketMirrorings < GcpResourceBase\n  name 'google_compute_packet_mirrorings'\n  desc 'PacketMirroring plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:collector_ilbs, field: :collector_ilb)\n  filter_table_config.add(:mirrored_resources, field: :mirrored_resources)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:enables, field: :enable)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'network' => ->(obj) { [:network, GoogleInSpec::Compute::Property::PacketMirroringNetwork.new(obj['network'], to_s)] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'collectorIlb' => ->(obj) { [:collector_ilb, GoogleInSpec::Compute::Property::PacketMirroringCollectorIlb.new(obj['collectorIlb'], to_s)] },\n      'mirroredResources' => ->(obj) { [:mirrored_resources, GoogleInSpec::Compute::Property::PacketMirroringMirroredResources.new(obj['mirroredResources'], to_s)] },\n      'filter' => ->(obj) { [:filter, GoogleInSpec::Compute::Property::PacketMirroringFilter.new(obj['filter'], to_s)] },\n      'enable' => ->(obj) { [:enable, obj['enable']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/packetMirrorings'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_project_info.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/projectinfo_common_instance_metadata'\nrequire 'google/compute/property/projectinfo_common_instance_metadata_items'\nrequire 'google/compute/property/projectinfo_quotas'\n\n# A provider to manage Compute Engine resources.\nclass ComputeProjectInfo < GcpResourceBase\n  name 'google_compute_project_info'\n  desc 'ProjectInfo'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :common_instance_metadata\n  attr_reader :enabled_features\n  attr_reader :default_service_account\n  attr_reader :xpn_project_status\n  attr_reader :default_network_tier\n  attr_reader :quotas\n  attr_reader :creation_timestamp\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @common_instance_metadata = GoogleInSpec::Compute::Property::ProjectInfoCommonInstanceMetadata.new(@fetched['commonInstanceMetadata'], to_s)\n    @enabled_features = @fetched['enabledFeatures']\n    @default_service_account = @fetched['defaultServiceAccount']\n    @xpn_project_status = @fetched['xpnProjectStatus']\n    @default_network_tier = @fetched['defaultNetworkTier']\n    @quotas = GoogleInSpec::Compute::Property::ProjectInfoQuotasArray.parse(@fetched['quotas'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectInfo #{@params[:project]}\"\n  end\n\n  def has_enabled_oslogin?\n    @common_instance_metadata&.items&.each do |element|\n      return true if element.key=='enable-oslogin' and element.value.casecmp('true').zero?\n    end\n    false\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_public_delegated_prefix.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputePublicDelegatedPrefix < GcpResourceBase\n  name 'google_compute_public_delegated_prefix'\n  desc 'PublicDelegatedPrefix'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :ip_cidr_range\n  attr_reader :parent_prefix\n  attr_reader :is_live_migration\n  attr_reader :fingerprint\n  attr_reader :status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @ip_cidr_range = @fetched['ipCidrRange']\n    @parent_prefix = @fetched['parentPrefix']\n    @is_live_migration = @fetched['isLiveMigration']\n    @fingerprint = @fetched['fingerprint']\n    @status = @fetched['status']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"PublicDelegatedPrefix #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/publicDelegatedPrefixes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_public_delegated_prefixes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputePublicDelegatedPrefixs < GcpResourceBase\n  name 'google_compute_public_delegated_prefixes'\n  desc 'PublicDelegatedPrefix plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ip_cidr_ranges, field: :ip_cidr_range)\n  filter_table_config.add(:parent_prefixes, field: :parent_prefix)\n  filter_table_config.add(:is_live_migrations, field: :is_live_migration)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:statuses, field: :status)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'ipCidrRange' => ->(obj) { [:ip_cidr_range, obj['ipCidrRange']] },\n      'parentPrefix' => ->(obj) { [:parent_prefix, obj['parentPrefix']] },\n      'isLiveMigration' => ->(obj) { [:is_live_migration, obj['isLiveMigration']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/publicDelegatedPrefixes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/region_deprecated'\nrequire 'google/compute/property/region_quotas'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegion < GcpResourceBase\n  name 'google_compute_region'\n  desc 'Region'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :quotas\n  attr_reader :status\n  attr_reader :zones\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @deprecated = GoogleInSpec::Compute::Property::RegionDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @quotas = GoogleInSpec::Compute::Property::RegionQuotasArray.parse(@fetched['quotas'], to_s)\n    @status = @fetched['status']\n    @zones = @fetched['zones']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Region #{@params[:name]}\"\n  end\n\n  # helper for returning a list of zone short names rather than fully qualified URLs e.g.\n  #   https://www.googleapis.com/compute/v1/projects/spaterson-project/zones/asia-east1-a\n  def zone_names\n    return [] if !exists?\n    @zones.map { |zone| zone.split('/').last }\n  end\n\n  def up?\n    return false if !exists?\n    @status == 'UP'\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_autoscaler.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_cpu_utilization'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_custom_metric_utilizations'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_load_balancing_utilization'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_down_control_max_scaled_down_replicas'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scale_in_control_max_scaled_in_replicas'\nrequire 'google/compute/property/regionautoscaler_autoscaling_policy_scaling_schedules'\nrequire 'google/compute/property/regionautoscaler_scaling_schedule_status'\nrequire 'google/compute/property/regionautoscaler_status_details'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionAutoscaler < GcpResourceBase\n  name 'google_compute_region_autoscaler'\n  desc 'RegionAutoscaler'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :target\n  attr_reader :autoscaling_policy\n  attr_reader :zone\n  attr_reader :region\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :status\n  attr_reader :status_details\n  attr_reader :recommended_size\n  attr_reader :scaling_schedule_status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @target = @fetched['target']\n    @autoscaling_policy = GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicy.new(@fetched['autoscalingPolicy'], to_s)\n    @zone = @fetched['zone']\n    @region = @fetched['region']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @status = @fetched['status']\n    @status_details = GoogleInSpec::Compute::Property::RegionAutoscalerStatusDetailsArray.parse(@fetched['statusDetails'], to_s)\n    @recommended_size = @fetched['recommendedSize']\n    @scaling_schedule_status = GoogleInSpec::Compute::Property::RegionAutoscalerScalingScheduleStatus.new(@fetched['scalingScheduleStatus'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionAutoscaler #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/autoscalers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_autoscalers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionAutoscalers < GcpResourceBase\n  name 'google_compute_region_autoscalers'\n  desc 'RegionAutoscaler plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:autoscaling_policies, field: :autoscaling_policy)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_details, field: :status_details)\n  filter_table_config.add(:recommended_sizes, field: :recommended_size)\n  filter_table_config.add(:scaling_schedule_statuses, field: :scaling_schedule_status)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'target' => ->(obj) { [:target, obj['target']] },\n      'autoscalingPolicy' => ->(obj) { [:autoscaling_policy, GoogleInSpec::Compute::Property::RegionAutoscalerAutoscalingPolicy.new(obj['autoscalingPolicy'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusDetails' => ->(obj) { [:status_details, GoogleInSpec::Compute::Property::RegionAutoscalerStatusDetailsArray.parse(obj['statusDetails'], to_s)] },\n      'recommendedSize' => ->(obj) { [:recommended_size, obj['recommendedSize']] },\n      'scalingScheduleStatus' => ->(obj) { [:scaling_schedule_status, GoogleInSpec::Compute::Property::RegionAutoscalerScalingScheduleStatus.new(obj['scalingScheduleStatus'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/autoscalers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_backend_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionbackendservice_backends'\nrequire 'google/compute/property/regionbackendservice_cdn_policy'\nrequire 'google/compute/property/regionbackendservice_cdn_policy_cache_key_policy'\nrequire 'google/compute/property/regionbackendservice_cdn_policy_negative_caching_policy'\nrequire 'google/compute/property/regionbackendservice_circuit_breakers'\nrequire 'google/compute/property/regionbackendservice_circuit_breakers_connect_timeout'\nrequire 'google/compute/property/regionbackendservice_connection_draining'\nrequire 'google/compute/property/regionbackendservice_consistent_hash'\nrequire 'google/compute/property/regionbackendservice_consistent_hash_http_cookie'\nrequire 'google/compute/property/regionbackendservice_consistent_hash_http_cookie_ttl'\nrequire 'google/compute/property/regionbackendservice_failover_policy'\nrequire 'google/compute/property/regionbackendservice_log_config'\nrequire 'google/compute/property/regionbackendservice_outlier_detection'\nrequire 'google/compute/property/regionbackendservice_outlier_detection_base_ejection_time'\nrequire 'google/compute/property/regionbackendservice_outlier_detection_interval'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionBackendService < GcpResourceBase\n  name 'google_compute_region_backend_service'\n  desc 'RegionBackendService'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :affinity_cookie_ttl_sec\n  attr_reader :backends\n  attr_reader :circuit_breakers\n  attr_reader :consistent_hash\n  attr_reader :cdn_policy\n  attr_reader :connection_draining\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :failover_policy\n  attr_reader :enable_cdn\n  attr_reader :fingerprint\n  attr_reader :health_checks\n  attr_reader :id\n  attr_reader :load_balancing_scheme\n  attr_reader :locality_lb_policy\n  attr_reader :name\n  attr_reader :outlier_detection\n  attr_reader :port_name\n  attr_reader :protocol\n  attr_reader :session_affinity\n  attr_reader :timeout_sec\n  attr_reader :log_config\n  attr_reader :network\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @affinity_cookie_ttl_sec = @fetched['affinityCookieTtlSec']\n    @backends = GoogleInSpec::Compute::Property::RegionBackendServiceBackendsArray.parse(@fetched['backends'], to_s)\n    @circuit_breakers = GoogleInSpec::Compute::Property::RegionBackendServiceCircuitBreakers.new(@fetched['circuitBreakers'], to_s)\n    @consistent_hash = GoogleInSpec::Compute::Property::RegionBackendServiceConsistentHash.new(@fetched['consistentHash'], to_s)\n    @cdn_policy = GoogleInSpec::Compute::Property::RegionBackendServiceCdnPolicy.new(@fetched['cdnPolicy'], to_s)\n    @connection_draining = GoogleInSpec::Compute::Property::RegionBackendServiceConnectionDraining.new(@fetched['connectionDraining'], to_s)\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @failover_policy = GoogleInSpec::Compute::Property::RegionBackendServiceFailoverPolicy.new(@fetched['failoverPolicy'], to_s)\n    @enable_cdn = @fetched['enableCDN']\n    @fingerprint = @fetched['fingerprint']\n    @health_checks = @fetched['healthChecks']\n    @id = @fetched['id']\n    @load_balancing_scheme = @fetched['loadBalancingScheme']\n    @locality_lb_policy = @fetched['localityLbPolicy']\n    @name = @fetched['name']\n    @outlier_detection = GoogleInSpec::Compute::Property::RegionBackendServiceOutlierDetection.new(@fetched['outlierDetection'], to_s)\n    @port_name = @fetched['portName']\n    @protocol = @fetched['protocol']\n    @session_affinity = @fetched['sessionAffinity']\n    @timeout_sec = @fetched['timeoutSec']\n    @log_config = GoogleInSpec::Compute::Property::RegionBackendServiceLogConfig.new(@fetched['logConfig'], to_s)\n    @network = @fetched['network']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionBackendService #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/backendServices/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_backend_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionBackendServices < GcpResourceBase\n  name 'google_compute_region_backend_services'\n  desc 'RegionBackendService plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:affinity_cookie_ttl_secs, field: :affinity_cookie_ttl_sec)\n  filter_table_config.add(:backends, field: :backends)\n  filter_table_config.add(:circuit_breakers, field: :circuit_breakers)\n  filter_table_config.add(:consistent_hashes, field: :consistent_hash)\n  filter_table_config.add(:cdn_policies, field: :cdn_policy)\n  filter_table_config.add(:connection_drainings, field: :connection_draining)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:failover_policies, field: :failover_policy)\n  filter_table_config.add(:enable_cdns, field: :enable_cdn)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:health_checks, field: :health_checks)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:load_balancing_schemes, field: :load_balancing_scheme)\n  filter_table_config.add(:locality_lb_policies, field: :locality_lb_policy)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:outlier_detections, field: :outlier_detection)\n  filter_table_config.add(:port_names, field: :port_name)\n  filter_table_config.add(:protocols, field: :protocol)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:log_configs, field: :log_config)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'affinityCookieTtlSec' => ->(obj) { [:affinity_cookie_ttl_sec, obj['affinityCookieTtlSec']] },\n      'backends' => ->(obj) { [:backends, GoogleInSpec::Compute::Property::RegionBackendServiceBackendsArray.parse(obj['backends'], to_s)] },\n      'circuitBreakers' => ->(obj) { [:circuit_breakers, GoogleInSpec::Compute::Property::RegionBackendServiceCircuitBreakers.new(obj['circuitBreakers'], to_s)] },\n      'consistentHash' => ->(obj) { [:consistent_hash, GoogleInSpec::Compute::Property::RegionBackendServiceConsistentHash.new(obj['consistentHash'], to_s)] },\n      'cdnPolicy' => ->(obj) { [:cdn_policy, GoogleInSpec::Compute::Property::RegionBackendServiceCdnPolicy.new(obj['cdnPolicy'], to_s)] },\n      'connectionDraining' => ->(obj) { [:connection_draining, GoogleInSpec::Compute::Property::RegionBackendServiceConnectionDraining.new(obj['connectionDraining'], to_s)] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'failoverPolicy' => ->(obj) { [:failover_policy, GoogleInSpec::Compute::Property::RegionBackendServiceFailoverPolicy.new(obj['failoverPolicy'], to_s)] },\n      'enableCDN' => ->(obj) { [:enable_cdn, obj['enableCDN']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'healthChecks' => ->(obj) { [:health_checks, obj['healthChecks']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'loadBalancingScheme' => ->(obj) { [:load_balancing_scheme, obj['loadBalancingScheme']] },\n      'localityLbPolicy' => ->(obj) { [:locality_lb_policy, obj['localityLbPolicy']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'outlierDetection' => ->(obj) { [:outlier_detection, GoogleInSpec::Compute::Property::RegionBackendServiceOutlierDetection.new(obj['outlierDetection'], to_s)] },\n      'portName' => ->(obj) { [:port_name, obj['portName']] },\n      'protocol' => ->(obj) { [:protocol, obj['protocol']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::RegionBackendServiceLogConfig.new(obj['logConfig'], to_s)] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/backendServices'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_commitment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regioncommitment_license_resource'\nrequire 'google/compute/property/regioncommitment_reservations'\nrequire 'google/compute/property/regioncommitment_resource_status'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_canceled_commitment'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_cap'\nrequire 'google/compute/property/regioncommitment_resource_status_cancellation_information_cancellation_fee'\nrequire 'google/compute/property/regioncommitment_resources'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionCommitment < GcpResourceBase\n  name 'google_compute_region_commitment'\n  desc 'RegionCommitment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :region\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :plan\n  attr_reader :start_timestamp\n  attr_reader :end_timestamp\n  attr_reader :resources\n  attr_reader :type\n  attr_reader :reservations\n  attr_reader :category\n  attr_reader :license_resource\n  attr_reader :auto_renew\n  attr_reader :merge_source_commitments\n  attr_reader :split_source_commitment\n  attr_reader :resource_status\n  attr_reader :existing_reservations\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @region = @fetched['region']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @plan = @fetched['plan']\n    @start_timestamp = @fetched['startTimestamp']\n    @end_timestamp = @fetched['endTimestamp']\n    @resources = GoogleInSpec::Compute::Property::RegionCommitmentResourcesArray.parse(@fetched['resources'], to_s)\n    @type = @fetched['type']\n    @reservations = GoogleInSpec::Compute::Property::RegionCommitmentReservationsArray.parse(@fetched['reservations'], to_s)\n    @category = @fetched['category']\n    @license_resource = GoogleInSpec::Compute::Property::RegionCommitmentLicenseResource.new(@fetched['licenseResource'], to_s)\n    @auto_renew = @fetched['autoRenew']\n    @merge_source_commitments = @fetched['mergeSourceCommitments']\n    @split_source_commitment = @fetched['splitSourceCommitment']\n    @resource_status = GoogleInSpec::Compute::Property::RegionCommitmentResourceStatus.new(@fetched['resourceStatus'], to_s)\n    @existing_reservations = @fetched['existingReservations']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionCommitment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/commitments/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_commitments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionCommitments < GcpResourceBase\n  name 'google_compute_region_commitments'\n  desc 'RegionCommitment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:plans, field: :plan)\n  filter_table_config.add(:start_timestamps, field: :start_timestamp)\n  filter_table_config.add(:end_timestamps, field: :end_timestamp)\n  filter_table_config.add(:resources, field: :resources)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:reservations, field: :reservations)\n  filter_table_config.add(:categories, field: :category)\n  filter_table_config.add(:license_resources, field: :license_resource)\n  filter_table_config.add(:auto_renews, field: :auto_renew)\n  filter_table_config.add(:merge_source_commitments, field: :merge_source_commitments)\n  filter_table_config.add(:split_source_commitments, field: :split_source_commitment)\n  filter_table_config.add(:resource_statuses, field: :resource_status)\n  filter_table_config.add(:existing_reservations, field: :existing_reservations)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'plan' => ->(obj) { [:plan, obj['plan']] },\n      'startTimestamp' => ->(obj) { [:start_timestamp, obj['startTimestamp']] },\n      'endTimestamp' => ->(obj) { [:end_timestamp, obj['endTimestamp']] },\n      'resources' => ->(obj) { [:resources, GoogleInSpec::Compute::Property::RegionCommitmentResourcesArray.parse(obj['resources'], to_s)] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'reservations' => ->(obj) { [:reservations, GoogleInSpec::Compute::Property::RegionCommitmentReservationsArray.parse(obj['reservations'], to_s)] },\n      'category' => ->(obj) { [:category, obj['category']] },\n      'licenseResource' => ->(obj) { [:license_resource, GoogleInSpec::Compute::Property::RegionCommitmentLicenseResource.new(obj['licenseResource'], to_s)] },\n      'autoRenew' => ->(obj) { [:auto_renew, obj['autoRenew']] },\n      'mergeSourceCommitments' => ->(obj) { [:merge_source_commitments, obj['mergeSourceCommitments']] },\n      'splitSourceCommitment' => ->(obj) { [:split_source_commitment, obj['splitSourceCommitment']] },\n      'resourceStatus' => ->(obj) { [:resource_status, GoogleInSpec::Compute::Property::RegionCommitmentResourceStatus.new(obj['resourceStatus'], to_s)] },\n      'existingReservations' => ->(obj) { [:existing_reservations, obj['existingReservations']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/commitments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_disk_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regiondisktype_deprecated'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionDiskType < GcpResourceBase\n  name 'google_compute_region_disk_type'\n  desc 'RegionDiskType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :valid_disk_size\n  attr_reader :deprecated\n  attr_reader :zone\n  attr_reader :self_link\n  attr_reader :default_disk_size_gb\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @valid_disk_size = @fetched['validDiskSize']\n    @deprecated = GoogleInSpec::Compute::Property::RegionDiskTypeDeprecated.new(@fetched['deprecated'], to_s)\n    @zone = @fetched['zone']\n    @self_link = @fetched['selfLink']\n    @default_disk_size_gb = @fetched['defaultDiskSizeGb']\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionDiskType #{@params[:disk_type]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/diskTypes/{{disk_type}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_disk_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionDiskTypes < GcpResourceBase\n  name 'google_compute_region_disk_types'\n  desc 'RegionDiskType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:valid_disk_sizes, field: :valid_disk_size)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:default_disk_size_gbs, field: :default_disk_size_gb)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'validDiskSize' => ->(obj) { [:valid_disk_size, obj['validDiskSize']] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::RegionDiskTypeDeprecated.new(obj['deprecated'], to_s)] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'defaultDiskSizeGb' => ->(obj) { [:default_disk_size_gb, obj['defaultDiskSizeGb']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/diskTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_health_check.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionhealthcheck_grpc_health_check'\nrequire 'google/compute/property/regionhealthcheck_http2_health_check'\nrequire 'google/compute/property/regionhealthcheck_http_health_check'\nrequire 'google/compute/property/regionhealthcheck_https_health_check'\nrequire 'google/compute/property/regionhealthcheck_log_config'\nrequire 'google/compute/property/regionhealthcheck_ssl_health_check'\nrequire 'google/compute/property/regionhealthcheck_tcp_health_check'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionHealthCheck < GcpResourceBase\n  name 'google_compute_region_health_check'\n  desc 'RegionHealthCheck'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :check_interval_sec\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :healthy_threshold\n  attr_reader :id\n  attr_reader :name\n  attr_reader :unhealthy_threshold\n  attr_reader :timeout_sec\n  attr_reader :type\n  attr_reader :http_health_check\n  attr_reader :https_health_check\n  attr_reader :tcp_health_check\n  attr_reader :ssl_health_check\n  attr_reader :http2_health_check\n  attr_reader :grpc_health_check\n  attr_reader :log_config\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @check_interval_sec = @fetched['checkIntervalSec']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @healthy_threshold = @fetched['healthyThreshold']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @unhealthy_threshold = @fetched['unhealthyThreshold']\n    @timeout_sec = @fetched['timeoutSec']\n    @type = @fetched['type']\n    @http_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckHttpHealthCheck.new(@fetched['httpHealthCheck'], to_s)\n    @https_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckHttpsHealthCheck.new(@fetched['httpsHealthCheck'], to_s)\n    @tcp_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckTcpHealthCheck.new(@fetched['tcpHealthCheck'], to_s)\n    @ssl_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckSslHealthCheck.new(@fetched['sslHealthCheck'], to_s)\n    @http2_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckHttp2HealthCheck.new(@fetched['http2HealthCheck'], to_s)\n    @grpc_health_check = GoogleInSpec::Compute::Property::RegionHealthCheckGrpcHealthCheck.new(@fetched['grpcHealthCheck'], to_s)\n    @log_config = GoogleInSpec::Compute::Property::RegionHealthCheckLogConfig.new(@fetched['logConfig'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionHealthCheck #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/healthChecks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_health_checks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionHealthChecks < GcpResourceBase\n  name 'google_compute_region_health_checks'\n  desc 'RegionHealthCheck plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:check_interval_secs, field: :check_interval_sec)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:healthy_thresholds, field: :healthy_threshold)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:unhealthy_thresholds, field: :unhealthy_threshold)\n  filter_table_config.add(:timeout_secs, field: :timeout_sec)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:http_health_checks, field: :http_health_check)\n  filter_table_config.add(:https_health_checks, field: :https_health_check)\n  filter_table_config.add(:tcp_health_checks, field: :tcp_health_check)\n  filter_table_config.add(:ssl_health_checks, field: :ssl_health_check)\n  filter_table_config.add(:http2_health_checks, field: :http2_health_check)\n  filter_table_config.add(:grpc_health_checks, field: :grpc_health_check)\n  filter_table_config.add(:log_configs, field: :log_config)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'checkIntervalSec' => ->(obj) { [:check_interval_sec, obj['checkIntervalSec']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'healthyThreshold' => ->(obj) { [:healthy_threshold, obj['healthyThreshold']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'unhealthyThreshold' => ->(obj) { [:unhealthy_threshold, obj['unhealthyThreshold']] },\n      'timeoutSec' => ->(obj) { [:timeout_sec, obj['timeoutSec']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'httpHealthCheck' => ->(obj) { [:http_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckHttpHealthCheck.new(obj['httpHealthCheck'], to_s)] },\n      'httpsHealthCheck' => ->(obj) { [:https_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckHttpsHealthCheck.new(obj['httpsHealthCheck'], to_s)] },\n      'tcpHealthCheck' => ->(obj) { [:tcp_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckTcpHealthCheck.new(obj['tcpHealthCheck'], to_s)] },\n      'sslHealthCheck' => ->(obj) { [:ssl_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckSslHealthCheck.new(obj['sslHealthCheck'], to_s)] },\n      'http2HealthCheck' => ->(obj) { [:http2_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckHttp2HealthCheck.new(obj['http2HealthCheck'], to_s)] },\n      'grpcHealthCheck' => ->(obj) { [:grpc_health_check, GoogleInSpec::Compute::Property::RegionHealthCheckGrpcHealthCheck.new(obj['grpcHealthCheck'], to_s)] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::RegionHealthCheckLogConfig.new(obj['logConfig'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/healthChecks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_instance_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regioninstancegroup_named_ports'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionInstanceGroup < GcpResourceBase\n  name 'google_compute_region_instance_group'\n  desc 'RegionInstanceGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :fingerprint\n  attr_reader :network\n  attr_reader :zone\n  attr_reader :size\n  attr_reader :region\n  attr_reader :named_ports\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @fingerprint = @fetched['fingerprint']\n    @network = @fetched['network']\n    @zone = @fetched['zone']\n    @size = @fetched['size']\n    @region = @fetched['region']\n    @named_ports = GoogleInSpec::Compute::Property::RegionInstanceGroupNamedPortsArray.parse(@fetched['namedPorts'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionInstanceGroup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/instanceGroups/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_instance_group_manager.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regioninstancegroupmanager_auto_healing_policies'\nrequire 'google/compute/property/regioninstancegroupmanager_current_actions'\nrequire 'google/compute/property/regioninstancegroupmanager_named_ports'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionInstanceGroupManager < GcpResourceBase\n  name 'google_compute_region_instance_group_manager'\n  desc 'RegionInstanceGroupManager'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :base_instance_name\n  attr_reader :creation_timestamp\n  attr_reader :current_actions\n  attr_reader :description\n  attr_reader :id\n  attr_reader :instance_group\n  attr_reader :instance_template\n  attr_reader :name\n  attr_reader :named_ports\n  attr_reader :target_pools\n  attr_reader :target_size\n  attr_reader :auto_healing_policies\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @base_instance_name = @fetched['baseInstanceName']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @current_actions = GoogleInSpec::Compute::Property::RegionInstanceGroupManagerCurrentActions.new(@fetched['currentActions'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @instance_group = @fetched['instanceGroup']\n    @instance_template = @fetched['instanceTemplate']\n    @name = @fetched['name']\n    @named_ports = GoogleInSpec::Compute::Property::RegionInstanceGroupManagerNamedPortsArray.parse(@fetched['namedPorts'], to_s)\n    @target_pools = @fetched['targetPools']\n    @target_size = @fetched['targetSize']\n    @auto_healing_policies = GoogleInSpec::Compute::Property::RegionInstanceGroupManagerAutoHealingPoliciesArray.parse(@fetched['autoHealingPolicies'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionInstanceGroupManager #{@params[:name]}\"\n  end\n\n  def port_name\n    find_named_ports(:name)\n  end\n  RSpec::Matchers.alias_matcher :has_port_name, :be_allow_port_name\n\n  def port_value\n    find_named_ports(:port)\n  end\n  RSpec::Matchers.alias_matcher :has_port_value, :be_allow_port_value\n\n  def find_named_ports(key = :name)\n    # check all name/port values for a match\n    return false if !defined?(@named_ports) || @named_ports.nil?\n    @named_ports.each do |named_port|\n      next if !defined?(named_port.item[key]) || named_port.item[key].nil?\n      return named_port.item[key]\n    end\n    false\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_instance_group_managers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionInstanceGroupManagers < GcpResourceBase\n  name 'google_compute_region_instance_group_managers'\n  desc 'RegionInstanceGroupManager plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:base_instance_names, field: :base_instance_name)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:current_actions, field: :current_actions)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:instance_group_manager_ids, field: :instance_group_manager_id)\n  filter_table_config.add(:instance_groups, field: :instance_group)\n  filter_table_config.add(:instance_templates, field: :instance_template)\n  filter_table_config.add(:instance_group_manager_names, field: :instance_group_manager_name)\n  filter_table_config.add(:named_ports, field: :named_ports)\n  filter_table_config.add(:target_pools, field: :target_pools)\n  filter_table_config.add(:target_sizes, field: :target_size)\n  filter_table_config.add(:auto_healing_policies, field: :auto_healing_policies)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'baseInstanceName' => ->(obj) { [:base_instance_name, obj['baseInstanceName']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'currentActions' => ->(obj) { [:current_actions, GoogleInSpec::Compute::Property::RegionInstanceGroupManagerCurrentActions.new(obj['currentActions'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:instance_group_manager_id, obj['id']] },\n      'instanceGroup' => ->(obj) { [:instance_group, obj['instanceGroup']] },\n      'instanceTemplate' => ->(obj) { [:instance_template, obj['instanceTemplate']] },\n      'name' => ->(obj) { [:instance_group_manager_name, obj['name']] },\n      'namedPorts' => ->(obj) { [:named_ports, GoogleInSpec::Compute::Property::RegionInstanceGroupManagerNamedPortsArray.parse(obj['namedPorts'], to_s)] },\n      'targetPools' => ->(obj) { [:target_pools, obj['targetPools']] },\n      'targetSize' => ->(obj) { [:target_size, obj['targetSize']] },\n      'autoHealingPolicies' => ->(obj) { [:auto_healing_policies, GoogleInSpec::Compute::Property::RegionInstanceGroupManagerAutoHealingPoliciesArray.parse(obj['autoHealingPolicies'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/instanceGroupManagers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_instance_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionInstanceGroups < GcpResourceBase\n  name 'google_compute_region_instance_groups'\n  desc 'RegionInstanceGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:named_ports, field: :named_ports)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'namedPorts' => ->(obj) { [:named_ports, GoogleInSpec::Compute::Property::RegionInstanceGroupNamedPortsArray.parse(obj['namedPorts'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/instanceGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_network_endpoint_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionnetworkendpointgroup_annotations'\nrequire 'google/compute/property/regionnetworkendpointgroup_app_engine'\nrequire 'google/compute/property/regionnetworkendpointgroup_cloud_function'\nrequire 'google/compute/property/regionnetworkendpointgroup_cloud_run'\nrequire 'google/compute/property/regionnetworkendpointgroup_psc_data'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionNetworkEndpointGroup < GcpResourceBase\n  name 'google_compute_region_network_endpoint_group'\n  desc 'RegionNetworkEndpointGroup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network_endpoint_type\n  attr_reader :size\n  attr_reader :region\n  attr_reader :zone\n  attr_reader :network\n  attr_reader :subnetwork\n  attr_reader :default_port\n  attr_reader :annotations\n  attr_reader :cloud_run\n  attr_reader :app_engine\n  attr_reader :cloud_function\n  attr_reader :psc_target_service\n  attr_reader :psc_data\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network_endpoint_type = @fetched['networkEndpointType']\n    @size = @fetched['size']\n    @region = @fetched['region']\n    @zone = @fetched['zone']\n    @network = @fetched['network']\n    @subnetwork = @fetched['subnetwork']\n    @default_port = @fetched['defaultPort']\n    @annotations = GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupAnnotations.new(@fetched['annotations'], to_s)\n    @cloud_run = GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupCloudRun.new(@fetched['cloudRun'], to_s)\n    @app_engine = GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupAppEngine.new(@fetched['appEngine'], to_s)\n    @cloud_function = GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupCloudFunction.new(@fetched['cloudFunction'], to_s)\n    @psc_target_service = @fetched['pscTargetService']\n    @psc_data = GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupPscData.new(@fetched['pscData'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionNetworkEndpointGroup #{@params[:networkEndpointGroup]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{network_endpoint_group}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_network_endpoint_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionNetworkEndpointGroups < GcpResourceBase\n  name 'google_compute_region_network_endpoint_groups'\n  desc 'RegionNetworkEndpointGroup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:network_endpoint_types, field: :network_endpoint_type)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:default_ports, field: :default_port)\n  filter_table_config.add(:annotations, field: :annotations)\n  filter_table_config.add(:cloud_runs, field: :cloud_run)\n  filter_table_config.add(:app_engines, field: :app_engine)\n  filter_table_config.add(:cloud_functions, field: :cloud_function)\n  filter_table_config.add(:psc_target_services, field: :psc_target_service)\n  filter_table_config.add(:psc_data, field: :psc_data)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'networkEndpointType' => ->(obj) { [:network_endpoint_type, obj['networkEndpointType']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'defaultPort' => ->(obj) { [:default_port, obj['defaultPort']] },\n      'annotations' => ->(obj) { [:annotations, GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupAnnotations.new(obj['annotations'], to_s)] },\n      'cloudRun' => ->(obj) { [:cloud_run, GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupCloudRun.new(obj['cloudRun'], to_s)] },\n      'appEngine' => ->(obj) { [:app_engine, GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupAppEngine.new(obj['appEngine'], to_s)] },\n      'cloudFunction' => ->(obj) { [:cloud_function, GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupCloudFunction.new(obj['cloudFunction'], to_s)] },\n      'pscTargetService' => ->(obj) { [:psc_target_service, obj['pscTargetService']] },\n      'pscData' => ->(obj) { [:psc_data, GoogleInSpec::Compute::Property::RegionNetworkEndpointGroupPscData.new(obj['pscData'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/networkEndpointGroups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_operation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionOperation < GcpResourceBase\n  name 'google_compute_region_operation'\n  desc 'RegionOperation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :target_id\n  attr_reader :status\n  attr_reader :user\n  attr_reader :insert_time\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :progress\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @target_id = @fetched['targetId']\n    @status = @fetched['status']\n    @user = @fetched['user']\n    @insert_time = @fetched['insertTime']\n    @start_time = @fetched['startTime']\n    @end_time = @fetched['endTime']\n    @progress = @fetched['progress']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionOperation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/operations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_operations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionOperations < GcpResourceBase\n  name 'google_compute_region_operations'\n  desc 'RegionOperation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:target_ids, field: :target_id)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:users, field: :user)\n  filter_table_config.add(:insert_times, field: :insert_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:progresses, field: :progress)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'targetId' => ->(obj) { [:target_id, obj['targetId']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'user' => ->(obj) { [:user, obj['user']] },\n      'insertTime' => ->(obj) { [:insert_time, obj['insertTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'progress' => ->(obj) { [:progress, obj['progress']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/operations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_security_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionSecurityPolicys < GcpResourceBase\n  name 'google_compute_region_security_policies'\n  desc 'RegionSecurityPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:user_defined_fields, field: :user_defined_fields)\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:rules, field: :rules)\n  filter_table_config.add(:cloud_armor_configs, field: :cloud_armor_config)\n  filter_table_config.add(:adaptive_protection_configs, field: :adaptive_protection_config)\n  filter_table_config.add(:ddos_protection_configs, field: :ddos_protection_config)\n  filter_table_config.add(:advanced_options_configs, field: :advanced_options_config)\n  filter_table_config.add(:recaptcha_options_configs, field: :recaptcha_options_config)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:associations, field: :associations)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:rule_tuple_counts, field: :rule_tuple_count)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'userDefinedFields' => ->(obj) { [:user_defined_fields, GoogleInSpec::Compute::Property::RegionSecurityPolicyUserDefinedFieldsArray.parse(obj['userDefinedFields'], to_s)] },\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'rules' => ->(obj) { [:rules, GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesArray.parse(obj['rules'], to_s)] },\n      'cloudArmorConfig' => ->(obj) { [:cloud_armor_config, GoogleInSpec::Compute::Property::RegionSecurityPolicyCloudArmorConfig.new(obj['cloudArmorConfig'], to_s)] },\n      'adaptiveProtectionConfig' => ->(obj) { [:adaptive_protection_config, GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfig.new(obj['adaptiveProtectionConfig'], to_s)] },\n      'ddosProtectionConfig' => ->(obj) { [:ddos_protection_config, GoogleInSpec::Compute::Property::RegionSecurityPolicyDdosProtectionConfig.new(obj['ddosProtectionConfig'], to_s)] },\n      'advancedOptionsConfig' => ->(obj) { [:advanced_options_config, GoogleInSpec::Compute::Property::RegionSecurityPolicyAdvancedOptionsConfig.new(obj['advancedOptionsConfig'], to_s)] },\n      'recaptchaOptionsConfig' => ->(obj) { [:recaptcha_options_config, GoogleInSpec::Compute::Property::RegionSecurityPolicyRecaptchaOptionsConfig.new(obj['recaptchaOptionsConfig'], to_s)] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'associations' => ->(obj) { [:associations, GoogleInSpec::Compute::Property::RegionSecurityPolicyAssociationsArray.parse(obj['associations'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Compute::Property::RegionSecurityPolicyLabels.new(obj['labels'], to_s)] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'ruleTupleCount' => ->(obj) { [:rule_tuple_count, obj['ruleTupleCount']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/securityPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_security_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_auto_deploy_config'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config'\nrequire 'google/compute/property/regionsecuritypolicy_adaptive_protection_config_layer7_ddos_defense_config_threshold_configs'\nrequire 'google/compute/property/regionsecuritypolicy_advanced_options_config'\nrequire 'google/compute/property/regionsecuritypolicy_advanced_options_config_json_custom_config'\nrequire 'google/compute/property/regionsecuritypolicy_associations'\nrequire 'google/compute/property/regionsecuritypolicy_cloud_armor_config'\nrequire 'google/compute/property/regionsecuritypolicy_ddos_protection_config'\nrequire 'google/compute/property/regionsecuritypolicy_labels'\nrequire 'google/compute/property/regionsecuritypolicy_recaptcha_options_config'\nrequire 'google/compute/property/regionsecuritypolicy_rules'\nrequire 'google/compute/property/regionsecuritypolicy_user_defined_fields'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionSecurityPolicy < GcpResourceBase\n  name 'google_compute_region_security_policy'\n  desc 'RegionSecurityPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :user_defined_fields\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :rules\n  attr_reader :cloud_armor_config\n  attr_reader :adaptive_protection_config\n  attr_reader :ddos_protection_config\n  attr_reader :advanced_options_config\n  attr_reader :recaptcha_options_config\n  attr_reader :fingerprint\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :type\n  attr_reader :associations\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :rule_tuple_count\n  attr_reader :display_name\n  attr_reader :parent\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @user_defined_fields = GoogleInSpec::Compute::Property::RegionSecurityPolicyUserDefinedFieldsArray.parse(@fetched['userDefinedFields'], to_s)\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @rules = GoogleInSpec::Compute::Property::RegionSecurityPolicyRulesArray.parse(@fetched['rules'], to_s)\n    @cloud_armor_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyCloudArmorConfig.new(@fetched['cloudArmorConfig'], to_s)\n    @adaptive_protection_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdaptiveProtectionConfig.new(@fetched['adaptiveProtectionConfig'], to_s)\n    @ddos_protection_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyDdosProtectionConfig.new(@fetched['ddosProtectionConfig'], to_s)\n    @advanced_options_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyAdvancedOptionsConfig.new(@fetched['advancedOptionsConfig'], to_s)\n    @recaptcha_options_config = GoogleInSpec::Compute::Property::RegionSecurityPolicyRecaptchaOptionsConfig.new(@fetched['recaptchaOptionsConfig'], to_s)\n    @fingerprint = @fetched['fingerprint']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @type = @fetched['type']\n    @associations = GoogleInSpec::Compute::Property::RegionSecurityPolicyAssociationsArray.parse(@fetched['associations'], to_s)\n    @labels = GoogleInSpec::Compute::Property::RegionSecurityPolicyLabels.new(@fetched['labels'], to_s)\n    @label_fingerprint = @fetched['labelFingerprint']\n    @rule_tuple_count = @fetched['ruleTupleCount']\n    @display_name = @fetched['displayName']\n    @parent = @fetched['parent']\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionSecurityPolicy #{@params[:securityPolicy]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/securityPolicies/{{security_policy}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_ssl_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionSslPolicys < GcpResourceBase\n  name 'google_compute_region_ssl_policies'\n  desc 'RegionSslPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:profiles, field: :profile)\n  filter_table_config.add(:min_tls_versions, field: :min_tls_version)\n  filter_table_config.add(:enabled_features, field: :enabled_features)\n  filter_table_config.add(:custom_features, field: :custom_features)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:warnings, field: :warnings)\n  filter_table_config.add(:tls_settings, field: :tls_settings)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'profile' => ->(obj) { [:profile, obj['profile']] },\n      'minTlsVersion' => ->(obj) { [:min_tls_version, obj['minTlsVersion']] },\n      'enabledFeatures' => ->(obj) { [:enabled_features, obj['enabledFeatures']] },\n      'customFeatures' => ->(obj) { [:custom_features, obj['customFeatures']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'warnings' => ->(obj) { [:warnings, GoogleInSpec::Compute::Property::RegionSslPolicyWarningsArray.parse(obj['warnings'], to_s)] },\n      'tlsSettings' => ->(obj) { [:tls_settings, GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettings.new(obj['tlsSettings'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/sslPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_ssl_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionsslpolicy_tls_settings'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_certificate_paths'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_certificate_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcccscgsccc_certificates'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config'\nrequire 'google/compute/property/regionsslpolicy_tls_settings_proxy_tls_context_validation_context_sds_config_grpc_service_config'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscc_credentials'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgscccf_plugin'\nrequire 'google/compute/property/regionsslpolicy_tsptcvcscgsccc_certificates'\nrequire 'google/compute/property/regionsslpolicy_warnings'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionSslPolicy < GcpResourceBase\n  name 'google_compute_region_ssl_policy'\n  desc 'RegionSslPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :name\n  attr_reader :description\n  attr_reader :profile\n  attr_reader :min_tls_version\n  attr_reader :enabled_features\n  attr_reader :custom_features\n  attr_reader :fingerprint\n  attr_reader :warnings\n  attr_reader :tls_settings\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @profile = @fetched['profile']\n    @min_tls_version = @fetched['minTlsVersion']\n    @enabled_features = @fetched['enabledFeatures']\n    @custom_features = @fetched['customFeatures']\n    @fingerprint = @fetched['fingerprint']\n    @warnings = GoogleInSpec::Compute::Property::RegionSslPolicyWarningsArray.parse(@fetched['warnings'], to_s)\n    @tls_settings = GoogleInSpec::Compute::Property::RegionSslPolicyTlsSettings.new(@fetched['tlsSettings'], to_s)\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionSslPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/sslPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_target_http_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionTargetHttpProxys < GcpResourceBase\n  name 'google_compute_region_target_http_proxies'\n  desc 'RegionTargetHttpProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:url_maps, field: :url_map)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:proxy_binds, field: :proxy_bind)\n  filter_table_config.add(:http_filters, field: :http_filters)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:http_keep_alive_timeout_secs, field: :http_keep_alive_timeout_sec)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('regionTargetHttpProxies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'proxyBind' => ->(obj) { [:proxy_bind, obj['proxyBind']] },\n      'httpFilters' => ->(obj) { [:http_filters, obj['httpFilters']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'httpKeepAliveTimeoutSec' => ->(obj) { [:http_keep_alive_timeout_sec, obj['httpKeepAliveTimeoutSec']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetHttpProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_target_http_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionTargetHttpProxy < GcpResourceBase\n  name 'google_compute_region_target_http_proxy'\n  desc 'RegionTargetHttpProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :url_map\n  attr_reader :region\n  attr_reader :proxy_bind\n  attr_reader :http_filters\n  attr_reader :fingerprint\n  attr_reader :http_keep_alive_timeout_sec\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @url_map = @fetched['urlMap']\n    @region = @fetched['region']\n    @proxy_bind = @fetched['proxyBind']\n    @http_filters = @fetched['httpFilters']\n    @fingerprint = @fetched['fingerprint']\n    @http_keep_alive_timeout_sec = @fetched['httpKeepAliveTimeoutSec']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionTargetHttpProxy #{@params[:targetHttpProxy]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetHttpProxies/{{target_http_proxy}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_target_https_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionTargetHttpsProxys < GcpResourceBase\n  name 'google_compute_region_target_https_proxies'\n  desc 'RegionTargetHttpsProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:url_maps, field: :url_map)\n  filter_table_config.add(:ssl_certificates, field: :ssl_certificates)\n  filter_table_config.add(:certificate_maps, field: :certificate_map)\n  filter_table_config.add(:quic_overrides, field: :quic_override)\n  filter_table_config.add(:ssl_policies, field: :ssl_policy)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:proxy_binds, field: :proxy_bind)\n  filter_table_config.add(:http_filters, field: :http_filters)\n  filter_table_config.add(:server_tls_policies, field: :server_tls_policy)\n  filter_table_config.add(:authentications, field: :authentication)\n  filter_table_config.add(:authorization_policies, field: :authorization_policy)\n  filter_table_config.add(:authorizations, field: :authorization)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:http_keep_alive_timeout_secs, field: :http_keep_alive_timeout_sec)\n  filter_table_config.add(:tls_early_data, field: :tls_early_data)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('regionTargetHttpsProxies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n      'sslCertificates' => ->(obj) { [:ssl_certificates, obj['sslCertificates']] },\n      'certificateMap' => ->(obj) { [:certificate_map, obj['certificateMap']] },\n      'quicOverride' => ->(obj) { [:quic_override, obj['quicOverride']] },\n      'sslPolicy' => ->(obj) { [:ssl_policy, obj['sslPolicy']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'proxyBind' => ->(obj) { [:proxy_bind, obj['proxyBind']] },\n      'httpFilters' => ->(obj) { [:http_filters, obj['httpFilters']] },\n      'serverTlsPolicy' => ->(obj) { [:server_tls_policy, obj['serverTlsPolicy']] },\n      'authentication' => ->(obj) { [:authentication, obj['authentication']] },\n      'authorizationPolicy' => ->(obj) { [:authorization_policy, obj['authorizationPolicy']] },\n      'authorization' => ->(obj) { [:authorization, obj['authorization']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'httpKeepAliveTimeoutSec' => ->(obj) { [:http_keep_alive_timeout_sec, obj['httpKeepAliveTimeoutSec']] },\n      'tlsEarlyData' => ->(obj) { [:tls_early_data, obj['tlsEarlyData']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetHttpsProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_target_https_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionTargetHttpsProxy < GcpResourceBase\n  name 'google_compute_region_target_https_proxy'\n  desc 'RegionTargetHttpsProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :url_map\n  attr_reader :ssl_certificates\n  attr_reader :certificate_map\n  attr_reader :quic_override\n  attr_reader :ssl_policy\n  attr_reader :region\n  attr_reader :proxy_bind\n  attr_reader :http_filters\n  attr_reader :server_tls_policy\n  attr_reader :authentication\n  attr_reader :authorization_policy\n  attr_reader :authorization\n  attr_reader :fingerprint\n  attr_reader :http_keep_alive_timeout_sec\n  attr_reader :tls_early_data\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @url_map = @fetched['urlMap']\n    @ssl_certificates = @fetched['sslCertificates']\n    @certificate_map = @fetched['certificateMap']\n    @quic_override = @fetched['quicOverride']\n    @ssl_policy = @fetched['sslPolicy']\n    @region = @fetched['region']\n    @proxy_bind = @fetched['proxyBind']\n    @http_filters = @fetched['httpFilters']\n    @server_tls_policy = @fetched['serverTlsPolicy']\n    @authentication = @fetched['authentication']\n    @authorization_policy = @fetched['authorizationPolicy']\n    @authorization = @fetched['authorization']\n    @fingerprint = @fetched['fingerprint']\n    @http_keep_alive_timeout_sec = @fetched['httpKeepAliveTimeoutSec']\n    @tls_early_data = @fetched['tlsEarlyData']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionTargetHttpsProxy #{@params[:targetHttpsProxy]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetHttpsProxies/{{target_https_proxy}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_url_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/regionurlmap_default_custom_error_response_policy'\nrequire 'google/compute/property/regionurlmap_default_custom_error_response_policy_error_response_rules'\nrequire 'google/compute/property/regionurlmap_default_route_action'\nrequire 'google/compute/property/regionurlmap_default_route_action_cors_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/regionurlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/regionurlmap_default_route_action_max_stream_duration'\nrequire 'google/compute/property/regionurlmap_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_retry_policy'\nrequire 'google/compute/property/regionurlmap_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/regionurlmap_default_route_action_timeout'\nrequire 'google/compute/property/regionurlmap_default_route_action_url_rewrite'\nrequire 'google/compute/property/regionurlmap_default_route_action_weighted_backend_services'\nrequire 'google/compute/property/regionurlmap_default_url_redirect'\nrequire 'google/compute/property/regionurlmap_header_action'\nrequire 'google/compute/property/regionurlmap_header_action_request_headers_to_add'\nrequire 'google/compute/property/regionurlmap_header_action_response_headers_to_add'\nrequire 'google/compute/property/regionurlmap_host_rules'\nrequire 'google/compute/property/regionurlmap_path_matchers'\nrequire 'google/compute/property/regionurlmap_tests'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRegionUrlMap < GcpResourceBase\n  name 'google_compute_region_url_map'\n  desc 'RegionUrlMap'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :host_rules\n  attr_reader :path_matchers\n  attr_reader :tests\n  attr_reader :default_service\n  attr_reader :default_route_action\n  attr_reader :default_url_redirect\n  attr_reader :header_action\n  attr_reader :default_custom_error_response_policy\n  attr_reader :fingerprint\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @host_rules = GoogleInSpec::Compute::Property::RegionUrlMapHostRulesArray.parse(@fetched['hostRules'], to_s)\n    @path_matchers = GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersArray.parse(@fetched['pathMatchers'], to_s)\n    @tests = GoogleInSpec::Compute::Property::RegionUrlMapTestsArray.parse(@fetched['tests'], to_s)\n    @default_service = @fetched['defaultService']\n    @default_route_action = GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteAction.new(@fetched['defaultRouteAction'], to_s)\n    @default_url_redirect = GoogleInSpec::Compute::Property::RegionUrlMapDefaultUrlRedirect.new(@fetched['defaultUrlRedirect'], to_s)\n    @header_action = GoogleInSpec::Compute::Property::RegionUrlMapHeaderAction.new(@fetched['headerAction'], to_s)\n    @default_custom_error_response_policy = GoogleInSpec::Compute::Property::RegionUrlMapDefaultCustomErrorResponsePolicy.new(@fetched['defaultCustomErrorResponsePolicy'], to_s)\n    @fingerprint = @fetched['fingerprint']\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionUrlMap #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/urlMaps/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_region_url_maps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegionUrlMaps < GcpResourceBase\n  name 'google_compute_region_url_maps'\n  desc 'RegionUrlMap plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:host_rules, field: :host_rules)\n  filter_table_config.add(:path_matchers, field: :path_matchers)\n  filter_table_config.add(:tests, field: :tests)\n  filter_table_config.add(:default_services, field: :default_service)\n  filter_table_config.add(:default_route_actions, field: :default_route_action)\n  filter_table_config.add(:default_url_redirects, field: :default_url_redirect)\n  filter_table_config.add(:header_actions, field: :header_action)\n  filter_table_config.add(:default_custom_error_response_policies, field: :default_custom_error_response_policy)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'hostRules' => ->(obj) { [:host_rules, GoogleInSpec::Compute::Property::RegionUrlMapHostRulesArray.parse(obj['hostRules'], to_s)] },\n      'pathMatchers' => ->(obj) { [:path_matchers, GoogleInSpec::Compute::Property::RegionUrlMapPathMatchersArray.parse(obj['pathMatchers'], to_s)] },\n      'tests' => ->(obj) { [:tests, GoogleInSpec::Compute::Property::RegionUrlMapTestsArray.parse(obj['tests'], to_s)] },\n      'defaultService' => ->(obj) { [:default_service, obj['defaultService']] },\n      'defaultRouteAction' => ->(obj) { [:default_route_action, GoogleInSpec::Compute::Property::RegionUrlMapDefaultRouteAction.new(obj['defaultRouteAction'], to_s)] },\n      'defaultUrlRedirect' => ->(obj) { [:default_url_redirect, GoogleInSpec::Compute::Property::RegionUrlMapDefaultUrlRedirect.new(obj['defaultUrlRedirect'], to_s)] },\n      'headerAction' => ->(obj) { [:header_action, GoogleInSpec::Compute::Property::RegionUrlMapHeaderAction.new(obj['headerAction'], to_s)] },\n      'defaultCustomErrorResponsePolicy' => ->(obj) { [:default_custom_error_response_policy, GoogleInSpec::Compute::Property::RegionUrlMapDefaultCustomErrorResponsePolicy.new(obj['defaultCustomErrorResponsePolicy'], to_s)] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/urlMaps'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_regional_disk.rb",
    "content": "# frozen_string_literal: false\n\nrequire 'gcp_backend'\nrequire 'google/compute/property/disk_disk_encryption_key'\nrequire 'google/compute/property/disk_source_image_encryption_key'\nrequire 'google/compute/property/disk_source_snapshot_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass RegionalDisk < GcpResourceBase\n  name 'google_compute_regional_disk'\n  desc 'RegionalDisk'\n  supports platform: 'gcp'\n\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :params\n  attr_reader :description\n  attr_reader :size_gb\n  attr_reader :zone\n  attr_reader :source_snapshot\n  attr_reader :source_snapshot_id\n  attr_reader :source_snapshot_encryption_key\n  attr_reader :source_image\n  attr_reader :source_image_id\n  attr_reader :source_image_encryption_key\n  attr_reader :type\n  attr_reader :licenses\n  attr_reader :last_attach_timestamp\n  attr_reader :last_detach_timestamp\n  attr_reader :users\n  attr_reader :disk_encryption_key\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :physical_block_size_bytes\n  attr_reader :region\n  attr_reader :replica_zones\n  attr_reader :status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params)\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @size_gb = @fetched['sizeGb']\n    @type = @fetched['type']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @region = @fetched['region']\n    @replica_zones = @fetched['replicaZones']\n    @physical_block_size_bytes = @fetched['physicalBlockSizeBytes']\n    @description = @fetched['description']\n    @last_attach_timestamp = parse_time_string(@fetched['lastAttachTimestamp'])\n    @last_detach_timestamp = parse_time_string(@fetched['lastDetachTimestamp'])\n    @labels = @fetched['labels']\n    @licenses = @fetched['licenses']\n    @users = @fetched['users']\n    @source_image = @fetched['sourceImage']\n    @zone = @fetched['zone']\n    @source_image_encryption_key = GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(@fetched['sourceImageEncryptionKey'], to_s)\n    @source_image_id = @fetched['sourceImageId']\n    @disk_encryption_key = GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(@fetched['diskEncryptionKey'], to_s)\n    @source_snapshot = @fetched['sourceSnapshot']\n    @source_snapshot_encryption_key = GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(@fetched['sourceSnapshotEncryptionKey'], to_s)\n    @source_snapshot_id = @fetched['sourceSnapshotId']\n    @stat = @fetched['status']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RegionalDisk #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url\n    'https://www.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/disks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_regional_disks.rb",
    "content": "# frozen_string_literal: false\n\nrequire 'gcp_backend'\nclass RegionalDisks < GcpResourceBase\n  name 'google_compute_regional_disks'\n  desc 'RegionalDisk plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:size_gbs, field: :size_gb)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:source_snapshots, field: :source_snapshot)\n  filter_table_config.add(:source_snapshot_ids, field: :source_snapshot_id)\n  filter_table_config.add(:source_snapshot_encryption_keys, field: :source_snapshot_encryption_key)\n  filter_table_config.add(:source_images, field: :source_image)\n  filter_table_config.add(:source_image_ids, field: :source_image_id)\n  filter_table_config.add(:source_image_encryption_keys, field: :source_image_encryption_key)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:licenses, field: :licenses)\n  filter_table_config.add(:last_attach_timestamps, field: :last_attach_timestamp)\n  filter_table_config.add(:last_detach_timestamps, field: :last_detach_timestamp)\n  filter_table_config.add(:users, field: :users)\n  filter_table_config.add(:disk_encryption_keys, field: :disk_encryption_key)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:physical_block_size_bytes, field: :physical_block_size_bytes)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:replica_zones, field: :replica_zone)\n  filter_table_config.add(:statuses, field: :status)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'sizeGb' => ->(obj) { [:size_gb, obj['sizeGb']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'sourceSnapshot' => ->(obj) { [:source_snapshot, obj['sourceSnapshot']] },\n      'sourceSnapshotId' => ->(obj) { [:source_snapshot_id, obj['sourceSnapshotId']] },\n      'sourceSnapshotEncryptionKey' => ->(obj) { [:source_snapshot_encryption_key, GoogleInSpec::Compute::Property::DiskSourceSnapshotEncryptionKey.new(obj['sourceSnapshotEncryptionKey'], to_s)] },\n      'sourceImage' => ->(obj) { [:source_image, obj['sourceImage']] },\n      'sourceImageId' => ->(obj) { [:source_image_id, obj['sourceImageId']] },\n      'sourceImageEncryptionKey' => ->(obj) { [:source_image_encryption_key, GoogleInSpec::Compute::Property::DiskSourceImageEncryptionKey.new(obj['sourceImageEncryptionKey'], to_s)] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'licenses' => ->(obj) { [:licenses, obj['licenses']] },\n      'lastAttachTimestamp' => ->(obj) { [:last_attach_timestamp, parse_time_string(obj['lastAttachTimestamp'])] },\n      'lastDetachTimestamp' => ->(obj) { [:last_detach_timestamp, parse_time_string(obj['lastDetachTimestamp'])] },\n      'users' => ->(obj) { [:users, obj['users']] },\n      'diskEncryptionKey' => ->(obj) { [:disk_encryption_key, GoogleInSpec::Compute::Property::DiskDiskEncryptionKey.new(obj['diskEncryptionKey'], to_s)] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'physicalBlockSizeBytes' => ->(obj) { [:physical_block_size_bytes, obj['physicalBlockSizeBytes']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'replica_zones' => ->(obj) { [:replica_zones, obj['replica_zones']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/disks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_regions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRegions < GcpResourceBase\n  name 'google_compute_regions'\n  desc 'Region plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:region_ids, field: :region_id)\n  filter_table_config.add(:region_names, field: :region_name)\n  filter_table_config.add(:quotas, field: :quotas)\n  filter_table_config.add(:region_statuses, field: :region_status)\n  filter_table_config.add(:zones, field: :zones)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::RegionDeprecated.new(obj['deprecated'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:region_id, obj['id']] },\n      'name' => ->(obj) { [:region_name, obj['name']] },\n      'quotas' => ->(obj) { [:quotas, GoogleInSpec::Compute::Property::RegionQuotasArray.parse(obj['quotas'], to_s)] },\n      'status' => ->(obj) { [:region_status, obj['status']] },\n      'zones' => ->(obj) { [:zones, obj['zones']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_reservation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/reservation_aggregate_reservation'\nrequire 'google/compute/property/reservation_aggregate_reservation_in_use_resources'\nrequire 'google/compute/property/reservation_aggregate_reservation_reserved_resources'\nrequire 'google/compute/property/reservation_delete_after_duration'\nrequire 'google/compute/property/reservation_resource_policies'\nrequire 'google/compute/property/reservation_resource_status'\nrequire 'google/compute/property/reservation_resource_status_specific_sku_allocation'\nrequire 'google/compute/property/reservation_share_settings'\nrequire 'google/compute/property/reservation_share_settings_folder_map'\nrequire 'google/compute/property/reservation_share_settings_project_map'\nrequire 'google/compute/property/reservation_specific_reservation'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_guest_accelerators'\nrequire 'google/compute/property/reservation_specific_reservation_instance_properties_local_ssds'\n\n# A provider to manage Compute Engine resources.\nclass ComputeReservation < GcpResourceBase\n  name 'google_compute_reservation'\n  desc 'Reservation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :zone\n  attr_reader :description\n  attr_reader :name\n  attr_reader :specific_reservation\n  attr_reader :aggregate_reservation\n  attr_reader :commitment\n  attr_reader :specific_reservation_required\n  attr_reader :status\n  attr_reader :share_settings\n  attr_reader :satisfies_pzs\n  attr_reader :resource_policies\n  attr_reader :resource_status\n  attr_reader :delete_at_time\n  attr_reader :delete_after_duration\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @zone = @fetched['zone']\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @specific_reservation = GoogleInSpec::Compute::Property::ReservationSpecificReservation.new(@fetched['specificReservation'], to_s)\n    @aggregate_reservation = GoogleInSpec::Compute::Property::ReservationAggregateReservation.new(@fetched['aggregateReservation'], to_s)\n    @commitment = @fetched['commitment']\n    @specific_reservation_required = @fetched['specificReservationRequired']\n    @status = @fetched['status']\n    @share_settings = GoogleInSpec::Compute::Property::ReservationShareSettings.new(@fetched['shareSettings'], to_s)\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @resource_policies = GoogleInSpec::Compute::Property::ReservationResourcePolicies.new(@fetched['resourcePolicies'], to_s)\n    @resource_status = GoogleInSpec::Compute::Property::ReservationResourceStatus.new(@fetched['resourceStatus'], to_s)\n    @delete_at_time = @fetched['deleteAtTime']\n    @delete_after_duration = GoogleInSpec::Compute::Property::ReservationDeleteAfterDuration.new(@fetched['deleteAfterDuration'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Reservation #{@params[:reservation]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/reservations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_reservations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeReservations < GcpResourceBase\n  name 'google_compute_reservations'\n  desc 'Reservation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:specific_reservations, field: :specific_reservation)\n  filter_table_config.add(:aggregate_reservations, field: :aggregate_reservation)\n  filter_table_config.add(:commitments, field: :commitment)\n  filter_table_config.add(:specific_reservation_requireds, field: :specific_reservation_required)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:share_settings, field: :share_settings)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:resource_policies, field: :resource_policies)\n  filter_table_config.add(:resource_statuses, field: :resource_status)\n  filter_table_config.add(:delete_at_times, field: :delete_at_time)\n  filter_table_config.add(:delete_after_durations, field: :delete_after_duration)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'specificReservation' => ->(obj) { [:specific_reservation, GoogleInSpec::Compute::Property::ReservationSpecificReservation.new(obj['specificReservation'], to_s)] },\n      'aggregateReservation' => ->(obj) { [:aggregate_reservation, GoogleInSpec::Compute::Property::ReservationAggregateReservation.new(obj['aggregateReservation'], to_s)] },\n      'commitment' => ->(obj) { [:commitment, obj['commitment']] },\n      'specificReservationRequired' => ->(obj) { [:specific_reservation_required, obj['specificReservationRequired']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'shareSettings' => ->(obj) { [:share_settings, GoogleInSpec::Compute::Property::ReservationShareSettings.new(obj['shareSettings'], to_s)] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'resourcePolicies' => ->(obj) { [:resource_policies, GoogleInSpec::Compute::Property::ReservationResourcePolicies.new(obj['resourcePolicies'], to_s)] },\n      'resourceStatus' => ->(obj) { [:resource_status, GoogleInSpec::Compute::Property::ReservationResourceStatus.new(obj['resourceStatus'], to_s)] },\n      'deleteAtTime' => ->(obj) { [:delete_at_time, obj['deleteAtTime']] },\n      'deleteAfterDuration' => ->(obj) { [:delete_after_duration, GoogleInSpec::Compute::Property::ReservationDeleteAfterDuration.new(obj['deleteAfterDuration'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/reservations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_resource_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeResourcePolicys < GcpResourceBase\n  name 'google_compute_resource_policies'\n  desc 'ResourcePolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:vm_maintenance_policies, field: :vm_maintenance_policy)\n  filter_table_config.add(:snapshot_schedule_policies, field: :snapshot_schedule_policy)\n  filter_table_config.add(:group_placement_policies, field: :group_placement_policy)\n  filter_table_config.add(:instance_schedule_policies, field: :instance_schedule_policy)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:resource_statuses, field: :resource_status)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'vmMaintenancePolicy' => ->(obj) { [:vm_maintenance_policy, GoogleInSpec::Compute::Property::ResourcePolicyVmMaintenancePolicy.new(obj['vmMaintenancePolicy'], to_s)] },\n      'snapshotSchedulePolicy' => ->(obj) { [:snapshot_schedule_policy, GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicy.new(obj['snapshotSchedulePolicy'], to_s)] },\n      'groupPlacementPolicy' => ->(obj) { [:group_placement_policy, GoogleInSpec::Compute::Property::ResourcePolicyGroupPlacementPolicy.new(obj['groupPlacementPolicy'], to_s)] },\n      'instanceSchedulePolicy' => ->(obj) { [:instance_schedule_policy, GoogleInSpec::Compute::Property::ResourcePolicyInstanceSchedulePolicy.new(obj['instanceSchedulePolicy'], to_s)] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'resourceStatus' => ->(obj) { [:resource_status, GoogleInSpec::Compute::Property::ResourcePolicyResourceStatus.new(obj['resourceStatus'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/resourcePolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_resource_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/resourcepolicy_group_placement_policy'\nrequire 'google/compute/property/resourcepolicy_instance_schedule_policy'\nrequire 'google/compute/property/resourcepolicy_instance_schedule_policy_vm_start_schedule'\nrequire 'google/compute/property/resourcepolicy_instance_schedule_policy_vm_stop_schedule'\nrequire 'google/compute/property/resourcepolicy_resource_status'\nrequire 'google/compute/property/resourcepolicy_resource_status_instance_schedule_policy'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_retention_policy'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_daily_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_hourly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_schedule_weekly_schedule_day_of_weeks'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties'\nrequire 'google/compute/property/resourcepolicy_snapshot_schedule_policy_snapshot_properties_labels'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_concurrency_control_group'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window'\nrequire 'google/compute/property/resourcepolicy_vm_maintenance_policy_maintenance_window_daily_maintenance_window'\n\n# A provider to manage Compute Engine resources.\nclass ComputeResourcePolicy < GcpResourceBase\n  name 'google_compute_resource_policy'\n  desc 'ResourcePolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :region\n  attr_reader :description\n  attr_reader :name\n  attr_reader :vm_maintenance_policy\n  attr_reader :snapshot_schedule_policy\n  attr_reader :group_placement_policy\n  attr_reader :instance_schedule_policy\n  attr_reader :status\n  attr_reader :resource_status\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @region = @fetched['region']\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @vm_maintenance_policy = GoogleInSpec::Compute::Property::ResourcePolicyVmMaintenancePolicy.new(@fetched['vmMaintenancePolicy'], to_s)\n    @snapshot_schedule_policy = GoogleInSpec::Compute::Property::ResourcePolicySnapshotSchedulePolicy.new(@fetched['snapshotSchedulePolicy'], to_s)\n    @group_placement_policy = GoogleInSpec::Compute::Property::ResourcePolicyGroupPlacementPolicy.new(@fetched['groupPlacementPolicy'], to_s)\n    @instance_schedule_policy = GoogleInSpec::Compute::Property::ResourcePolicyInstanceSchedulePolicy.new(@fetched['instanceSchedulePolicy'], to_s)\n    @status = @fetched['status']\n    @resource_status = GoogleInSpec::Compute::Property::ResourcePolicyResourceStatus.new(@fetched['resourceStatus'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ResourcePolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/resourcePolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_route.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRoute < GcpResourceBase\n  name 'google_compute_route'\n  desc 'Route'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :dest_range\n  attr_reader :description\n  attr_reader :name\n  attr_reader :network\n  attr_reader :priority\n  attr_reader :tags\n  attr_reader :next_hop_gateway\n  attr_reader :next_hop_instance\n  attr_reader :next_hop_ip\n  attr_reader :next_hop_vpn_tunnel\n  attr_reader :next_hop_network\n  attr_reader :next_hop_ilb\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @dest_range = @fetched['destRange']\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @priority = @fetched['priority']\n    @tags = @fetched['tags']\n    @next_hop_gateway = @fetched['nextHopGateway']\n    @next_hop_instance = @fetched['nextHopInstance']\n    @next_hop_ip = @fetched['nextHopIp']\n    @next_hop_vpn_tunnel = @fetched['nextHopVpnTunnel']\n    @next_hop_network = @fetched['nextHopNetwork']\n    @next_hop_ilb = @fetched['nextHopIlb']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Route #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/routes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_router.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/router_bgp'\nrequire 'google/compute/property/router_bgp_advertised_ip_ranges'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRouter < GcpResourceBase\n  name 'google_compute_router'\n  desc 'Router'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :network\n  attr_reader :bgp\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @network = @fetched['network']\n    @bgp = GoogleInSpec::Compute::Property::RouterBgp.new(@fetched['bgp'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Router #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_router_nat.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/routernat_log_config'\nrequire 'google/compute/property/routernat_subnetwork'\n\n# A provider to manage Compute Engine resources.\nclass ComputeRouterNat < GcpResourceBase\n  name 'google_compute_router_nat'\n  desc 'RouterNat'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :nat_ip_allocate_option\n  attr_reader :nat_ips\n  attr_reader :drain_nat_ips\n  attr_reader :source_subnetwork_ip_ranges_to_nat\n  attr_reader :subnetwork\n  attr_reader :min_ports_per_vm\n  attr_reader :udp_idle_timeout_sec\n  attr_reader :icmp_idle_timeout_sec\n  attr_reader :tcp_established_idle_timeout_sec\n  attr_reader :tcp_transitory_idle_timeout_sec\n  attr_reader :log_config\n  attr_reader :enable_endpoint_independent_mapping\n  attr_reader :router\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    @fetched = unwrap(fetched, params)\n    parse unless @fetched.nil?\n  end\n\n  def identity\n    %w{name}\n  end\n\n  def collection_item\n    'nats'\n  end\n\n  def unwrap(fetched, params)\n    fetched[collection_item].find { |result| identity.all? { |id| result[id] == params[id.to_sym] } }\n  end\n\n  def parse\n    @name = @fetched['name']\n    @nat_ip_allocate_option = @fetched['natIpAllocateOption']\n    @nat_ips = @fetched['natIps']\n    @drain_nat_ips = @fetched['drainNatIps']\n    @source_subnetwork_ip_ranges_to_nat = @fetched['sourceSubnetworkIpRangesToNat']\n    @subnetwork = GoogleInSpec::Compute::Property::RouterNatSubnetworkArray.parse(@fetched['subnetworks'], to_s)\n    @min_ports_per_vm = @fetched['minPortsPerVm']\n    @udp_idle_timeout_sec = @fetched['udpIdleTimeoutSec']\n    @icmp_idle_timeout_sec = @fetched['icmpIdleTimeoutSec']\n    @tcp_established_idle_timeout_sec = @fetched['tcpEstablishedIdleTimeoutSec']\n    @tcp_transitory_idle_timeout_sec = @fetched['tcpTransitoryIdleTimeoutSec']\n    @log_config = GoogleInSpec::Compute::Property::RouterNatLogConfig.new(@fetched['logConfig'], to_s)\n    @enable_endpoint_independent_mapping = @fetched['enableEndpointIndependentMapping']\n    @router = @fetched['router']\n    @region = @fetched['region']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"RouterNat #{@params[:router]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers/{{router}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_router_nats.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRouterNats < GcpResourceBase\n  name 'google_compute_router_nats'\n  desc 'RouterNat plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:nat_ip_allocate_options, field: :nat_ip_allocate_option)\n  filter_table_config.add(:nat_ips, field: :nat_ips)\n  filter_table_config.add(:drain_nat_ips, field: :drain_nat_ips)\n  filter_table_config.add(:source_subnetwork_ip_ranges_to_nats, field: :source_subnetwork_ip_ranges_to_nat)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:min_ports_per_vms, field: :min_ports_per_vm)\n  filter_table_config.add(:udp_idle_timeout_secs, field: :udp_idle_timeout_sec)\n  filter_table_config.add(:icmp_idle_timeout_secs, field: :icmp_idle_timeout_sec)\n  filter_table_config.add(:tcp_established_idle_timeout_secs, field: :tcp_established_idle_timeout_sec)\n  filter_table_config.add(:tcp_transitory_idle_timeout_secs, field: :tcp_transitory_idle_timeout_sec)\n  filter_table_config.add(:log_configs, field: :log_config)\n  filter_table_config.add(:enable_endpoint_independent_mappings, field: :enable_endpoint_independent_mapping)\n  filter_table_config.add(:routers, field: :router)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('nats')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'natIpAllocateOption' => ->(obj) { [:nat_ip_allocate_option, obj['natIpAllocateOption']] },\n      'natIps' => ->(obj) { [:nat_ips, obj['natIps']] },\n      'drainNatIps' => ->(obj) { [:drain_nat_ips, obj['drainNatIps']] },\n      'sourceSubnetworkIpRangesToNat' => ->(obj) { [:source_subnetwork_ip_ranges_to_nat, obj['sourceSubnetworkIpRangesToNat']] },\n      'subnetworks' => ->(obj) { [:subnetwork, GoogleInSpec::Compute::Property::RouterNatSubnetworkArray.parse(obj['subnetworks'], to_s)] },\n      'minPortsPerVm' => ->(obj) { [:min_ports_per_vm, obj['minPortsPerVm']] },\n      'udpIdleTimeoutSec' => ->(obj) { [:udp_idle_timeout_sec, obj['udpIdleTimeoutSec']] },\n      'icmpIdleTimeoutSec' => ->(obj) { [:icmp_idle_timeout_sec, obj['icmpIdleTimeoutSec']] },\n      'tcpEstablishedIdleTimeoutSec' => ->(obj) { [:tcp_established_idle_timeout_sec, obj['tcpEstablishedIdleTimeoutSec']] },\n      'tcpTransitoryIdleTimeoutSec' => ->(obj) { [:tcp_transitory_idle_timeout_sec, obj['tcpTransitoryIdleTimeoutSec']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::RouterNatLogConfig.new(obj['logConfig'], to_s)] },\n      'enableEndpointIndependentMapping' => ->(obj) { [:enable_endpoint_independent_mapping, obj['enableEndpointIndependentMapping']] },\n      'router' => ->(obj) { [:router, obj['router']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers/{{router}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_routers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRouters < GcpResourceBase\n  name 'google_compute_routers'\n  desc 'Router plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:bgps, field: :bgp)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'bgp' => ->(obj) { [:bgp, GoogleInSpec::Compute::Property::RouterBgp.new(obj['bgp'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/routers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_routes.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeRoutes < GcpResourceBase\n  name 'google_compute_routes'\n  desc 'Route plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dest_ranges, field: :dest_range)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:priorities, field: :priority)\n  filter_table_config.add(:tags, field: :tags)\n  filter_table_config.add(:next_hop_gateways, field: :next_hop_gateway)\n  filter_table_config.add(:next_hop_instances, field: :next_hop_instance)\n  filter_table_config.add(:next_hop_ips, field: :next_hop_ip)\n  filter_table_config.add(:next_hop_vpn_tunnels, field: :next_hop_vpn_tunnel)\n  filter_table_config.add(:next_hop_networks, field: :next_hop_network)\n  filter_table_config.add(:next_hop_ilbs, field: :next_hop_ilb)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'destRange' => ->(obj) { [:dest_range, obj['destRange']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'priority' => ->(obj) { [:priority, obj['priority']] },\n      'tags' => ->(obj) { [:tags, obj['tags']] },\n      'nextHopGateway' => ->(obj) { [:next_hop_gateway, obj['nextHopGateway']] },\n      'nextHopInstance' => ->(obj) { [:next_hop_instance, obj['nextHopInstance']] },\n      'nextHopIp' => ->(obj) { [:next_hop_ip, obj['nextHopIp']] },\n      'nextHopVpnTunnel' => ->(obj) { [:next_hop_vpn_tunnel, obj['nextHopVpnTunnel']] },\n      'nextHopNetwork' => ->(obj) { [:next_hop_network, obj['nextHopNetwork']] },\n      'nextHopIlb' => ->(obj) { [:next_hop_ilb, obj['nextHopIlb']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/routes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_security_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSecurityPolicys < GcpResourceBase\n  name 'google_compute_security_policies'\n  desc 'SecurityPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:rules, field: :rules)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'rules' => ->(obj) { [:rules, GoogleInSpec::Compute::Property::SecurityPolicyRulesArray.parse(obj['rules'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/securityPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_security_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/securitypolicy_rules'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSecurityPolicy < GcpResourceBase\n  name 'google_compute_security_policy'\n  desc 'SecurityPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :id\n  attr_reader :rules\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @id = @fetched['id']\n    @rules = GoogleInSpec::Compute::Property::SecurityPolicyRulesArray.parse(@fetched['rules'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SecurityPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/securityPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_service_attachment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/serviceattachment_connected_endpoints'\nrequire 'google/compute/property/serviceattachment_consumer_accept_lists'\nrequire 'google/compute/property/serviceattachment_psc_service_attachment_id'\n\n# A provider to manage Compute Engine resources.\nclass ComputeServiceAttachment < GcpResourceBase\n  name 'google_compute_service_attachment'\n  desc 'ServiceAttachment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :region\n  attr_reader :producer_forwarding_rule\n  attr_reader :target_service\n  attr_reader :connection_preference\n  attr_reader :connected_endpoints\n  attr_reader :nat_subnets\n  attr_reader :enable_proxy_protocol\n  attr_reader :consumer_reject_lists\n  attr_reader :consumer_accept_lists\n  attr_reader :psc_service_attachment_id\n  attr_reader :fingerprint\n  attr_reader :domain_names\n  attr_reader :reconcile_connections\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @region = @fetched['region']\n    @producer_forwarding_rule = @fetched['producerForwardingRule']\n    @target_service = @fetched['targetService']\n    @connection_preference = @fetched['connectionPreference']\n    @connected_endpoints = GoogleInSpec::Compute::Property::ServiceAttachmentConnectedEndpointsArray.parse(@fetched['connectedEndpoints'], to_s)\n    @nat_subnets = @fetched['natSubnets']\n    @enable_proxy_protocol = @fetched['enableProxyProtocol']\n    @consumer_reject_lists = @fetched['consumerRejectLists']\n    @consumer_accept_lists = GoogleInSpec::Compute::Property::ServiceAttachmentConsumerAcceptListsArray.parse(@fetched['consumerAcceptLists'], to_s)\n    @psc_service_attachment_id = GoogleInSpec::Compute::Property::ServiceAttachmentPscServiceAttachmentId.new(@fetched['pscServiceAttachmentId'], to_s)\n    @fingerprint = @fetched['fingerprint']\n    @domain_names = @fetched['domainNames']\n    @reconcile_connections = @fetched['reconcileConnections']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServiceAttachment #{@params[:service_attachment]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/serviceAttachments/{{service_attachment}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_service_attachments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeServiceAttachments < GcpResourceBase\n  name 'google_compute_service_attachments'\n  desc 'ServiceAttachment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:producer_forwarding_rules, field: :producer_forwarding_rule)\n  filter_table_config.add(:target_services, field: :target_service)\n  filter_table_config.add(:connection_preferences, field: :connection_preference)\n  filter_table_config.add(:connected_endpoints, field: :connected_endpoints)\n  filter_table_config.add(:nat_subnets, field: :nat_subnets)\n  filter_table_config.add(:enable_proxy_protocols, field: :enable_proxy_protocol)\n  filter_table_config.add(:consumer_reject_lists, field: :consumer_reject_lists)\n  filter_table_config.add(:consumer_accept_lists, field: :consumer_accept_lists)\n  filter_table_config.add(:psc_service_attachment_ids, field: :psc_service_attachment_id)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:domain_names, field: :domain_names)\n  filter_table_config.add(:reconcile_connections, field: :reconcile_connections)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'producerForwardingRule' => ->(obj) { [:producer_forwarding_rule, obj['producerForwardingRule']] },\n      'targetService' => ->(obj) { [:target_service, obj['targetService']] },\n      'connectionPreference' => ->(obj) { [:connection_preference, obj['connectionPreference']] },\n      'connectedEndpoints' => ->(obj) { [:connected_endpoints, GoogleInSpec::Compute::Property::ServiceAttachmentConnectedEndpointsArray.parse(obj['connectedEndpoints'], to_s)] },\n      'natSubnets' => ->(obj) { [:nat_subnets, obj['natSubnets']] },\n      'enableProxyProtocol' => ->(obj) { [:enable_proxy_protocol, obj['enableProxyProtocol']] },\n      'consumerRejectLists' => ->(obj) { [:consumer_reject_lists, obj['consumerRejectLists']] },\n      'consumerAcceptLists' => ->(obj) { [:consumer_accept_lists, GoogleInSpec::Compute::Property::ServiceAttachmentConsumerAcceptListsArray.parse(obj['consumerAcceptLists'], to_s)] },\n      'pscServiceAttachmentId' => ->(obj) { [:psc_service_attachment_id, GoogleInSpec::Compute::Property::ServiceAttachmentPscServiceAttachmentId.new(obj['pscServiceAttachmentId'], to_s)] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'domainNames' => ->(obj) { [:domain_names, obj['domainNames']] },\n      'reconcileConnections' => ->(obj) { [:reconcile_connections, obj['reconcileConnections']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/serviceAttachments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_snapshot.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/snapshot_snapshot_encryption_key'\nrequire 'google/compute/property/snapshot_source_disk_encryption_key'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSnapshot < GcpResourceBase\n  name 'google_compute_snapshot'\n  desc 'Snapshot'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :id\n  attr_reader :disk_size_gb\n  attr_reader :name\n  attr_reader :description\n  attr_reader :storage_bytes\n  attr_reader :storage_locations\n  attr_reader :licenses\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :source_disk\n  attr_reader :zone\n  attr_reader :snapshot_encryption_key\n  attr_reader :source_disk_encryption_key\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @id = @fetched['id']\n    @disk_size_gb = @fetched['diskSizeGb']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @storage_bytes = @fetched['storageBytes']\n    @storage_locations = @fetched['storageLocations']\n    @licenses = @fetched['licenses']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @source_disk = @fetched['sourceDisk']\n    @zone = @fetched['zone']\n    @snapshot_encryption_key = GoogleInSpec::Compute::Property::SnapshotSnapshotEncryptionKey.new(@fetched['snapshotEncryptionKey'], to_s)\n    @source_disk_encryption_key = GoogleInSpec::Compute::Property::SnapshotSourceDiskEncryptionKey.new(@fetched['sourceDiskEncryptionKey'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Snapshot #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/snapshots/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_snapshots.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSnapshots < GcpResourceBase\n  name 'google_compute_snapshots'\n  desc 'Snapshot plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:disk_size_gbs, field: :disk_size_gb)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:storage_bytes, field: :storage_bytes)\n  filter_table_config.add(:storage_locations, field: :storage_locations)\n  filter_table_config.add(:licenses, field: :licenses)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:source_disks, field: :source_disk)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:snapshot_encryption_keys, field: :snapshot_encryption_key)\n  filter_table_config.add(:source_disk_encryption_keys, field: :source_disk_encryption_key)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'diskSizeGb' => ->(obj) { [:disk_size_gb, obj['diskSizeGb']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'storageBytes' => ->(obj) { [:storage_bytes, obj['storageBytes']] },\n      'storageLocations' => ->(obj) { [:storage_locations, obj['storageLocations']] },\n      'licenses' => ->(obj) { [:licenses, obj['licenses']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'sourceDisk' => ->(obj) { [:source_disk, obj['sourceDisk']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'snapshotEncryptionKey' => ->(obj) { [:snapshot_encryption_key, GoogleInSpec::Compute::Property::SnapshotSnapshotEncryptionKey.new(obj['snapshotEncryptionKey'], to_s)] },\n      'sourceDiskEncryptionKey' => ->(obj) { [:source_disk_encryption_key, GoogleInSpec::Compute::Property::SnapshotSourceDiskEncryptionKey.new(obj['sourceDiskEncryptionKey'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/snapshots'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_ssl_certificate.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSslCertificate < GcpResourceBase\n  name 'google_compute_ssl_certificate'\n  desc 'SslCertificate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :certificate\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :private_key\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @certificate = @fetched['certificate']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @private_key = @fetched['privateKey']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SslCertificate #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslCertificates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_ssl_certificates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSslCertificates < GcpResourceBase\n  name 'google_compute_ssl_certificates'\n  desc 'SslCertificate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:certificates, field: :certificate)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:private_keys, field: :private_key)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'certificate' => ->(obj) { [:certificate, obj['certificate']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'privateKey' => ->(obj) { [:private_key, obj['privateKey']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslCertificates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_ssl_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSslPolicys < GcpResourceBase\n  name 'google_compute_ssl_policies'\n  desc 'SslPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:profiles, field: :profile)\n  filter_table_config.add(:min_tls_versions, field: :min_tls_version)\n  filter_table_config.add(:enabled_features, field: :enabled_features)\n  filter_table_config.add(:custom_features, field: :custom_features)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:warnings, field: :warnings)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'profile' => ->(obj) { [:profile, obj['profile']] },\n      'minTlsVersion' => ->(obj) { [:min_tls_version, obj['minTlsVersion']] },\n      'enabledFeatures' => ->(obj) { [:enabled_features, obj['enabledFeatures']] },\n      'customFeatures' => ->(obj) { [:custom_features, obj['customFeatures']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'warnings' => ->(obj) { [:warnings, GoogleInSpec::Compute::Property::SslPolicyWarningsArray.parse(obj['warnings'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_ssl_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/sslpolicy_warnings'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSslPolicy < GcpResourceBase\n  name 'google_compute_ssl_policy'\n  desc 'SslPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :profile\n  attr_reader :min_tls_version\n  attr_reader :enabled_features\n  attr_reader :custom_features\n  attr_reader :fingerprint\n  attr_reader :warnings\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @profile = @fetched['profile']\n    @min_tls_version = @fetched['minTlsVersion']\n    @enabled_features = @fetched['enabledFeatures']\n    @custom_features = @fetched['customFeatures']\n    @fingerprint = @fetched['fingerprint']\n    @warnings = GoogleInSpec::Compute::Property::SslPolicyWarningsArray.parse(@fetched['warnings'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SslPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/sslPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_subnetwork.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/subnetwork_log_config'\nrequire 'google/compute/property/subnetwork_secondary_ip_ranges'\n\n# A provider to manage Compute Engine resources.\nclass ComputeSubnetwork < GcpResourceBase\n  name 'google_compute_subnetwork'\n  desc 'Subnetwork'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :gateway_address\n  attr_reader :id\n  attr_reader :ip_cidr_range\n  attr_reader :name\n  attr_reader :network\n  attr_reader :purpose\n  attr_reader :role\n  attr_reader :secondary_ip_ranges\n  attr_reader :private_ip_google_access\n  attr_reader :private_ipv6_google_access\n  attr_reader :region\n  attr_reader :log_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @gateway_address = @fetched['gatewayAddress']\n    @id = @fetched['id']\n    @ip_cidr_range = @fetched['ipCidrRange']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @purpose = @fetched['purpose']\n    @role = @fetched['role']\n    @secondary_ip_ranges = GoogleInSpec::Compute::Property::SubnetworkSecondaryIpRangesArray.parse(@fetched['secondaryIpRanges'], to_s)\n    @private_ip_google_access = @fetched['privateIpGoogleAccess']\n    @private_ipv6_google_access = @fetched['privateIpv6GoogleAccess']\n    @region = @fetched['region']\n    @log_config = GoogleInSpec::Compute::Property::SubnetworkLogConfig.new(@fetched['logConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subnetwork #{@params[:name]}\"\n  end\n\n  def creation_timestamp_date\n    @creation_timestamp\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_subnetwork_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Compute Engine IAM Binding resources.\nclass SubnetworkIamBinding < GcpResourceBase\n  name 'google_compute_subnetwork_iam_binding'\n  desc 'Subnetwork Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Subnetwork IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://compute.googleapis.com/compute/beta/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks/{{name}}/getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_subnetwork_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Compute Engine IAM Policy resources.\nclass SubnetworkIamPolicy < GcpResourceBase\n  name 'google_compute_subnetwork_iam_policy'\n  desc 'Subnetwork Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subnetwork IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://compute.googleapis.com/compute/beta/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks/{{name}}/getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_subnetworks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeSubnetworks < GcpResourceBase\n  name 'google_compute_subnetworks'\n  desc 'Subnetwork plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:gateway_addresses, field: :gateway_address)\n  filter_table_config.add(:subnetwork_ids, field: :subnetwork_id)\n  filter_table_config.add(:ip_cidr_ranges, field: :ip_cidr_range)\n  filter_table_config.add(:subnetwork_names, field: :subnetwork_name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:purposes, field: :purpose)\n  filter_table_config.add(:roles, field: :role)\n  filter_table_config.add(:secondary_ip_ranges, field: :secondary_ip_ranges)\n  filter_table_config.add(:private_ip_google_accesses, field: :private_ip_google_access)\n  filter_table_config.add(:private_ipv6_google_accesses, field: :private_ipv6_google_access)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:log_configs, field: :log_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'gatewayAddress' => ->(obj) { [:gateway_address, obj['gatewayAddress']] },\n      'id' => ->(obj) { [:subnetwork_id, obj['id']] },\n      'ipCidrRange' => ->(obj) { [:ip_cidr_range, obj['ipCidrRange']] },\n      'name' => ->(obj) { [:subnetwork_name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'purpose' => ->(obj) { [:purpose, obj['purpose']] },\n      'role' => ->(obj) { [:role, obj['role']] },\n      'secondaryIpRanges' => ->(obj) { [:secondary_ip_ranges, GoogleInSpec::Compute::Property::SubnetworkSecondaryIpRangesArray.parse(obj['secondaryIpRanges'], to_s)] },\n      'privateIpGoogleAccess' => ->(obj) { [:private_ip_google_access, obj['privateIpGoogleAccess']] },\n      'privateIpv6GoogleAccess' => ->(obj) { [:private_ipv6_google_access, obj['privateIpv6GoogleAccess']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'logConfig' => ->(obj) { [:log_config, GoogleInSpec::Compute::Property::SubnetworkLogConfig.new(obj['logConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/subnetworks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_grpc_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetGrpcProxys < GcpResourceBase\n  name 'google_compute_target_grpc_proxies'\n  desc 'TargetGrpcProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:url_maps, field: :url_map)\n  filter_table_config.add(:validate_for_proxylesses, field: :validate_for_proxyless)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n      'validateForProxyless' => ->(obj) { [:validate_for_proxyless, obj['validateForProxyless']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetGrpcProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_grpc_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetGrpcProxy < GcpResourceBase\n  name 'google_compute_target_grpc_proxy'\n  desc 'TargetGrpcProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :url_map\n  attr_reader :validate_for_proxyless\n  attr_reader :fingerprint\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @url_map = @fetched['urlMap']\n    @validate_for_proxyless = @fetched['validateForProxyless']\n    @fingerprint = @fetched['fingerprint']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetGrpcProxy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetGrpcProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_http_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetHttpProxys < GcpResourceBase\n  name 'google_compute_target_http_proxies'\n  desc 'TargetHttpProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:url_maps, field: :url_map)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_http_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetHttpProxy < GcpResourceBase\n  name 'google_compute_target_http_proxy'\n  desc 'TargetHttpProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :url_map\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @url_map = @fetched['urlMap']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetHttpProxy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_https_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetHttpsProxys < GcpResourceBase\n  name 'google_compute_target_https_proxies'\n  desc 'TargetHttpsProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:quic_overrides, field: :quic_override)\n  filter_table_config.add(:ssl_certificates, field: :ssl_certificates)\n  filter_table_config.add(:ssl_policies, field: :ssl_policy)\n  filter_table_config.add(:url_maps, field: :url_map)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'quicOverride' => ->(obj) { [:quic_override, obj['quicOverride']] },\n      'sslCertificates' => ->(obj) { [:ssl_certificates, obj['sslCertificates']] },\n      'sslPolicy' => ->(obj) { [:ssl_policy, obj['sslPolicy']] },\n      'urlMap' => ->(obj) { [:url_map, obj['urlMap']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpsProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_https_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetHttpsProxy < GcpResourceBase\n  name 'google_compute_target_https_proxy'\n  desc 'TargetHttpsProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :quic_override\n  attr_reader :ssl_certificates\n  attr_reader :ssl_policy\n  attr_reader :url_map\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @quic_override = @fetched['quicOverride']\n    @ssl_certificates = @fetched['sslCertificates']\n    @ssl_policy = @fetched['sslPolicy']\n    @url_map = @fetched['urlMap']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetHttpsProxy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetHttpsProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetInstance < GcpResourceBase\n  name 'google_compute_target_instance'\n  desc 'TargetInstance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :zone\n  attr_reader :nat_policy\n  attr_reader :instance\n  attr_reader :self_link\n  attr_reader :self_link_with_id\n  attr_reader :network\n  attr_reader :security_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @zone = @fetched['zone']\n    @nat_policy = @fetched['natPolicy']\n    @instance = @fetched['instance']\n    @self_link = @fetched['selfLink']\n    @self_link_with_id = @fetched['selfLinkWithId']\n    @network = @fetched['network']\n    @security_policy = @fetched['securityPolicy']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetInstance #{@params[:targetInstance]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/targetInstances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetInstances < GcpResourceBase\n  name 'google_compute_target_instances'\n  desc 'TargetInstance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:nat_policies, field: :nat_policy)\n  filter_table_config.add(:instances, field: :instance)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:self_link_with_ids, field: :self_link_with_id)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:security_policies, field: :security_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'natPolicy' => ->(obj) { [:nat_policy, obj['natPolicy']] },\n      'instance' => ->(obj) { [:instance, obj['instance']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'selfLinkWithId' => ->(obj) { [:self_link_with_id, obj['selfLinkWithId']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'securityPolicy' => ->(obj) { [:security_policy, obj['securityPolicy']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/targetInstances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_pool.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetPool < GcpResourceBase\n  name 'google_compute_target_pool'\n  desc 'TargetPool'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :backup_pool\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :failover_ratio\n  attr_reader :health_check\n  attr_reader :id\n  attr_reader :instances\n  attr_reader :name\n  attr_reader :session_affinity\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @backup_pool = @fetched['backupPool']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @failover_ratio = @fetched['failoverRatio']\n    @health_check = @fetched['healthCheck']\n    @id = @fetched['id']\n    @instances = @fetched['instances']\n    @name = @fetched['name']\n    @session_affinity = @fetched['sessionAffinity']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetPool #{@params[:name]}\"\n  end\n\n  RSpec::Matchers.alias_matcher :has_target_instance, :be_has_target_instance\n\n  def has_target_instance?(name, zone)\n    instances.any? { |instance_self_link| instance_self_link.end_with?(\"zones/#{zone}/instances/#{name}\") }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetPools/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetPools < GcpResourceBase\n  name 'google_compute_target_pools'\n  desc 'TargetPool plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:backup_pools, field: :backup_pool)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:failover_ratios, field: :failover_ratio)\n  filter_table_config.add(:health_checks, field: :health_check)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:instances, field: :instances)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:session_affinities, field: :session_affinity)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'backupPool' => ->(obj) { [:backup_pool, obj['backupPool']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'failoverRatio' => ->(obj) { [:failover_ratio, obj['failoverRatio']] },\n      'healthCheck' => ->(obj) { [:health_check, obj['healthCheck']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'instances' => ->(obj) { [:instances, obj['instances']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'sessionAffinity' => ->(obj) { [:session_affinity, obj['sessionAffinity']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetPools'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_ssl_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetSslProxys < GcpResourceBase\n  name 'google_compute_target_ssl_proxies'\n  desc 'TargetSslProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:services, field: :service)\n  filter_table_config.add(:ssl_certificates, field: :ssl_certificates)\n  filter_table_config.add(:certificate_maps, field: :certificate_map)\n  filter_table_config.add(:proxy_headers, field: :proxy_header)\n  filter_table_config.add(:ssl_policies, field: :ssl_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'service' => ->(obj) { [:service, obj['service']] },\n      'sslCertificates' => ->(obj) { [:ssl_certificates, obj['sslCertificates']] },\n      'certificateMap' => ->(obj) { [:certificate_map, obj['certificateMap']] },\n      'proxyHeader' => ->(obj) { [:proxy_header, obj['proxyHeader']] },\n      'sslPolicy' => ->(obj) { [:ssl_policy, obj['sslPolicy']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetSslProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_ssl_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetSslProxy < GcpResourceBase\n  name 'google_compute_target_ssl_proxy'\n  desc 'TargetSslProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :self_link\n  attr_reader :service\n  attr_reader :ssl_certificates\n  attr_reader :certificate_map\n  attr_reader :proxy_header\n  attr_reader :ssl_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @self_link = @fetched['selfLink']\n    @service = @fetched['service']\n    @ssl_certificates = @fetched['sslCertificates']\n    @certificate_map = @fetched['certificateMap']\n    @proxy_header = @fetched['proxyHeader']\n    @ssl_policy = @fetched['sslPolicy']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetSslProxy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetSslProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_tcp_proxies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetTcpProxys < GcpResourceBase\n  name 'google_compute_target_tcp_proxies'\n  desc 'TargetTcpProxy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:proxy_headers, field: :proxy_header)\n  filter_table_config.add(:services, field: :service)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'proxyHeader' => ->(obj) { [:proxy_header, obj['proxyHeader']] },\n      'service' => ->(obj) { [:service, obj['service']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetTcpProxies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_tcp_proxy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetTcpProxy < GcpResourceBase\n  name 'google_compute_target_tcp_proxy'\n  desc 'TargetTcpProxy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :proxy_header\n  attr_reader :service\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @proxy_header = @fetched['proxyHeader']\n    @service = @fetched['service']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetTcpProxy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/targetTcpProxies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_vpn_gateway.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/targetvpngateway_labels'\n\n# A provider to manage Compute Engine resources.\nclass ComputeTargetVpnGateway < GcpResourceBase\n  name 'google_compute_target_vpn_gateway'\n  desc 'TargetVpnGateway'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :region\n  attr_reader :network\n  attr_reader :tunnels\n  attr_reader :status\n  attr_reader :self_link\n  attr_reader :forwarding_rules\n  attr_reader :labels\n  attr_reader :label_fingerprint\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @region = @fetched['region']\n    @network = @fetched['network']\n    @tunnels = @fetched['tunnels']\n    @status = @fetched['status']\n    @self_link = @fetched['selfLink']\n    @forwarding_rules = @fetched['forwardingRules']\n    @labels = GoogleInSpec::Compute::Property::TargetVpnGatewayLabels.new(@fetched['labels'], to_s)\n    @label_fingerprint = @fetched['labelFingerprint']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TargetVpnGateway #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetVpnGateways/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_target_vpn_gateways.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeTargetVpnGateways < GcpResourceBase\n  name 'google_compute_target_vpn_gateways'\n  desc 'TargetVpnGateway plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:tunnels, field: :tunnels)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:forwarding_rules, field: :forwarding_rules)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'tunnels' => ->(obj) { [:tunnels, obj['tunnels']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'forwardingRules' => ->(obj) { [:forwarding_rules, obj['forwardingRules']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Compute::Property::TargetVpnGatewayLabels.new(obj['labels'], to_s)] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/targetVpnGateways'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_url_map.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/urlmap_default_route_action'\nrequire 'google/compute/property/urlmap_default_route_action_cors_policy'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_abort'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay'\nrequire 'google/compute/property/urlmap_default_route_action_fault_injection_policy_delay_fixed_delay'\nrequire 'google/compute/property/urlmap_default_route_action_request_mirror_policy'\nrequire 'google/compute/property/urlmap_default_route_action_retry_policy'\nrequire 'google/compute/property/urlmap_default_route_action_retry_policy_per_try_timeout'\nrequire 'google/compute/property/urlmap_default_route_action_timeout'\nrequire 'google/compute/property/urlmap_default_route_action_url_rewrite'\nrequire 'google/compute/property/urlmap_default_route_action_weighted_backend_services'\nrequire 'google/compute/property/urlmap_default_url_redirect'\nrequire 'google/compute/property/urlmap_header_action'\nrequire 'google/compute/property/urlmap_header_action_request_headers_to_add'\nrequire 'google/compute/property/urlmap_header_action_response_headers_to_add'\nrequire 'google/compute/property/urlmap_host_rules'\nrequire 'google/compute/property/urlmap_path_matchers'\nrequire 'google/compute/property/urlmap_tests'\n\n# A provider to manage Compute Engine resources.\nclass ComputeUrlMap < GcpResourceBase\n  name 'google_compute_url_map'\n  desc 'UrlMap'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :default_service\n  attr_reader :description\n  attr_reader :id\n  attr_reader :fingerprint\n  attr_reader :header_action\n  attr_reader :host_rules\n  attr_reader :name\n  attr_reader :path_matchers\n  attr_reader :tests\n  attr_reader :default_url_redirect\n  attr_reader :default_route_action\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @default_service = @fetched['defaultService']\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @fingerprint = @fetched['fingerprint']\n    @header_action = GoogleInSpec::Compute::Property::UrlMapHeaderAction.new(@fetched['headerAction'], to_s)\n    @host_rules = GoogleInSpec::Compute::Property::UrlMapHostRulesArray.parse(@fetched['hostRules'], to_s)\n    @name = @fetched['name']\n    @path_matchers = GoogleInSpec::Compute::Property::UrlMapPathMatchersArray.parse(@fetched['pathMatchers'], to_s)\n    @tests = GoogleInSpec::Compute::Property::UrlMapTestsArray.parse(@fetched['tests'], to_s)\n    @default_url_redirect = GoogleInSpec::Compute::Property::UrlMapDefaultUrlRedirect.new(@fetched['defaultUrlRedirect'], to_s)\n    @default_route_action = GoogleInSpec::Compute::Property::UrlMapDefaultRouteAction.new(@fetched['defaultRouteAction'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"UrlMap #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/urlMaps/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_url_maps.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeUrlMaps < GcpResourceBase\n  name 'google_compute_url_maps'\n  desc 'UrlMap plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:default_services, field: :default_service)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:fingerprints, field: :fingerprint)\n  filter_table_config.add(:header_actions, field: :header_action)\n  filter_table_config.add(:host_rules, field: :host_rules)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:path_matchers, field: :path_matchers)\n  filter_table_config.add(:tests, field: :tests)\n  filter_table_config.add(:default_url_redirects, field: :default_url_redirect)\n  filter_table_config.add(:default_route_actions, field: :default_route_action)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'defaultService' => ->(obj) { [:default_service, obj['defaultService']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'fingerprint' => ->(obj) { [:fingerprint, obj['fingerprint']] },\n      'headerAction' => ->(obj) { [:header_action, GoogleInSpec::Compute::Property::UrlMapHeaderAction.new(obj['headerAction'], to_s)] },\n      'hostRules' => ->(obj) { [:host_rules, GoogleInSpec::Compute::Property::UrlMapHostRulesArray.parse(obj['hostRules'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'pathMatchers' => ->(obj) { [:path_matchers, GoogleInSpec::Compute::Property::UrlMapPathMatchersArray.parse(obj['pathMatchers'], to_s)] },\n      'tests' => ->(obj) { [:tests, GoogleInSpec::Compute::Property::UrlMapTestsArray.parse(obj['tests'], to_s)] },\n      'defaultUrlRedirect' => ->(obj) { [:default_url_redirect, GoogleInSpec::Compute::Property::UrlMapDefaultUrlRedirect.new(obj['defaultUrlRedirect'], to_s)] },\n      'defaultRouteAction' => ->(obj) { [:default_route_action, GoogleInSpec::Compute::Property::UrlMapDefaultRouteAction.new(obj['defaultRouteAction'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/global/urlMaps'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_vpn_gateway.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/vpngateway_labels'\nrequire 'google/compute/property/vpngateway_vpn_interfaces'\n\n# A provider to manage Compute Engine resources.\nclass ComputeVpnGateway < GcpResourceBase\n  name 'google_compute_vpn_gateway'\n  desc 'VpnGateway'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :kind\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :region\n  attr_reader :network\n  attr_reader :self_link\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :vpn_interfaces\n  attr_reader :stack_type\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @kind = @fetched['kind']\n    @id = @fetched['id']\n    @creation_timestamp = @fetched['creationTimestamp']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @region = @fetched['region']\n    @network = @fetched['network']\n    @self_link = @fetched['selfLink']\n    @labels = GoogleInSpec::Compute::Property::VpnGatewayLabels.new(@fetched['labels'], to_s)\n    @label_fingerprint = @fetched['labelFingerprint']\n    @vpn_interfaces = GoogleInSpec::Compute::Property::VpnGatewayVpnInterfacesArray.parse(@fetched['vpnInterfaces'], to_s)\n    @stack_type = @fetched['stackType']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"VpnGateway #{@params[:vpnGateway]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/vpnGateways/{{vpn_gateway}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_vpn_gateways.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeVpnGateways < GcpResourceBase\n  name 'google_compute_vpn_gateways'\n  desc 'VpnGateway plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:self_links, field: :self_link)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:vpn_interfaces, field: :vpn_interfaces)\n  filter_table_config.add(:stack_types, field: :stack_type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, obj['creationTimestamp']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'selfLink' => ->(obj) { [:self_link, obj['selfLink']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Compute::Property::VpnGatewayLabels.new(obj['labels'], to_s)] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'vpnInterfaces' => ->(obj) { [:vpn_interfaces, GoogleInSpec::Compute::Property::VpnGatewayVpnInterfacesArray.parse(obj['vpnInterfaces'], to_s)] },\n      'stackType' => ->(obj) { [:stack_type, obj['stackType']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/vpnGateways'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_vpn_tunnel.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeVpnTunnel < GcpResourceBase\n  name 'google_compute_vpn_tunnel'\n  desc 'VpnTunnel'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :creation_timestamp\n  attr_reader :name\n  attr_reader :description\n  attr_reader :target_vpn_gateway\n  attr_reader :vpn_gateway\n  attr_reader :vpn_gateway_interface\n  attr_reader :peer_external_gateway\n  attr_reader :peer_external_gateway_interface\n  attr_reader :peer_gcp_gateway\n  attr_reader :router\n  attr_reader :peer_ip\n  attr_reader :shared_secret\n  attr_reader :shared_secret_hash\n  attr_reader :ike_version\n  attr_reader :local_traffic_selector\n  attr_reader :remote_traffic_selector\n  attr_reader :labels\n  attr_reader :label_fingerprint\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @target_vpn_gateway = @fetched['targetVpnGateway']\n    @vpn_gateway = @fetched['vpnGateway']\n    @vpn_gateway_interface = @fetched['vpnGatewayInterface']\n    @peer_external_gateway = @fetched['peerExternalGateway']\n    @peer_external_gateway_interface = @fetched['peerExternalGatewayInterface']\n    @peer_gcp_gateway = @fetched['peerGcpGateway']\n    @router = @fetched['router']\n    @peer_ip = @fetched['peerIp']\n    @shared_secret = @fetched['sharedSecret']\n    @shared_secret_hash = @fetched['sharedSecretHash']\n    @ike_version = @fetched['ikeVersion']\n    @local_traffic_selector = @fetched['localTrafficSelector']\n    @remote_traffic_selector = @fetched['remoteTrafficSelector']\n    @labels = @fetched['labels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"VpnTunnel #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/vpnTunnels/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_vpn_tunnels.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeVpnTunnels < GcpResourceBase\n  name 'google_compute_vpn_tunnels'\n  desc 'VpnTunnel plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:vpn_tunnel_names, field: :vpn_tunnel_name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:target_vpn_gateways, field: :target_vpn_gateway)\n  filter_table_config.add(:vpn_gateways, field: :vpn_gateway)\n  filter_table_config.add(:vpn_gateway_interfaces, field: :vpn_gateway_interface)\n  filter_table_config.add(:peer_external_gateways, field: :peer_external_gateway)\n  filter_table_config.add(:peer_external_gateway_interfaces, field: :peer_external_gateway_interface)\n  filter_table_config.add(:peer_gcp_gateways, field: :peer_gcp_gateway)\n  filter_table_config.add(:routers, field: :router)\n  filter_table_config.add(:peer_ips, field: :peer_ip)\n  filter_table_config.add(:shared_secrets, field: :shared_secret)\n  filter_table_config.add(:shared_secret_hashes, field: :shared_secret_hash)\n  filter_table_config.add(:ike_versions, field: :ike_version)\n  filter_table_config.add(:local_traffic_selectors, field: :local_traffic_selector)\n  filter_table_config.add(:remote_traffic_selectors, field: :remote_traffic_selector)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'name' => ->(obj) { [:vpn_tunnel_name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'targetVpnGateway' => ->(obj) { [:target_vpn_gateway, obj['targetVpnGateway']] },\n      'vpnGateway' => ->(obj) { [:vpn_gateway, obj['vpnGateway']] },\n      'vpnGatewayInterface' => ->(obj) { [:vpn_gateway_interface, obj['vpnGatewayInterface']] },\n      'peerExternalGateway' => ->(obj) { [:peer_external_gateway, obj['peerExternalGateway']] },\n      'peerExternalGatewayInterface' => ->(obj) { [:peer_external_gateway_interface, obj['peerExternalGatewayInterface']] },\n      'peerGcpGateway' => ->(obj) { [:peer_gcp_gateway, obj['peerGcpGateway']] },\n      'router' => ->(obj) { [:router, obj['router']] },\n      'peerIp' => ->(obj) { [:peer_ip, obj['peerIp']] },\n      'sharedSecret' => ->(obj) { [:shared_secret, obj['sharedSecret']] },\n      'sharedSecretHash' => ->(obj) { [:shared_secret_hash, obj['sharedSecretHash']] },\n      'ikeVersion' => ->(obj) { [:ike_version, obj['ikeVersion']] },\n      'localTrafficSelector' => ->(obj) { [:local_traffic_selector, obj['localTrafficSelector']] },\n      'remoteTrafficSelector' => ->(obj) { [:remote_traffic_selector, obj['remoteTrafficSelector']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/vpnTunnels'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_xpn_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeProjectXpnResources < GcpResourceBase\n  name 'google_compute_xpn_resources'\n  desc 'Project plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('resources')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/getXpnResources'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_zone.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/compute/property/zone_deprecated'\n\n# A provider to manage Compute Engine resources.\nclass ComputeZone < GcpResourceBase\n  name 'google_compute_zone'\n  desc 'Zone'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :deprecated\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :region\n  attr_reader :status\n  attr_reader :available_cpu_platforms\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @deprecated = GoogleInSpec::Compute::Property::ZoneDeprecated.new(@fetched['deprecated'], to_s)\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @region = @fetched['region']\n    @status = @fetched['status']\n    @available_cpu_platforms = @fetched['availableCpuPlatforms']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Zone #{@params[:name]}\"\n  end\n\n  # helper method for retrieving a region name\n  def region_name\n    @region&.split('/')&.last\n  end\n\n  def up?\n    @status == 'UP'\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_zone_operation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Compute Engine resources.\nclass ComputeZoneOperation < GcpResourceBase\n  name 'google_compute_zone_operation'\n  desc 'ZoneOperation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :creation_timestamp\n  attr_reader :description\n  attr_reader :id\n  attr_reader :name\n  attr_reader :status_message\n  attr_reader :target_id\n  attr_reader :status\n  attr_reader :user\n  attr_reader :insert_time\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :progress\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @creation_timestamp = parse_time_string(@fetched['creationTimestamp'])\n    @description = @fetched['description']\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @status_message = @fetched['statusMessage']\n    @target_id = @fetched['targetId']\n    @status = @fetched['status']\n    @user = @fetched['user']\n    @insert_time = @fetched['insertTime']\n    @start_time = @fetched['startTime']\n    @end_time = @fetched['endTime']\n    @progress = @fetched['progress']\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ZoneOperation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/operations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_zone_operations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeZoneOperations < GcpResourceBase\n  name 'google_compute_zone_operations'\n  desc 'ZoneOperation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:target_ids, field: :target_id)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:users, field: :user)\n  filter_table_config.add(:insert_times, field: :insert_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:progresses, field: :progress)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'targetId' => ->(obj) { [:target_id, obj['targetId']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'user' => ->(obj) { [:user, obj['user']] },\n      'insertTime' => ->(obj) { [:insert_time, obj['insertTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'progress' => ->(obj) { [:progress, obj['progress']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://compute.googleapis.com/compute/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones/{{zone}}/operations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_compute_zones.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ComputeZones < GcpResourceBase\n  name 'google_compute_zones'\n  desc 'Zone plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:creation_timestamps, field: :creation_timestamp)\n  filter_table_config.add(:deprecateds, field: :deprecated)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:zone_ids, field: :zone_id)\n  filter_table_config.add(:zone_names, field: :zone_name)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:zone_statuses, field: :zone_status)\n  filter_table_config.add(:available_cpu_platforms, field: :available_cpu_platforms)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'creationTimestamp' => ->(obj) { [:creation_timestamp, parse_time_string(obj['creationTimestamp'])] },\n      'deprecated' => ->(obj) { [:deprecated, GoogleInSpec::Compute::Property::ZoneDeprecated.new(obj['deprecated'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'id' => ->(obj) { [:zone_id, obj['id']] },\n      'name' => ->(obj) { [:zone_name, obj['name']] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'status' => ->(obj) { [:zone_status, obj['status']] },\n      'availableCpuPlatforms' => ->(obj) { [:available_cpu_platforms, obj['availableCpuPlatforms']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://compute.googleapis.com/compute/beta/'\n    else\n      'https://compute.googleapis.com/compute/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/zones'\n  end\nend\n"
  },
  {
    "path": "libraries/google_container_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/container/property/cluster_addons_config'\nrequire 'google/container/property/cluster_fleet'\nrequire 'google/container/property/cluster_addons_config_gce_persistent_disk_csi_driver_config'\nrequire 'google/container/property/cluster_addons_config_horizontal_pod_autoscaling'\nrequire 'google/container/property/cluster_addons_config_http_load_balancing'\nrequire 'google/container/property/cluster_addons_config_kubernetes_dashboard'\nrequire 'google/container/property/cluster_addons_config_network_policy_config'\nrequire 'google/container/property/cluster_binary_authorization'\nrequire 'google/container/property/cluster_conditions'\nrequire 'google/container/property/cluster_database_encryption'\nrequire 'google/container/property/cluster_default_max_pods_constraint'\nrequire 'google/container/property/cluster_ip_allocation_policy'\nrequire 'google/container/property/cluster_legacy_abac'\nrequire 'google/container/property/cluster_master_auth'\nrequire 'google/container/property/cluster_master_auth_client_certificate_config'\nrequire 'google/container/property/cluster_master_authorized_networks_config'\nrequire 'google/container/property/cluster_master_authorized_networks_config_cidr_blocks'\nrequire 'google/container/property/cluster_network_config'\nrequire 'google/container/property/cluster_network_policy'\nrequire 'google/container/property/cluster_node_config'\nrequire 'google/container/property/cluster_node_config_accelerators'\nrequire 'google/container/property/cluster_node_config_shielded_instance_config'\nrequire 'google/container/property/cluster_node_config_taints'\nrequire 'google/container/property/cluster_node_pools'\nrequire 'google/container/property/cluster_private_cluster_config'\nrequire 'google/container/property/cluster_release_channel'\nrequire 'google/container/property/cluster_shielded_nodes'\n\n# A provider to manage Google Kubernetes Engine resources.\nclass ContainerCluster < GcpResourceBase\n  name 'google_container_cluster'\n  desc 'Cluster'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :initial_node_count\n  attr_reader :node_config\n  attr_reader :master_auth\n  attr_reader :logging_service\n  attr_reader :monitoring_service\n  attr_reader :network\n  attr_reader :database_encryption\n  attr_reader :private_cluster_config\n  attr_reader :cluster_ipv4_cidr\n  attr_reader :enable_tpu\n  attr_reader :tpu_ipv4_cidr_block\n  attr_reader :addons_config\n  attr_reader :subnetwork\n  attr_reader :locations\n  attr_reader :resource_labels\n  attr_reader :label_fingerprint\n  attr_reader :legacy_abac\n  attr_reader :network_policy\n  attr_reader :default_max_pods_constraint\n  attr_reader :ip_allocation_policy\n  attr_reader :endpoint\n  attr_reader :initial_cluster_version\n  attr_reader :current_master_version\n  attr_reader :current_node_version\n  attr_reader :create_time\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :node_ipv4_cidr_size\n  attr_reader :services_ipv4_cidr\n  attr_reader :current_node_count\n  attr_reader :expire_time\n  attr_reader :conditions\n  attr_reader :master_authorized_networks_config\n  attr_reader :node_pools\n  attr_reader :binary_authorization\n  attr_reader :release_channel\n  attr_reader :shielded_nodes\n  attr_reader :network_config\n  attr_reader :enable_kubernetes_alpha\n  attr_reader :location\n  attr_reader :fleet\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @initial_node_count = @fetched['initialNodeCount']\n    @node_config = GoogleInSpec::Container::Property::ClusterNodeConfig.new(@fetched['nodeConfig'], to_s)\n    @master_auth = GoogleInSpec::Container::Property::ClusterMasterAuth.new(@fetched['masterAuth'], to_s)\n    @logging_service = @fetched['loggingService']\n    @monitoring_service = @fetched['monitoringService']\n    @network = @fetched['network']\n    @database_encryption = GoogleInSpec::Container::Property::ClusterDatabaseEncryption.new(@fetched['databaseEncryption'], to_s)\n    @private_cluster_config = GoogleInSpec::Container::Property::ClusterPrivateClusterConfig.new(@fetched['privateClusterConfig'], to_s)\n    @cluster_ipv4_cidr = @fetched['clusterIpv4Cidr']\n    @enable_tpu = @fetched['enableTpu']\n    @tpu_ipv4_cidr_block = @fetched['tpuIpv4CidrBlock']\n    @addons_config = GoogleInSpec::Container::Property::ClusterAddonsConfig.new(@fetched['addonsConfig'], to_s)\n    @subnetwork = @fetched['subnetwork']\n    @locations = @fetched['locations']\n    @resource_labels = @fetched['resourceLabels']\n    @label_fingerprint = @fetched['labelFingerprint']\n    @legacy_abac = GoogleInSpec::Container::Property::ClusterLegacyAbac.new(@fetched['legacyAbac'], to_s)\n    @network_policy = GoogleInSpec::Container::Property::ClusterNetworkPolicy.new(@fetched['networkPolicy'], to_s)\n    @default_max_pods_constraint = GoogleInSpec::Container::Property::ClusterDefaultMaxPodsConstraint.new(@fetched['defaultMaxPodsConstraint'], to_s)\n    @ip_allocation_policy = GoogleInSpec::Container::Property::ClusterIpAllocationPolicy.new(@fetched['ipAllocationPolicy'], to_s)\n    @endpoint = @fetched['endpoint']\n    @initial_cluster_version = @fetched['initialClusterVersion']\n    @current_master_version = @fetched['currentMasterVersion']\n    @current_node_version = @fetched['currentNodeVersion']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @node_ipv4_cidr_size = @fetched['nodeIpv4CidrSize']\n    @services_ipv4_cidr = @fetched['servicesIpv4Cidr']\n    @current_node_count = @fetched['currentNodeCount']\n    @expire_time = parse_time_string(@fetched['expireTime'])\n    @conditions = GoogleInSpec::Container::Property::ClusterConditionsArray.parse(@fetched['conditions'], to_s)\n    @master_authorized_networks_config = GoogleInSpec::Container::Property::ClusterMasterAuthorizedNetworksConfig.new(@fetched['masterAuthorizedNetworksConfig'], to_s)\n    @node_pools = GoogleInSpec::Container::Property::ClusterNodePoolsArray.parse(@fetched['nodePools'], to_s)\n    @binary_authorization = GoogleInSpec::Container::Property::ClusterBinaryAuthorization.new(@fetched['binaryAuthorization'], to_s)\n    @release_channel = GoogleInSpec::Container::Property::ClusterReleaseChannel.new(@fetched['releaseChannel'], to_s)\n    @shielded_nodes = GoogleInSpec::Container::Property::ClusterShieldedNodes.new(@fetched['shieldedNodes'], to_s)\n    @network_config = GoogleInSpec::Container::Property::ClusterNetworkConfig.new(@fetched['networkConfig'], to_s)\n    @fleet = GoogleInSpec::Container::Property::ClusterFleet.new(@fetched['clusterFleet'], to_s)\n    @enable_kubernetes_alpha = @fetched['enableKubernetesAlpha']\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Cluster #{@params[:name]}\"\n  end\n\n  def has_logging_enabled?\n    return false if !defined?(@logging_service)\n    return false if @logging_service.nil?\n    return true if /logging\\.googleapis\\.com/ =~ @logging_service\n    false\n  end\n\n  def has_monitoring_enabled?\n    return false if !defined?(@monitoring_service)\n    return false if @monitoring_service.nil?\n    return true if /monitoring\\.googleapis\\.com/ =~ @monitoring_service\n    false\n  end\n\n  def has_legacy_abac_disabled?\n    return nil if !defined?(@legacy_abac)\n    return true if @legacy_abac.to_h.empty?\n    false\n  end\n\n  def has_master_authorized_networks_enabled?\n    return false if !defined?(@master_authorized_networks_config)\n    return false if @master_authorized_networks_config.to_h.empty?\n    return false if !defined?(@master_authorized_networks_config.enabled)\n    return true if @master_authorized_networks_config.enabled == true\n    false\n  end\n\n  def has_resource_labels?\n    return false if !defined?(@resource_labels)\n    return false if @resource_labels.to_h.empty?\n    true\n  end\n\n  def has_basic_authorization?\n    return false if @master_auth.username.nil? and @master_auth.password.nil?\n    true\n  end\n\n  def has_network_policy_enabled?\n    return false if !defined?(@network_policy.enabled)\n    return true if  @network_policy.enabled==true\n    false\n  end\n\n  def has_master_auth_client_key?\n    return false if !defined?(@master_auth.client_key)\n    return false if @master_auth.client_key.nil?\n    return false if @master_auth.client_key==''\n    true\n  end\n\n  def has_ip_alias_enabled?\n    return false if !defined?(@ip_allocation_policy.use_ip_aliases)\n    return true if @ip_allocation_policy.use_ip_aliases==true\n    false\n  end\n\n  def has_pod_security_policy_config?\n    return false if !defined?(@pod_security_policy_config.enabled)\n    return true if @pod_security_policy_config.enabled==true\n    false\n  end\n\n  def private_cluster?\n    return false if !defined?(@private_cluster)\n    return true if @private_cluster==true\n    false\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_container_clusters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ContainerClusters < GcpResourceBase\n  name 'google_container_clusters'\n  desc 'Cluster plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:cluster_names, field: :cluster_name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:initial_node_counts, field: :initial_node_count)\n  filter_table_config.add(:node_configs, field: :node_config)\n  filter_table_config.add(:master_auths, field: :master_auth)\n  filter_table_config.add(:logging_services, field: :logging_service)\n  filter_table_config.add(:monitoring_services, field: :monitoring_service)\n  filter_table_config.add(:cluster_networks, field: :cluster_network)\n  filter_table_config.add(:database_encryptions, field: :database_encryption)\n  filter_table_config.add(:private_cluster_configs, field: :private_cluster_config)\n  filter_table_config.add(:cluster_ipv4_cidrs, field: :cluster_ipv4_cidr)\n  filter_table_config.add(:enable_tpus, field: :enable_tpu)\n  filter_table_config.add(:tpu_ipv4_cidr_blocks, field: :tpu_ipv4_cidr_block)\n  filter_table_config.add(:addons_configs, field: :addons_config)\n  filter_table_config.add(:subnetworks, field: :subnetwork)\n  filter_table_config.add(:locations, field: :locations)\n  filter_table_config.add(:resource_labels, field: :resource_labels)\n  filter_table_config.add(:label_fingerprints, field: :label_fingerprint)\n  filter_table_config.add(:legacy_abacs, field: :legacy_abac)\n  filter_table_config.add(:network_policies, field: :network_policy)\n  filter_table_config.add(:default_max_pods_constraints, field: :default_max_pods_constraint)\n  filter_table_config.add(:ip_allocation_policies, field: :ip_allocation_policy)\n  filter_table_config.add(:endpoints, field: :endpoint)\n  filter_table_config.add(:initial_cluster_versions, field: :initial_cluster_version)\n  filter_table_config.add(:current_master_versions, field: :current_master_version)\n  filter_table_config.add(:current_node_versions, field: :current_node_version)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:cluster_statuses, field: :cluster_status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:node_ipv4_cidr_sizes, field: :node_ipv4_cidr_size)\n  filter_table_config.add(:services_ipv4_cidrs, field: :services_ipv4_cidr)\n  filter_table_config.add(:current_node_counts, field: :current_node_count)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:master_authorized_networks_configs, field: :master_authorized_networks_config)\n  filter_table_config.add(:node_pools, field: :node_pools)\n  filter_table_config.add(:binary_authorizations, field: :binary_authorization)\n  filter_table_config.add(:release_channels, field: :release_channel)\n  filter_table_config.add(:shielded_nodes, field: :shielded_nodes)\n  filter_table_config.add(:network_configs, field: :network_config)\n  filter_table_config.add(:enable_kubernetes_alphas, field: :enable_kubernetes_alpha)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('clusters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:cluster_name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'initialNodeCount' => ->(obj) { [:initial_node_count, obj['initialNodeCount']] },\n      'nodeConfig' => ->(obj) { [:node_config, GoogleInSpec::Container::Property::ClusterNodeConfig.new(obj['nodeConfig'], to_s)] },\n      'masterAuth' => ->(obj) { [:master_auth, GoogleInSpec::Container::Property::ClusterMasterAuth.new(obj['masterAuth'], to_s)] },\n      'loggingService' => ->(obj) { [:logging_service, obj['loggingService']] },\n      'monitoringService' => ->(obj) { [:monitoring_service, obj['monitoringService']] },\n      'network' => ->(obj) { [:cluster_network, obj['network']] },\n      'databaseEncryption' => ->(obj) { [:database_encryption, GoogleInSpec::Container::Property::ClusterDatabaseEncryption.new(obj['databaseEncryption'], to_s)] },\n      'privateClusterConfig' => ->(obj) { [:private_cluster_config, GoogleInSpec::Container::Property::ClusterPrivateClusterConfig.new(obj['privateClusterConfig'], to_s)] },\n      'clusterIpv4Cidr' => ->(obj) { [:cluster_ipv4_cidr, obj['clusterIpv4Cidr']] },\n      'enableTpu' => ->(obj) { [:enable_tpu, obj['enableTpu']] },\n      'tpuIpv4CidrBlock' => ->(obj) { [:tpu_ipv4_cidr_block, obj['tpuIpv4CidrBlock']] },\n      'addonsConfig' => ->(obj) { [:addons_config, GoogleInSpec::Container::Property::ClusterAddonsConfig.new(obj['addonsConfig'], to_s)] },\n      'subnetwork' => ->(obj) { [:subnetwork, obj['subnetwork']] },\n      'locations' => ->(obj) { [:locations, obj['locations']] },\n      'resourceLabels' => ->(obj) { [:resource_labels, obj['resourceLabels']] },\n      'labelFingerprint' => ->(obj) { [:label_fingerprint, obj['labelFingerprint']] },\n      'legacyAbac' => ->(obj) { [:legacy_abac, GoogleInSpec::Container::Property::ClusterLegacyAbac.new(obj['legacyAbac'], to_s)] },\n      'networkPolicy' => ->(obj) { [:network_policy, GoogleInSpec::Container::Property::ClusterNetworkPolicy.new(obj['networkPolicy'], to_s)] },\n      'defaultMaxPodsConstraint' => ->(obj) { [:default_max_pods_constraint, GoogleInSpec::Container::Property::ClusterDefaultMaxPodsConstraint.new(obj['defaultMaxPodsConstraint'], to_s)] },\n      'ipAllocationPolicy' => ->(obj) { [:ip_allocation_policy, GoogleInSpec::Container::Property::ClusterIpAllocationPolicy.new(obj['ipAllocationPolicy'], to_s)] },\n      'endpoint' => ->(obj) { [:endpoint, obj['endpoint']] },\n      'initialClusterVersion' => ->(obj) { [:initial_cluster_version, obj['initialClusterVersion']] },\n      'currentMasterVersion' => ->(obj) { [:current_master_version, obj['currentMasterVersion']] },\n      'currentNodeVersion' => ->(obj) { [:current_node_version, obj['currentNodeVersion']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'status' => ->(obj) { [:cluster_status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'nodeIpv4CidrSize' => ->(obj) { [:node_ipv4_cidr_size, obj['nodeIpv4CidrSize']] },\n      'servicesIpv4Cidr' => ->(obj) { [:services_ipv4_cidr, obj['servicesIpv4Cidr']] },\n      'currentNodeCount' => ->(obj) { [:current_node_count, obj['currentNodeCount']] },\n      'expireTime' => ->(obj) { [:expire_time, parse_time_string(obj['expireTime'])] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Container::Property::ClusterConditionsArray.parse(obj['conditions'], to_s)] },\n      'masterAuthorizedNetworksConfig' => ->(obj) { [:master_authorized_networks_config, GoogleInSpec::Container::Property::ClusterMasterAuthorizedNetworksConfig.new(obj['masterAuthorizedNetworksConfig'], to_s)] },\n      'nodePools' => ->(obj) { [:node_pools, GoogleInSpec::Container::Property::ClusterNodePoolsArray.parse(obj['nodePools'], to_s)] },\n      'binaryAuthorization' => ->(obj) { [:binary_authorization, GoogleInSpec::Container::Property::ClusterBinaryAuthorization.new(obj['binaryAuthorization'], to_s)] },\n      'releaseChannel' => ->(obj) { [:release_channel, GoogleInSpec::Container::Property::ClusterReleaseChannel.new(obj['releaseChannel'], to_s)] },\n      'shieldedNodes' => ->(obj) { [:shielded_nodes, GoogleInSpec::Container::Property::ClusterShieldedNodes.new(obj['shieldedNodes'], to_s)] },\n      'networkConfig' => ->(obj) { [:network_config, GoogleInSpec::Container::Property::ClusterNetworkConfig.new(obj['networkConfig'], to_s)] },\n      'enableKubernetesAlpha' => ->(obj) { [:enable_kubernetes_alpha, obj['enableKubernetesAlpha']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters'\n  end\nend\n"
  },
  {
    "path": "libraries/google_container_node_pool.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/container/property/nodepool_autoscaling'\nrequire 'google/container/property/nodepool_conditions'\nrequire 'google/container/property/nodepool_config'\nrequire 'google/container/property/nodepool_config_accelerators'\nrequire 'google/container/property/nodepool_config_shielded_instance_config'\nrequire 'google/container/property/nodepool_config_taints'\nrequire 'google/container/property/nodepool_config_workload_meta_config'\nrequire 'google/container/property/nodepool_management'\nrequire 'google/container/property/nodepool_management_upgrade_options'\nrequire 'google/container/property/nodepool_max_pods_constraint'\n\n# A provider to manage Google Kubernetes Engine resources.\nclass ContainerNodePool < GcpResourceBase\n  name 'google_container_node_pool'\n  desc 'NodePool'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :config\n  attr_reader :initial_node_count\n  attr_reader :status\n  attr_reader :status_message\n  attr_reader :version\n  attr_reader :autoscaling\n  attr_reader :management\n  attr_reader :max_pods_constraint\n  attr_reader :conditions\n  attr_reader :pod_ipv4_cidr_size\n  attr_reader :cluster\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @config = GoogleInSpec::Container::Property::NodePoolConfig.new(@fetched['config'], to_s)\n    @initial_node_count = @fetched['initialNodeCount']\n    @status = @fetched['status']\n    @status_message = @fetched['statusMessage']\n    @version = @fetched['version']\n    @autoscaling = GoogleInSpec::Container::Property::NodePoolAutoscaling.new(@fetched['autoscaling'], to_s)\n    @management = GoogleInSpec::Container::Property::NodePoolManagement.new(@fetched['management'], to_s)\n    @max_pods_constraint = GoogleInSpec::Container::Property::NodePoolMaxPodsConstraint.new(@fetched['maxPodsConstraint'], to_s)\n    @conditions = GoogleInSpec::Container::Property::NodePoolConditionsArray.parse(@fetched['conditions'], to_s)\n    @pod_ipv4_cidr_size = @fetched['podIpv4CidrSize']\n    @cluster = @fetched['cluster']\n    @location = @fetched['location']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NodePool #{@params[:nodepool_name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://container.googleapis.com/v1beta1/'\n    else\n      'https://container.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{cluster_name}}/nodePools/{{nodepool_name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_container_node_pools.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ContainerNodePools < GcpResourceBase\n  name 'google_container_node_pools'\n  desc 'NodePool plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:node_pool_names, field: :node_pool_name)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:initial_node_counts, field: :initial_node_count)\n  filter_table_config.add(:node_pool_statuses, field: :node_pool_status)\n  filter_table_config.add(:status_messages, field: :status_message)\n  filter_table_config.add(:versions, field: :version)\n  filter_table_config.add(:autoscalings, field: :autoscaling)\n  filter_table_config.add(:managements, field: :management)\n  filter_table_config.add(:max_pods_constraints, field: :max_pods_constraint)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:pod_ipv4_cidr_sizes, field: :pod_ipv4_cidr_size)\n  filter_table_config.add(:clusters, field: :cluster)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('nodePools')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:node_pool_name, obj['name']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::Container::Property::NodePoolConfig.new(obj['config'], to_s)] },\n      'initialNodeCount' => ->(obj) { [:initial_node_count, obj['initialNodeCount']] },\n      'status' => ->(obj) { [:node_pool_status, obj['status']] },\n      'statusMessage' => ->(obj) { [:status_message, obj['statusMessage']] },\n      'version' => ->(obj) { [:version, obj['version']] },\n      'autoscaling' => ->(obj) { [:autoscaling, GoogleInSpec::Container::Property::NodePoolAutoscaling.new(obj['autoscaling'], to_s)] },\n      'management' => ->(obj) { [:management, GoogleInSpec::Container::Property::NodePoolManagement.new(obj['management'], to_s)] },\n      'maxPodsConstraint' => ->(obj) { [:max_pods_constraint, GoogleInSpec::Container::Property::NodePoolMaxPodsConstraint.new(obj['maxPodsConstraint'], to_s)] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Container::Property::NodePoolConditionsArray.parse(obj['conditions'], to_s)] },\n      'podIpv4CidrSize' => ->(obj) { [:pod_ipv4_cidr_size, obj['podIpv4CidrSize']] },\n      'cluster' => ->(obj) { [:cluster, obj['cluster']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://container.googleapis.com/v1beta1/'\n    else\n      'https://container.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/clusters/{{cluster_name}}/nodePools'\n  end\nend\n"
  },
  {
    "path": "libraries/google_container_server_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/container/property/serverconfig_channels'\n\n# A provider to manage Google Kubernetes Engine resources.\nclass ContainerServerConfig < GcpResourceBase\n  name 'google_container_server_config'\n  desc 'ServerConfig'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :default_cluster_version\n  attr_reader :default_image_type\n  attr_reader :valid_image_types\n  attr_reader :valid_node_versions\n  attr_reader :valid_master_versions\n  attr_reader :channels\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @default_cluster_version = @fetched['defaultClusterVersion']\n    @default_image_type = @fetched['defaultImageType']\n    @valid_image_types = @fetched['validImageTypes']\n    @valid_node_versions = @fetched['validNodeVersions']\n    @valid_master_versions = @fetched['validMasterVersions']\n    @channels = GoogleInSpec::Container::Property::ServerConfigChannelsArray.parse(@fetched['channels'], to_s)\n    @location = @fetched['location']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServerConfig #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://container.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/serverConfig/'\n  end\nend\n"
  },
  {
    "path": "libraries/google_data_fusion_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/datafusion/property/instance_accelerators'\nrequire 'google/datafusion/property/instance_available_version'\nrequire 'google/datafusion/property/instance_crypto_key_config'\nrequire 'google/datafusion/property/instance_event_publish_config'\nrequire 'google/datafusion/property/instance_labels'\nrequire 'google/datafusion/property/instance_maintenance_policy'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_exclusion_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window'\nrequire 'google/datafusion/property/instance_maintenance_policy_maintenance_window_recurring_time_window_window'\nrequire 'google/datafusion/property/instance_network_config'\nrequire 'google/datafusion/property/instance_network_config_private_service_connect_config'\nrequire 'google/datafusion/property/instance_options'\n\n# A provider to manage Cloud Data Fusion resources.\nclass DataFusionInstance < GcpResourceBase\n  name 'google_data_fusion_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :type\n  attr_reader :enable_stackdriver_logging\n  attr_reader :enable_stackdriver_monitoring\n  attr_reader :private_instance\n  attr_reader :network_config\n  attr_reader :labels\n  attr_reader :options\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :state\n  attr_reader :state_message\n  attr_reader :service_endpoint\n  attr_reader :zone\n  attr_reader :version\n  attr_reader :service_account\n  attr_reader :display_name\n  attr_reader :available_version\n  attr_reader :api_endpoint\n  attr_reader :gcs_bucket\n  attr_reader :accelerators\n  attr_reader :p4_service_account\n  attr_reader :tenant_project_id\n  attr_reader :dataproc_service_account\n  attr_reader :enable_rbac\n  attr_reader :crypto_key_config\n  attr_reader :disabled_reason\n  attr_reader :event_publish_config\n  attr_reader :enable_zone_separation\n  attr_reader :satisfies_pzs\n  attr_reader :workforce_identity_service_endpoint\n  attr_reader :patch_revision\n  attr_reader :dataplex_data_lineage_integration_enabled\n  attr_reader :maintenance_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @type = @fetched['type']\n    @enable_stackdriver_logging = @fetched['enableStackdriverLogging']\n    @enable_stackdriver_monitoring = @fetched['enableStackdriverMonitoring']\n    @private_instance = @fetched['privateInstance']\n    @network_config = GoogleInSpec::DataFusion::Property::InstanceNetworkConfig.new(@fetched['networkConfig'], to_s)\n    @labels = GoogleInSpec::DataFusion::Property::InstanceLabels.new(@fetched['labels'], to_s)\n    @options = GoogleInSpec::DataFusion::Property::InstanceOptions.new(@fetched['options'], to_s)\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @state = @fetched['state']\n    @state_message = @fetched['stateMessage']\n    @service_endpoint = @fetched['serviceEndpoint']\n    @zone = @fetched['zone']\n    @version = @fetched['version']\n    @service_account = @fetched['serviceAccount']\n    @display_name = @fetched['displayName']\n    @available_version = GoogleInSpec::DataFusion::Property::InstanceAvailableVersionArray.parse(@fetched['availableVersion'], to_s)\n    @api_endpoint = @fetched['apiEndpoint']\n    @gcs_bucket = @fetched['gcsBucket']\n    @accelerators = GoogleInSpec::DataFusion::Property::InstanceAcceleratorsArray.parse(@fetched['accelerators'], to_s)\n    @p4_service_account = @fetched['p4ServiceAccount']\n    @tenant_project_id = @fetched['tenantProjectId']\n    @dataproc_service_account = @fetched['dataprocServiceAccount']\n    @enable_rbac = @fetched['enableRbac']\n    @crypto_key_config = GoogleInSpec::DataFusion::Property::InstanceCryptoKeyConfig.new(@fetched['cryptoKeyConfig'], to_s)\n    @disabled_reason = @fetched['disabledReason']\n    @event_publish_config = GoogleInSpec::DataFusion::Property::InstanceEventPublishConfig.new(@fetched['eventPublishConfig'], to_s)\n    @enable_zone_separation = @fetched['enableZoneSeparation']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @workforce_identity_service_endpoint = @fetched['workforceIdentityServiceEndpoint']\n    @patch_revision = @fetched['patchRevision']\n    @dataplex_data_lineage_integration_enabled = @fetched['dataplexDataLineageIntegrationEnabled']\n    @maintenance_policy = GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicy.new(@fetched['maintenancePolicy'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://datafusion.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_data_fusion_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataFusionInstances < GcpResourceBase\n  name 'google_data_fusion_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:enable_stackdriver_loggings, field: :enable_stackdriver_logging)\n  filter_table_config.add(:enable_stackdriver_monitorings, field: :enable_stackdriver_monitoring)\n  filter_table_config.add(:private_instances, field: :private_instance)\n  filter_table_config.add(:network_configs, field: :network_config)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:options, field: :options)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:state_messages, field: :state_message)\n  filter_table_config.add(:service_endpoints, field: :service_endpoint)\n  filter_table_config.add(:zones, field: :zone)\n  filter_table_config.add(:versions, field: :version)\n  filter_table_config.add(:service_accounts, field: :service_account)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:available_versions, field: :available_version)\n  filter_table_config.add(:api_endpoints, field: :api_endpoint)\n  filter_table_config.add(:gcs_buckets, field: :gcs_bucket)\n  filter_table_config.add(:accelerators, field: :accelerators)\n  filter_table_config.add(:p4_service_accounts, field: :p4_service_account)\n  filter_table_config.add(:tenant_project_ids, field: :tenant_project_id)\n  filter_table_config.add(:dataproc_service_accounts, field: :dataproc_service_account)\n  filter_table_config.add(:enable_rbacs, field: :enable_rbac)\n  filter_table_config.add(:crypto_key_configs, field: :crypto_key_config)\n  filter_table_config.add(:disabled_reasons, field: :disabled_reason)\n  filter_table_config.add(:event_publish_configs, field: :event_publish_config)\n  filter_table_config.add(:enable_zone_separations, field: :enable_zone_separation)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:workforce_identity_service_endpoints, field: :workforce_identity_service_endpoint)\n  filter_table_config.add(:patch_revisions, field: :patch_revision)\n  filter_table_config.add(:dataplex_data_lineage_integration_enableds, field: :dataplex_data_lineage_integration_enabled)\n  filter_table_config.add(:maintenance_policies, field: :maintenance_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'enableStackdriverLogging' => ->(obj) { [:enable_stackdriver_logging, obj['enableStackdriverLogging']] },\n      'enableStackdriverMonitoring' => ->(obj) { [:enable_stackdriver_monitoring, obj['enableStackdriverMonitoring']] },\n      'privateInstance' => ->(obj) { [:private_instance, obj['privateInstance']] },\n      'networkConfig' => ->(obj) { [:network_config, GoogleInSpec::DataFusion::Property::InstanceNetworkConfig.new(obj['networkConfig'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::DataFusion::Property::InstanceLabels.new(obj['labels'], to_s)] },\n      'options' => ->(obj) { [:options, GoogleInSpec::DataFusion::Property::InstanceOptions.new(obj['options'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'stateMessage' => ->(obj) { [:state_message, obj['stateMessage']] },\n      'serviceEndpoint' => ->(obj) { [:service_endpoint, obj['serviceEndpoint']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n      'version' => ->(obj) { [:version, obj['version']] },\n      'serviceAccount' => ->(obj) { [:service_account, obj['serviceAccount']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'availableVersion' => ->(obj) { [:available_version, GoogleInSpec::DataFusion::Property::InstanceAvailableVersionArray.parse(obj['availableVersion'], to_s)] },\n      'apiEndpoint' => ->(obj) { [:api_endpoint, obj['apiEndpoint']] },\n      'gcsBucket' => ->(obj) { [:gcs_bucket, obj['gcsBucket']] },\n      'accelerators' => ->(obj) { [:accelerators, GoogleInSpec::DataFusion::Property::InstanceAcceleratorsArray.parse(obj['accelerators'], to_s)] },\n      'p4ServiceAccount' => ->(obj) { [:p4_service_account, obj['p4ServiceAccount']] },\n      'tenantProjectId' => ->(obj) { [:tenant_project_id, obj['tenantProjectId']] },\n      'dataprocServiceAccount' => ->(obj) { [:dataproc_service_account, obj['dataprocServiceAccount']] },\n      'enableRbac' => ->(obj) { [:enable_rbac, obj['enableRbac']] },\n      'cryptoKeyConfig' => ->(obj) { [:crypto_key_config, GoogleInSpec::DataFusion::Property::InstanceCryptoKeyConfig.new(obj['cryptoKeyConfig'], to_s)] },\n      'disabledReason' => ->(obj) { [:disabled_reason, obj['disabledReason']] },\n      'eventPublishConfig' => ->(obj) { [:event_publish_config, GoogleInSpec::DataFusion::Property::InstanceEventPublishConfig.new(obj['eventPublishConfig'], to_s)] },\n      'enableZoneSeparation' => ->(obj) { [:enable_zone_separation, obj['enableZoneSeparation']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'workforceIdentityServiceEndpoint' => ->(obj) { [:workforce_identity_service_endpoint, obj['workforceIdentityServiceEndpoint']] },\n      'patchRevision' => ->(obj) { [:patch_revision, obj['patchRevision']] },\n      'dataplexDataLineageIntegrationEnabled' => ->(obj) { [:dataplex_data_lineage_integration_enabled, obj['dataplexDataLineageIntegrationEnabled']] },\n      'maintenancePolicy' => ->(obj) { [:maintenance_policy, GoogleInSpec::DataFusion::Property::InstanceMaintenancePolicy.new(obj['maintenancePolicy'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://datafusion.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataflow_project_location_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataflow/property/projectlocationjob_environment'\nrequire 'google/dataflow/property/projectlocationjob_environment_debug_options'\nrequire 'google/dataflow/property/projectlocationjob_environment_debug_options_data_sampling'\nrequire 'google/dataflow/property/projectlocationjob_environment_internal_experiments'\nrequire 'google/dataflow/property/projectlocationjob_environment_sdk_pipeline_options'\nrequire 'google/dataflow/property/projectlocationjob_environment_user_agent'\nrequire 'google/dataflow/property/projectlocationjob_environment_version'\nrequire 'google/dataflow/property/projectlocationjob_environment_worker_pools'\nrequire 'google/dataflow/property/projectlocationjob_execution_info'\nrequire 'google/dataflow/property/projectlocationjob_execution_info_stages'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_big_table_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_bigquery_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_datastore_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_file_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_pubsub_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_sdk_version'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_sdk_version_bugs'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_spanner_details'\nrequire 'google/dataflow/property/projectlocationjob_job_metadata_user_display_properties'\nrequire 'google/dataflow/property/projectlocationjob_labels'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_display_data'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_execution_pipeline_stage'\nrequire 'google/dataflow/property/projectlocationjob_pipeline_description_original_pipeline_transform'\nrequire 'google/dataflow/property/projectlocationjob_runtime_updatable_params'\nrequire 'google/dataflow/property/projectlocationjob_stage_states'\nrequire 'google/dataflow/property/projectlocationjob_steps'\nrequire 'google/dataflow/property/projectlocationjob_transform_name_mapping'\n\n# A provider to manage dataflow resources.\nclass DataflowProjectLocationJob < GcpResourceBase\n  name 'google_dataflow_project_location_job'\n  desc 'ProjectLocationJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :project_id\n  attr_reader :name\n  attr_reader :type\n  attr_reader :environment\n  attr_reader :steps\n  attr_reader :steps_location\n  attr_reader :current_state\n  attr_reader :current_state_time\n  attr_reader :requested_state\n  attr_reader :execution_info\n  attr_reader :create_time\n  attr_reader :replace_job_id\n  attr_reader :transform_name_mapping\n  attr_reader :client_request_id\n  attr_reader :replaced_by_job_id\n  attr_reader :temp_files\n  attr_reader :labels\n  attr_reader :location\n  attr_reader :pipeline_description\n  attr_reader :stage_states\n  attr_reader :job_metadata\n  attr_reader :start_time\n  attr_reader :created_from_snapshot_id\n  attr_reader :satisfies_pzs\n  attr_reader :runtime_updatable_params\n  attr_reader :satisfies_pzi\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @project_id = @fetched['projectId']\n    @name = @fetched['name']\n    @type = @fetched['type']\n    @environment = GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironment.new(@fetched['environment'], to_s)\n    @steps = GoogleInSpec::Dataflow::Property::ProjectLocationJobStepsArray.parse(@fetched['steps'], to_s)\n    @steps_location = @fetched['stepsLocation']\n    @current_state = @fetched['currentState']\n    @current_state_time = @fetched['currentStateTime']\n    @requested_state = @fetched['requestedState']\n    @execution_info = GoogleInSpec::Dataflow::Property::ProjectLocationJobExecutionInfo.new(@fetched['executionInfo'], to_s)\n    @create_time = @fetched['createTime']\n    @replace_job_id = @fetched['replaceJobId']\n    @transform_name_mapping = GoogleInSpec::Dataflow::Property::ProjectLocationJobTransformNameMapping.new(@fetched['transformNameMapping'], to_s)\n    @client_request_id = @fetched['clientRequestId']\n    @replaced_by_job_id = @fetched['replacedByJobId']\n    @temp_files = @fetched['tempFiles']\n    @labels = GoogleInSpec::Dataflow::Property::ProjectLocationJobLabels.new(@fetched['labels'], to_s)\n    @location = @fetched['location']\n    @pipeline_description = GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescription.new(@fetched['pipelineDescription'], to_s)\n    @stage_states = GoogleInSpec::Dataflow::Property::ProjectLocationJobStageStatesArray.parse(@fetched['stageStates'], to_s)\n    @job_metadata = GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadata.new(@fetched['jobMetadata'], to_s)\n    @start_time = @fetched['startTime']\n    @created_from_snapshot_id = @fetched['createdFromSnapshotId']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @runtime_updatable_params = GoogleInSpec::Dataflow::Property::ProjectLocationJobRuntimeUpdatableParams.new(@fetched['runtimeUpdatableParams'], to_s)\n    @satisfies_pzi = @fetched['satisfiesPzi']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectLocationJob #{@params[:jobId]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataflow.googleapis.com/v1b3/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/jobs/{{job}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataflow_project_location_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataflowProjectLocationJobs < GcpResourceBase\n  name 'google_dataflow_project_location_jobs'\n  desc 'ProjectLocationJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:project_ids, field: :project_id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:environments, field: :environment)\n  filter_table_config.add(:steps, field: :steps)\n  filter_table_config.add(:steps_locations, field: :steps_location)\n  filter_table_config.add(:current_states, field: :current_state)\n  filter_table_config.add(:current_state_times, field: :current_state_time)\n  filter_table_config.add(:requested_states, field: :requested_state)\n  filter_table_config.add(:execution_infos, field: :execution_info)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:replace_job_ids, field: :replace_job_id)\n  filter_table_config.add(:transform_name_mappings, field: :transform_name_mapping)\n  filter_table_config.add(:client_request_ids, field: :client_request_id)\n  filter_table_config.add(:replaced_by_job_ids, field: :replaced_by_job_id)\n  filter_table_config.add(:temp_files, field: :temp_files)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:pipeline_descriptions, field: :pipeline_description)\n  filter_table_config.add(:stage_states, field: :stage_states)\n  filter_table_config.add(:job_metadata, field: :job_metadata)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:created_from_snapshot_ids, field: :created_from_snapshot_id)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:runtime_updatable_params, field: :runtime_updatable_params)\n  filter_table_config.add(:satisfies_pzis, field: :satisfies_pzi)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'projectId' => ->(obj) { [:project_id, obj['projectId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'environment' => ->(obj) { [:environment, GoogleInSpec::Dataflow::Property::ProjectLocationJobEnvironment.new(obj['environment'], to_s)] },\n      'steps' => ->(obj) { [:steps, GoogleInSpec::Dataflow::Property::ProjectLocationJobStepsArray.parse(obj['steps'], to_s)] },\n      'stepsLocation' => ->(obj) { [:steps_location, obj['stepsLocation']] },\n      'currentState' => ->(obj) { [:current_state, obj['currentState']] },\n      'currentStateTime' => ->(obj) { [:current_state_time, obj['currentStateTime']] },\n      'requestedState' => ->(obj) { [:requested_state, obj['requestedState']] },\n      'executionInfo' => ->(obj) { [:execution_info, GoogleInSpec::Dataflow::Property::ProjectLocationJobExecutionInfo.new(obj['executionInfo'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'replaceJobId' => ->(obj) { [:replace_job_id, obj['replaceJobId']] },\n      'transformNameMapping' => ->(obj) { [:transform_name_mapping, GoogleInSpec::Dataflow::Property::ProjectLocationJobTransformNameMapping.new(obj['transformNameMapping'], to_s)] },\n      'clientRequestId' => ->(obj) { [:client_request_id, obj['clientRequestId']] },\n      'replacedByJobId' => ->(obj) { [:replaced_by_job_id, obj['replacedByJobId']] },\n      'tempFiles' => ->(obj) { [:temp_files, obj['tempFiles']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataflow::Property::ProjectLocationJobLabels.new(obj['labels'], to_s)] },\n      'location' => ->(obj) { [:location, obj['location']] },\n      'pipelineDescription' => ->(obj) { [:pipeline_description, GoogleInSpec::Dataflow::Property::ProjectLocationJobPipelineDescription.new(obj['pipelineDescription'], to_s)] },\n      'stageStates' => ->(obj) { [:stage_states, GoogleInSpec::Dataflow::Property::ProjectLocationJobStageStatesArray.parse(obj['stageStates'], to_s)] },\n      'jobMetadata' => ->(obj) { [:job_metadata, GoogleInSpec::Dataflow::Property::ProjectLocationJobJobMetadata.new(obj['jobMetadata'], to_s)] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'createdFromSnapshotId' => ->(obj) { [:created_from_snapshot_id, obj['createdFromSnapshotId']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'runtimeUpdatableParams' => ->(obj) { [:runtime_updatable_params, GoogleInSpec::Dataflow::Property::ProjectLocationJobRuntimeUpdatableParams.new(obj['runtimeUpdatableParams'], to_s)] },\n      'satisfiesPzi' => ->(obj) { [:satisfies_pzi, obj['satisfiesPzi']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataflow.googleapis.com/v1b3/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/jobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_autoscaling_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocAutoscalingPolicys < GcpResourceBase\n  name 'google_dataproc_autoscaling_policies'\n  desc 'AutoscalingPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:basic_algorithms, field: :basic_algorithm)\n  filter_table_config.add(:worker_configs, field: :worker_config)\n  filter_table_config.add(:secondary_worker_configs, field: :secondary_worker_config)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('policies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'basicAlgorithm' => ->(obj) { [:basic_algorithm, GoogleInSpec::Dataproc::Property::AutoscalingPolicyBasicAlgorithm.new(obj['basicAlgorithm'], to_s)] },\n      'workerConfig' => ->(obj) { [:worker_config, GoogleInSpec::Dataproc::Property::AutoscalingPolicyWorkerConfig.new(obj['workerConfig'], to_s)] },\n      'secondaryWorkerConfig' => ->(obj) { [:secondary_worker_config, GoogleInSpec::Dataproc::Property::AutoscalingPolicySecondaryWorkerConfig.new(obj['secondaryWorkerConfig'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataproc::Property::AutoscalingPolicyLabels.new(obj['labels'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/autoscalingPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_autoscaling_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/autoscalingpolicy_basic_algorithm'\nrequire 'google/dataproc/property/autoscalingpolicy_basic_algorithm_spark_standalone_config'\nrequire 'google/dataproc/property/autoscalingpolicy_basic_algorithm_yarn_config'\nrequire 'google/dataproc/property/autoscalingpolicy_labels'\nrequire 'google/dataproc/property/autoscalingpolicy_secondary_worker_config'\nrequire 'google/dataproc/property/autoscalingpolicy_worker_config'\n\n# A provider to manage Dataproc resources.\nclass DataprocAutoscalingPolicy < GcpResourceBase\n  name 'google_dataproc_autoscaling_policy'\n  desc 'AutoscalingPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :name\n  attr_reader :basic_algorithm\n  attr_reader :worker_config\n  attr_reader :secondary_worker_config\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @basic_algorithm = GoogleInSpec::Dataproc::Property::AutoscalingPolicyBasicAlgorithm.new(@fetched['basicAlgorithm'], to_s)\n    @worker_config = GoogleInSpec::Dataproc::Property::AutoscalingPolicyWorkerConfig.new(@fetched['workerConfig'], to_s)\n    @secondary_worker_config = GoogleInSpec::Dataproc::Property::AutoscalingPolicySecondaryWorkerConfig.new(@fetched['secondaryWorkerConfig'], to_s)\n    @labels = GoogleInSpec::Dataproc::Property::AutoscalingPolicyLabels.new(@fetched['labels'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"AutoscalingPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_batch.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/batch_environment_config'\nrequire 'google/dataproc/property/batch_environment_config_execution_config'\nrequire 'google/dataproc/property/batch_environment_config_peripherals_config'\nrequire 'google/dataproc/property/batch_environment_config_peripherals_config_spark_history_server_config'\nrequire 'google/dataproc/property/batch_labels'\nrequire 'google/dataproc/property/batch_pyspark_batch'\nrequire 'google/dataproc/property/batch_runtime_config'\nrequire 'google/dataproc/property/batch_runtime_config_properties'\nrequire 'google/dataproc/property/batch_runtime_config_repository_config'\nrequire 'google/dataproc/property/batch_runtime_config_repository_config_pypi_repository_config'\nrequire 'google/dataproc/property/batch_runtime_info'\nrequire 'google/dataproc/property/batch_runtime_info_approximate_usage'\nrequire 'google/dataproc/property/batch_runtime_info_current_usage'\nrequire 'google/dataproc/property/batch_runtime_info_endpoints'\nrequire 'google/dataproc/property/batch_spark_batch'\nrequire 'google/dataproc/property/batch_spark_r_batch'\nrequire 'google/dataproc/property/batch_spark_sql_batch'\nrequire 'google/dataproc/property/batch_spark_sql_batch_query_variables'\nrequire 'google/dataproc/property/batch_state_history'\n\n# A provider to manage Dataproc resources.\nclass DataprocBatch < GcpResourceBase\n  name 'google_dataproc_batch'\n  desc 'Batch'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :uuid\n  attr_reader :create_time\n  attr_reader :pyspark_batch\n  attr_reader :spark_batch\n  attr_reader :spark_r_batch\n  attr_reader :spark_sql_batch\n  attr_reader :runtime_info\n  attr_reader :state\n  attr_reader :state_message\n  attr_reader :state_time\n  attr_reader :creator\n  attr_reader :labels\n  attr_reader :runtime_config\n  attr_reader :environment_config\n  attr_reader :operation\n  attr_reader :state_history\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @uuid = @fetched['uuid']\n    @create_time = @fetched['createTime']\n    @pyspark_batch = GoogleInSpec::Dataproc::Property::BatchPysparkBatch.new(@fetched['pysparkBatch'], to_s)\n    @spark_batch = GoogleInSpec::Dataproc::Property::BatchSparkBatch.new(@fetched['sparkBatch'], to_s)\n    @spark_r_batch = GoogleInSpec::Dataproc::Property::BatchSparkRBatch.new(@fetched['sparkRBatch'], to_s)\n    @spark_sql_batch = GoogleInSpec::Dataproc::Property::BatchSparkSqlBatch.new(@fetched['sparkSqlBatch'], to_s)\n    @runtime_info = GoogleInSpec::Dataproc::Property::BatchRuntimeInfo.new(@fetched['runtimeInfo'], to_s)\n    @state = @fetched['state']\n    @state_message = @fetched['stateMessage']\n    @state_time = @fetched['stateTime']\n    @creator = @fetched['creator']\n    @labels = GoogleInSpec::Dataproc::Property::BatchLabels.new(@fetched['labels'], to_s)\n    @runtime_config = GoogleInSpec::Dataproc::Property::BatchRuntimeConfig.new(@fetched['runtimeConfig'], to_s)\n    @environment_config = GoogleInSpec::Dataproc::Property::BatchEnvironmentConfig.new(@fetched['environmentConfig'], to_s)\n    @operation = @fetched['operation']\n    @state_history = GoogleInSpec::Dataproc::Property::BatchStateHistoryArray.parse(@fetched['stateHistory'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Batch #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_batches.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocBatchs < GcpResourceBase\n  name 'google_dataproc_batches'\n  desc 'Batch plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:uuids, field: :uuid)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:pyspark_batches, field: :pyspark_batch)\n  filter_table_config.add(:spark_batches, field: :spark_batch)\n  filter_table_config.add(:spark_r_batches, field: :spark_r_batch)\n  filter_table_config.add(:spark_sql_batches, field: :spark_sql_batch)\n  filter_table_config.add(:runtime_infos, field: :runtime_info)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:state_messages, field: :state_message)\n  filter_table_config.add(:state_times, field: :state_time)\n  filter_table_config.add(:creators, field: :creator)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:runtime_configs, field: :runtime_config)\n  filter_table_config.add(:environment_configs, field: :environment_config)\n  filter_table_config.add(:operations, field: :operation)\n  filter_table_config.add(:state_histories, field: :state_history)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('batches')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'uuid' => ->(obj) { [:uuid, obj['uuid']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'pysparkBatch' => ->(obj) { [:pyspark_batch, GoogleInSpec::Dataproc::Property::BatchPysparkBatch.new(obj['pysparkBatch'], to_s)] },\n      'sparkBatch' => ->(obj) { [:spark_batch, GoogleInSpec::Dataproc::Property::BatchSparkBatch.new(obj['sparkBatch'], to_s)] },\n      'sparkRBatch' => ->(obj) { [:spark_r_batch, GoogleInSpec::Dataproc::Property::BatchSparkRBatch.new(obj['sparkRBatch'], to_s)] },\n      'sparkSqlBatch' => ->(obj) { [:spark_sql_batch, GoogleInSpec::Dataproc::Property::BatchSparkSqlBatch.new(obj['sparkSqlBatch'], to_s)] },\n      'runtimeInfo' => ->(obj) { [:runtime_info, GoogleInSpec::Dataproc::Property::BatchRuntimeInfo.new(obj['runtimeInfo'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'stateMessage' => ->(obj) { [:state_message, obj['stateMessage']] },\n      'stateTime' => ->(obj) { [:state_time, obj['stateTime']] },\n      'creator' => ->(obj) { [:creator, obj['creator']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataproc::Property::BatchLabels.new(obj['labels'], to_s)] },\n      'runtimeConfig' => ->(obj) { [:runtime_config, GoogleInSpec::Dataproc::Property::BatchRuntimeConfig.new(obj['runtimeConfig'], to_s)] },\n      'environmentConfig' => ->(obj) { [:environment_config, GoogleInSpec::Dataproc::Property::BatchEnvironmentConfig.new(obj['environmentConfig'], to_s)] },\n      'operation' => ->(obj) { [:operation, obj['operation']] },\n      'stateHistory' => ->(obj) { [:state_history, GoogleInSpec::Dataproc::Property::BatchStateHistoryArray.parse(obj['stateHistory'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/batches'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_cluster.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/cluster_config'\nrequire 'google/dataproc/property/cluster_config_encryption_config'\nrequire 'google/dataproc/property/cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/cluster_config_initialization_actions'\nrequire 'google/dataproc/property/cluster_config_master_config'\nrequire 'google/dataproc/property/cluster_config_master_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_master_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/cluster_config_security_config'\nrequire 'google/dataproc/property/cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/cluster_config_software_config'\nrequire 'google/dataproc/property/cluster_config_worker_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_disk_config'\nrequire 'google/dataproc/property/cluster_config_worker_config_managed_group_config'\n\n# A provider to manage Dataproc resources.\nclass DataprocCluster < GcpResourceBase\n  name 'google_dataproc_cluster'\n  desc 'Cluster'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :cluster_name\n  attr_reader :labels\n  attr_reader :config\n  attr_reader :region\n  attr_reader :project_id\n  attr_reader :virtual_cluster_config\n  attr_reader :status\n  attr_reader :status_history\n  attr_reader :cluster_uuid\n  attr_reader :metrics\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @cluster_name = @fetched['clusterName']\n    @labels = @fetched['labels']\n    @config = GoogleInSpec::Dataproc::Property::ClusterConfig.new(@fetched['config'], to_s)\n    @region = @fetched['region']\n    @project_id = @fetched['projectId']\n    @virtual_cluster_config = @fetched['virtualClusterConfig']\n    @status = @fetched['status']\n    @status_history = @fetched['statusHistory']\n    @cluster_uuid = @fetched['clusterUuid']\n    @metrics = @fetched['metrics']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Cluster #{@params[:clusterName]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dataproc.googleapis.com/v1beta2/'\n    else\n      'https://dataproc.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/clusters/{{cluster_name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_clusters.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocClusters < GcpResourceBase\n  name 'google_dataproc_clusters'\n  desc 'Cluster plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:cluster_names, field: :cluster_name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:regions, field: :region)\n  filter_table_config.add(:project_ids, field: :project_id)\n  filter_table_config.add(:virtual_cluster_configs, field: :virtual_cluster_config)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_histories, field: :status_history)\n  filter_table_config.add(:cluster_uuids, field: :cluster_uuid)\n  filter_table_config.add(:metrics, field: :metrics)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('clusters')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'clusterName' => ->(obj) { [:cluster_name, obj['clusterName']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::Dataproc::Property::ClusterConfig.new(obj['config'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n      'projectId' => ->(obj) { [:project_id, obj['projectId']] },\n      'virtualClusterConfig' => ->(obj) { [:virtual_cluster_config, obj['virtualClusterConfig']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'statusHistory' => ->(obj) { [:status_history, obj['statusHistory']] },\n      'clusterUuid' => ->(obj) { [:cluster_uuid, obj['clusterUuid']] },\n      'metrics' => ->(obj) { [:metrics, obj['metrics']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dataproc.googleapis.com/v1beta2/'\n    else\n      'https://dataproc.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/regions/{{region}}/clusters'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/job_driver_scheduling_config'\nrequire 'google/dataproc/property/job_flink_job'\nrequire 'google/dataproc/property/job_flink_job_logging_config'\nrequire 'google/dataproc/property/job_flink_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_flink_job_properties'\nrequire 'google/dataproc/property/job_hadoop_job'\nrequire 'google/dataproc/property/job_hadoop_job_logging_config'\nrequire 'google/dataproc/property/job_hadoop_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_hadoop_job_properties'\nrequire 'google/dataproc/property/job_hive_job'\nrequire 'google/dataproc/property/job_hive_job_properties'\nrequire 'google/dataproc/property/job_hive_job_query_list'\nrequire 'google/dataproc/property/job_hive_job_script_variables'\nrequire 'google/dataproc/property/job_labels'\nrequire 'google/dataproc/property/job_pig_job'\nrequire 'google/dataproc/property/job_pig_job_logging_config'\nrequire 'google/dataproc/property/job_pig_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_pig_job_properties'\nrequire 'google/dataproc/property/job_pig_job_query_list'\nrequire 'google/dataproc/property/job_pig_job_script_variables'\nrequire 'google/dataproc/property/job_placement'\nrequire 'google/dataproc/property/job_placement_cluster_labels'\nrequire 'google/dataproc/property/job_presto_job'\nrequire 'google/dataproc/property/job_presto_job_logging_config'\nrequire 'google/dataproc/property/job_presto_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_presto_job_properties'\nrequire 'google/dataproc/property/job_presto_job_query_list'\nrequire 'google/dataproc/property/job_pyspark_job'\nrequire 'google/dataproc/property/job_pyspark_job_logging_config'\nrequire 'google/dataproc/property/job_pyspark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_pyspark_job_properties'\nrequire 'google/dataproc/property/job_reference'\nrequire 'google/dataproc/property/job_scheduling'\nrequire 'google/dataproc/property/job_spark_job'\nrequire 'google/dataproc/property/job_spark_job_logging_config'\nrequire 'google/dataproc/property/job_spark_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_job_properties'\nrequire 'google/dataproc/property/job_spark_r_job'\nrequire 'google/dataproc/property/job_spark_r_job_logging_config'\nrequire 'google/dataproc/property/job_spark_r_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_r_job_properties'\nrequire 'google/dataproc/property/job_spark_sql_job'\nrequire 'google/dataproc/property/job_spark_sql_job_logging_config'\nrequire 'google/dataproc/property/job_spark_sql_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_spark_sql_job_properties'\nrequire 'google/dataproc/property/job_spark_sql_job_query_list'\nrequire 'google/dataproc/property/job_spark_sql_job_script_variables'\nrequire 'google/dataproc/property/job_status'\nrequire 'google/dataproc/property/job_status_history'\nrequire 'google/dataproc/property/job_trino_job'\nrequire 'google/dataproc/property/job_trino_job_logging_config'\nrequire 'google/dataproc/property/job_trino_job_logging_config_driver_log_levels'\nrequire 'google/dataproc/property/job_trino_job_properties'\nrequire 'google/dataproc/property/job_trino_job_query_list'\nrequire 'google/dataproc/property/job_yarn_applications'\n\n# A provider to manage Dataproc resources.\nclass DataprocJob < GcpResourceBase\n  name 'google_dataproc_job'\n  desc 'Job'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :reference\n  attr_reader :placement\n  attr_reader :hadoop_job\n  attr_reader :spark_job\n  attr_reader :pyspark_job\n  attr_reader :hive_job\n  attr_reader :pig_job\n  attr_reader :spark_r_job\n  attr_reader :spark_sql_job\n  attr_reader :presto_job\n  attr_reader :trino_job\n  attr_reader :flink_job\n  attr_reader :status\n  attr_reader :status_history\n  attr_reader :yarn_applications\n  attr_reader :driver_output_resource_uri\n  attr_reader :driver_control_files_uri\n  attr_reader :labels\n  attr_reader :scheduling\n  attr_reader :job_uuid\n  attr_reader :done\n  attr_reader :driver_scheduling_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @reference = GoogleInSpec::Dataproc::Property::JobReference.new(@fetched['reference'], to_s)\n    @placement = GoogleInSpec::Dataproc::Property::JobPlacement.new(@fetched['placement'], to_s)\n    @hadoop_job = GoogleInSpec::Dataproc::Property::JobHadoopJob.new(@fetched['hadoopJob'], to_s)\n    @spark_job = GoogleInSpec::Dataproc::Property::JobSparkJob.new(@fetched['sparkJob'], to_s)\n    @pyspark_job = GoogleInSpec::Dataproc::Property::JobPysparkJob.new(@fetched['pysparkJob'], to_s)\n    @hive_job = GoogleInSpec::Dataproc::Property::JobHiveJob.new(@fetched['hiveJob'], to_s)\n    @pig_job = GoogleInSpec::Dataproc::Property::JobPigJob.new(@fetched['pigJob'], to_s)\n    @spark_r_job = GoogleInSpec::Dataproc::Property::JobSparkRJob.new(@fetched['sparkRJob'], to_s)\n    @spark_sql_job = GoogleInSpec::Dataproc::Property::JobSparkSqlJob.new(@fetched['sparkSqlJob'], to_s)\n    @presto_job = GoogleInSpec::Dataproc::Property::JobPrestoJob.new(@fetched['prestoJob'], to_s)\n    @trino_job = GoogleInSpec::Dataproc::Property::JobTrinoJob.new(@fetched['trinoJob'], to_s)\n    @flink_job = GoogleInSpec::Dataproc::Property::JobFlinkJob.new(@fetched['flinkJob'], to_s)\n    @status = GoogleInSpec::Dataproc::Property::JobStatus.new(@fetched['status'], to_s)\n    @status_history = GoogleInSpec::Dataproc::Property::JobStatusHistoryArray.parse(@fetched['statusHistory'], to_s)\n    @yarn_applications = GoogleInSpec::Dataproc::Property::JobYarnApplicationsArray.parse(@fetched['yarnApplications'], to_s)\n    @driver_output_resource_uri = @fetched['driverOutputResourceUri']\n    @driver_control_files_uri = @fetched['driverControlFilesUri']\n    @labels = GoogleInSpec::Dataproc::Property::JobLabels.new(@fetched['labels'], to_s)\n    @scheduling = GoogleInSpec::Dataproc::Property::JobScheduling.new(@fetched['scheduling'], to_s)\n    @job_uuid = @fetched['jobUuid']\n    @done = @fetched['done']\n    @driver_scheduling_config = GoogleInSpec::Dataproc::Property::JobDriverSchedulingConfig.new(@fetched['driverSchedulingConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Job #{@params[:jobId]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project_id}}/regions/{{region}}/jobs/{{job_id}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocJobs < GcpResourceBase\n  name 'google_dataproc_jobs'\n  desc 'Job plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:references, field: :reference)\n  filter_table_config.add(:placements, field: :placement)\n  filter_table_config.add(:hadoop_jobs, field: :hadoop_job)\n  filter_table_config.add(:spark_jobs, field: :spark_job)\n  filter_table_config.add(:pyspark_jobs, field: :pyspark_job)\n  filter_table_config.add(:hive_jobs, field: :hive_job)\n  filter_table_config.add(:pig_jobs, field: :pig_job)\n  filter_table_config.add(:spark_r_jobs, field: :spark_r_job)\n  filter_table_config.add(:spark_sql_jobs, field: :spark_sql_job)\n  filter_table_config.add(:presto_jobs, field: :presto_job)\n  filter_table_config.add(:trino_jobs, field: :trino_job)\n  filter_table_config.add(:flink_jobs, field: :flink_job)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:status_histories, field: :status_history)\n  filter_table_config.add(:yarn_applications, field: :yarn_applications)\n  filter_table_config.add(:driver_output_resource_uris, field: :driver_output_resource_uri)\n  filter_table_config.add(:driver_control_files_uris, field: :driver_control_files_uri)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:schedulings, field: :scheduling)\n  filter_table_config.add(:job_uuids, field: :job_uuid)\n  filter_table_config.add(:dones, field: :done)\n  filter_table_config.add(:driver_scheduling_configs, field: :driver_scheduling_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'reference' => ->(obj) { [:reference, GoogleInSpec::Dataproc::Property::JobReference.new(obj['reference'], to_s)] },\n      'placement' => ->(obj) { [:placement, GoogleInSpec::Dataproc::Property::JobPlacement.new(obj['placement'], to_s)] },\n      'hadoopJob' => ->(obj) { [:hadoop_job, GoogleInSpec::Dataproc::Property::JobHadoopJob.new(obj['hadoopJob'], to_s)] },\n      'sparkJob' => ->(obj) { [:spark_job, GoogleInSpec::Dataproc::Property::JobSparkJob.new(obj['sparkJob'], to_s)] },\n      'pysparkJob' => ->(obj) { [:pyspark_job, GoogleInSpec::Dataproc::Property::JobPysparkJob.new(obj['pysparkJob'], to_s)] },\n      'hiveJob' => ->(obj) { [:hive_job, GoogleInSpec::Dataproc::Property::JobHiveJob.new(obj['hiveJob'], to_s)] },\n      'pigJob' => ->(obj) { [:pig_job, GoogleInSpec::Dataproc::Property::JobPigJob.new(obj['pigJob'], to_s)] },\n      'sparkRJob' => ->(obj) { [:spark_r_job, GoogleInSpec::Dataproc::Property::JobSparkRJob.new(obj['sparkRJob'], to_s)] },\n      'sparkSqlJob' => ->(obj) { [:spark_sql_job, GoogleInSpec::Dataproc::Property::JobSparkSqlJob.new(obj['sparkSqlJob'], to_s)] },\n      'prestoJob' => ->(obj) { [:presto_job, GoogleInSpec::Dataproc::Property::JobPrestoJob.new(obj['prestoJob'], to_s)] },\n      'trinoJob' => ->(obj) { [:trino_job, GoogleInSpec::Dataproc::Property::JobTrinoJob.new(obj['trinoJob'], to_s)] },\n      'flinkJob' => ->(obj) { [:flink_job, GoogleInSpec::Dataproc::Property::JobFlinkJob.new(obj['flinkJob'], to_s)] },\n      'status' => ->(obj) { [:status, GoogleInSpec::Dataproc::Property::JobStatus.new(obj['status'], to_s)] },\n      'statusHistory' => ->(obj) { [:status_history, GoogleInSpec::Dataproc::Property::JobStatusHistoryArray.parse(obj['statusHistory'], to_s)] },\n      'yarnApplications' => ->(obj) { [:yarn_applications, GoogleInSpec::Dataproc::Property::JobYarnApplicationsArray.parse(obj['yarnApplications'], to_s)] },\n      'driverOutputResourceUri' => ->(obj) { [:driver_output_resource_uri, obj['driverOutputResourceUri']] },\n      'driverControlFilesUri' => ->(obj) { [:driver_control_files_uri, obj['driverControlFilesUri']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataproc::Property::JobLabels.new(obj['labels'], to_s)] },\n      'scheduling' => ->(obj) { [:scheduling, GoogleInSpec::Dataproc::Property::JobScheduling.new(obj['scheduling'], to_s)] },\n      'jobUuid' => ->(obj) { [:job_uuid, obj['jobUuid']] },\n      'done' => ->(obj) { [:done, obj['done']] },\n      'driverSchedulingConfig' => ->(obj) { [:driver_scheduling_config, GoogleInSpec::Dataproc::Property::JobDriverSchedulingConfig.new(obj['driverSchedulingConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project_id}}/regions/{{region}}/jobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_federation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataprocmetastore/property/federation_backend_metastores'\nrequire 'google/dataprocmetastore/property/federation_labels'\n\n# A provider to manage Dataproc metastore resources.\nclass DataprocMetastoreFederation < GcpResourceBase\n  name 'google_dataproc_metastore_federation'\n  desc 'Federation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :version\n  attr_reader :backend_metastores\n  attr_reader :endpoint_uri\n  attr_reader :state\n  attr_reader :state_message\n  attr_reader :uid\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::DataprocMetastore::Property::FederationLabels.new(@fetched['labels'], to_s)\n    @version = @fetched['version']\n    @backend_metastores = GoogleInSpec::DataprocMetastore::Property::FederationBackendMetastores.new(@fetched['backendMetastores'], to_s)\n    @endpoint_uri = @fetched['endpointUri']\n    @state = @fetched['state']\n    @state_message = @fetched['stateMessage']\n    @uid = @fetched['uid']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Federation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_federations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocMetastoreFederations < GcpResourceBase\n  name 'google_dataproc_metastore_federations'\n  desc 'Federation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:versions, field: :version)\n  filter_table_config.add(:backend_metastores, field: :backend_metastores)\n  filter_table_config.add(:endpoint_uris, field: :endpoint_uri)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:state_messages, field: :state_message)\n  filter_table_config.add(:uids, field: :uid)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('federations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::DataprocMetastore::Property::FederationLabels.new(obj['labels'], to_s)] },\n      'version' => ->(obj) { [:version, obj['version']] },\n      'backendMetastores' => ->(obj) { [:backend_metastores, GoogleInSpec::DataprocMetastore::Property::FederationBackendMetastores.new(obj['backendMetastores'], to_s)] },\n      'endpointUri' => ->(obj) { [:endpoint_uri, obj['endpointUri']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'stateMessage' => ->(obj) { [:state_message, obj['stateMessage']] },\n      'uid' => ->(obj) { [:uid, obj['uid']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/federations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataprocmetastore/property/service_encryption_config'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_auxiliary_versions'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_config_overrides'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config'\nrequire 'google/dataprocmetastore/property/service_hive_metastore_config_kerberos_config_keytab'\nrequire 'google/dataprocmetastore/property/service_labels'\nrequire 'google/dataprocmetastore/property/service_maintenance_window'\nrequire 'google/dataprocmetastore/property/service_metadata_integration'\nrequire 'google/dataprocmetastore/property/service_metadata_integration_data_catalog_config'\nrequire 'google/dataprocmetastore/property/service_metadata_integration_dataplex_config'\nrequire 'google/dataprocmetastore/property/service_metadata_integration_dataplex_config_lake_resources'\nrequire 'google/dataprocmetastore/property/service_metadata_management_activity'\nrequire 'google/dataprocmetastore/property/service_metadata_management_activity_metadata_exports'\nrequire 'google/dataprocmetastore/property/service_metadata_management_activity_restores'\nrequire 'google/dataprocmetastore/property/service_network_config'\nrequire 'google/dataprocmetastore/property/service_network_config_consumers'\nrequire 'google/dataprocmetastore/property/service_scaling_config'\nrequire 'google/dataprocmetastore/property/service_scaling_config_autoscaling_config'\nrequire 'google/dataprocmetastore/property/service_scaling_config_autoscaling_config_limit_config'\nrequire 'google/dataprocmetastore/property/service_scheduled_backup'\nrequire 'google/dataprocmetastore/property/service_scheduled_backup_latest_backup'\nrequire 'google/dataprocmetastore/property/service_telemetry_config'\n\n# A provider to manage Dataproc metastore resources.\nclass DataprocMetastoreService < GcpResourceBase\n  name 'google_dataproc_metastore_service'\n  desc 'Service'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :hive_metastore_config\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :network\n  attr_reader :endpoint_uri\n  attr_reader :port\n  attr_reader :state\n  attr_reader :state_message\n  attr_reader :artifact_gcs_uri\n  attr_reader :tier\n  attr_reader :metadata_integration\n  attr_reader :maintenance_window\n  attr_reader :uid\n  attr_reader :metadata_management_activity\n  attr_reader :release_channel\n  attr_reader :encryption_config\n  attr_reader :network_config\n  attr_reader :database_type\n  attr_reader :telemetry_config\n  attr_reader :scaling_config\n  attr_reader :scheduled_backup\n  attr_reader :deletion_protection\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @hive_metastore_config = GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfig.new(@fetched['hiveMetastoreConfig'], to_s)\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::DataprocMetastore::Property::ServiceLabels.new(@fetched['labels'], to_s)\n    @network = @fetched['network']\n    @endpoint_uri = @fetched['endpointUri']\n    @port = @fetched['port']\n    @state = @fetched['state']\n    @state_message = @fetched['stateMessage']\n    @artifact_gcs_uri = @fetched['artifactGcsUri']\n    @tier = @fetched['tier']\n    @metadata_integration = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataIntegration.new(@fetched['metadataIntegration'], to_s)\n    @maintenance_window = GoogleInSpec::DataprocMetastore::Property::ServiceMaintenanceWindow.new(@fetched['maintenanceWindow'], to_s)\n    @uid = @fetched['uid']\n    @metadata_management_activity = GoogleInSpec::DataprocMetastore::Property::ServiceMetadataManagementActivity.new(@fetched['metadataManagementActivity'], to_s)\n    @release_channel = @fetched['releaseChannel']\n    @encryption_config = GoogleInSpec::DataprocMetastore::Property::ServiceEncryptionConfig.new(@fetched['encryptionConfig'], to_s)\n    @network_config = GoogleInSpec::DataprocMetastore::Property::ServiceNetworkConfig.new(@fetched['networkConfig'], to_s)\n    @database_type = @fetched['databaseType']\n    @telemetry_config = GoogleInSpec::DataprocMetastore::Property::ServiceTelemetryConfig.new(@fetched['telemetryConfig'], to_s)\n    @scaling_config = GoogleInSpec::DataprocMetastore::Property::ServiceScalingConfig.new(@fetched['scalingConfig'], to_s)\n    @scheduled_backup = GoogleInSpec::DataprocMetastore::Property::ServiceScheduledBackup.new(@fetched['scheduledBackup'], to_s)\n    @deletion_protection = @fetched['deletionProtection']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Service #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1beta/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_service_backup.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_encryption_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_auxiliary_versions'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_config_overrides'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_hive_metastore_config_kerberos_config_keytab'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_labels'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_maintenance_window'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_data_catalog_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_integration_dataplex_config_lake_resources'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_metadata_exports'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_metadata_management_activity_restores'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_network_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_network_config_consumers'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scaling_config_autoscaling_config_limit_config'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_scheduled_backup_latest_backup'\nrequire 'google/dataprocmetastore/property/servicebackup_service_revision_telemetry_config'\n\n# A provider to manage Dataproc metastore resources.\nclass DataprocMetastoreServiceBackup < GcpResourceBase\n  name 'google_dataproc_metastore_service_backup'\n  desc 'ServiceBackup'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :end_time\n  attr_reader :state\n  attr_reader :service_revision\n  attr_reader :description\n  attr_reader :restoring_services\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @end_time = @fetched['endTime']\n    @state = @fetched['state']\n    @service_revision = GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevision.new(@fetched['serviceRevision'], to_s)\n    @description = @fetched['description']\n    @restoring_services = @fetched['restoringServices']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServiceBackup #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1beta/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_service_backups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocMetastoreServiceBackups < GcpResourceBase\n  name 'google_dataproc_metastore_service_backups'\n  desc 'ServiceBackup plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:service_revisions, field: :service_revision)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:restoring_services, field: :restoring_services)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('backups')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'serviceRevision' => ->(obj) { [:service_revision, GoogleInSpec::DataprocMetastore::Property::ServiceBackupServiceRevision.new(obj['serviceRevision'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'restoringServices' => ->(obj) { [:restoring_services, obj['restoringServices']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1beta/'\n  end\n\n  def resource_base_url\n    '{{parent}}/backups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_metastore_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocMetastoreServices < GcpResourceBase\n  name 'google_dataproc_metastore_services'\n  desc 'Service plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:hive_metastore_configs, field: :hive_metastore_config)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:endpoint_uris, field: :endpoint_uri)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:state_messages, field: :state_message)\n  filter_table_config.add(:artifact_gcs_uris, field: :artifact_gcs_uri)\n  filter_table_config.add(:tiers, field: :tier)\n  filter_table_config.add(:metadata_integrations, field: :metadata_integration)\n  filter_table_config.add(:maintenance_windows, field: :maintenance_window)\n  filter_table_config.add(:uids, field: :uid)\n  filter_table_config.add(:metadata_management_activities, field: :metadata_management_activity)\n  filter_table_config.add(:release_channels, field: :release_channel)\n  filter_table_config.add(:encryption_configs, field: :encryption_config)\n  filter_table_config.add(:network_configs, field: :network_config)\n  filter_table_config.add(:database_types, field: :database_type)\n  filter_table_config.add(:telemetry_configs, field: :telemetry_config)\n  filter_table_config.add(:scaling_configs, field: :scaling_config)\n  filter_table_config.add(:scheduled_backups, field: :scheduled_backup)\n  filter_table_config.add(:deletion_protections, field: :deletion_protection)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('services')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'hiveMetastoreConfig' => ->(obj) { [:hive_metastore_config, GoogleInSpec::DataprocMetastore::Property::ServiceHiveMetastoreConfig.new(obj['hiveMetastoreConfig'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::DataprocMetastore::Property::ServiceLabels.new(obj['labels'], to_s)] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'endpointUri' => ->(obj) { [:endpoint_uri, obj['endpointUri']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'stateMessage' => ->(obj) { [:state_message, obj['stateMessage']] },\n      'artifactGcsUri' => ->(obj) { [:artifact_gcs_uri, obj['artifactGcsUri']] },\n      'tier' => ->(obj) { [:tier, obj['tier']] },\n      'metadataIntegration' => ->(obj) { [:metadata_integration, GoogleInSpec::DataprocMetastore::Property::ServiceMetadataIntegration.new(obj['metadataIntegration'], to_s)] },\n      'maintenanceWindow' => ->(obj) { [:maintenance_window, GoogleInSpec::DataprocMetastore::Property::ServiceMaintenanceWindow.new(obj['maintenanceWindow'], to_s)] },\n      'uid' => ->(obj) { [:uid, obj['uid']] },\n      'metadataManagementActivity' => ->(obj) { [:metadata_management_activity, GoogleInSpec::DataprocMetastore::Property::ServiceMetadataManagementActivity.new(obj['metadataManagementActivity'], to_s)] },\n      'releaseChannel' => ->(obj) { [:release_channel, obj['releaseChannel']] },\n      'encryptionConfig' => ->(obj) { [:encryption_config, GoogleInSpec::DataprocMetastore::Property::ServiceEncryptionConfig.new(obj['encryptionConfig'], to_s)] },\n      'networkConfig' => ->(obj) { [:network_config, GoogleInSpec::DataprocMetastore::Property::ServiceNetworkConfig.new(obj['networkConfig'], to_s)] },\n      'databaseType' => ->(obj) { [:database_type, obj['databaseType']] },\n      'telemetryConfig' => ->(obj) { [:telemetry_config, GoogleInSpec::DataprocMetastore::Property::ServiceTelemetryConfig.new(obj['telemetryConfig'], to_s)] },\n      'scalingConfig' => ->(obj) { [:scaling_config, GoogleInSpec::DataprocMetastore::Property::ServiceScalingConfig.new(obj['scalingConfig'], to_s)] },\n      'scheduledBackup' => ->(obj) { [:scheduled_backup, GoogleInSpec::DataprocMetastore::Property::ServiceScheduledBackup.new(obj['scheduledBackup'], to_s)] },\n      'deletionProtection' => ->(obj) { [:deletion_protection, obj['deletionProtection']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://metastore.googleapis.com/v1beta/'\n  end\n\n  def resource_base_url\n    '{{parent}}/services'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_session.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/session_environment_config'\nrequire 'google/dataproc/property/session_environment_config_execution_config'\nrequire 'google/dataproc/property/session_environment_config_peripherals_config'\nrequire 'google/dataproc/property/session_environment_config_peripherals_config_spark_history_server_config'\nrequire 'google/dataproc/property/session_jupyter_session'\nrequire 'google/dataproc/property/session_labels'\nrequire 'google/dataproc/property/session_runtime_config'\nrequire 'google/dataproc/property/session_runtime_config_properties'\nrequire 'google/dataproc/property/session_runtime_config_repository_config'\nrequire 'google/dataproc/property/session_runtime_config_repository_config_pypi_repository_config'\nrequire 'google/dataproc/property/session_runtime_info'\nrequire 'google/dataproc/property/session_runtime_info_approximate_usage'\nrequire 'google/dataproc/property/session_runtime_info_current_usage'\nrequire 'google/dataproc/property/session_runtime_info_endpoints'\nrequire 'google/dataproc/property/session_state_history'\n\n# A provider to manage Dataproc resources.\nclass DataprocSession < GcpResourceBase\n  name 'google_dataproc_session'\n  desc 'Session'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :uuid\n  attr_reader :create_time\n  attr_reader :jupyter_session\n  attr_reader :runtime_info\n  attr_reader :state\n  attr_reader :state_message\n  attr_reader :state_time\n  attr_reader :creator\n  attr_reader :labels\n  attr_reader :runtime_config\n  attr_reader :environment_config\n  attr_reader :user\n  attr_reader :state_history\n  attr_reader :session_template\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @uuid = @fetched['uuid']\n    @create_time = @fetched['createTime']\n    @jupyter_session = GoogleInSpec::Dataproc::Property::SessionJupyterSession.new(@fetched['jupyterSession'], to_s)\n    @runtime_info = GoogleInSpec::Dataproc::Property::SessionRuntimeInfo.new(@fetched['runtimeInfo'], to_s)\n    @state = @fetched['state']\n    @state_message = @fetched['stateMessage']\n    @state_time = @fetched['stateTime']\n    @creator = @fetched['creator']\n    @labels = GoogleInSpec::Dataproc::Property::SessionLabels.new(@fetched['labels'], to_s)\n    @runtime_config = GoogleInSpec::Dataproc::Property::SessionRuntimeConfig.new(@fetched['runtimeConfig'], to_s)\n    @environment_config = GoogleInSpec::Dataproc::Property::SessionEnvironmentConfig.new(@fetched['environmentConfig'], to_s)\n    @user = @fetched['user']\n    @state_history = GoogleInSpec::Dataproc::Property::SessionStateHistoryArray.parse(@fetched['stateHistory'], to_s)\n    @session_template = @fetched['sessionTemplate']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Session #{@params}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_sessions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocSessions < GcpResourceBase\n  name 'google_dataproc_sessions'\n  desc 'Session plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:uuids, field: :uuid)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:jupyter_sessions, field: :jupyter_session)\n  filter_table_config.add(:runtime_infos, field: :runtime_info)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:state_messages, field: :state_message)\n  filter_table_config.add(:state_times, field: :state_time)\n  filter_table_config.add(:creators, field: :creator)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:runtime_configs, field: :runtime_config)\n  filter_table_config.add(:environment_configs, field: :environment_config)\n  filter_table_config.add(:users, field: :user)\n  filter_table_config.add(:state_histories, field: :state_history)\n  filter_table_config.add(:session_templates, field: :session_template)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sessions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'uuid' => ->(obj) { [:uuid, obj['uuid']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'jupyterSession' => ->(obj) { [:jupyter_session, GoogleInSpec::Dataproc::Property::SessionJupyterSession.new(obj['jupyterSession'], to_s)] },\n      'runtimeInfo' => ->(obj) { [:runtime_info, GoogleInSpec::Dataproc::Property::SessionRuntimeInfo.new(obj['runtimeInfo'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'stateMessage' => ->(obj) { [:state_message, obj['stateMessage']] },\n      'stateTime' => ->(obj) { [:state_time, obj['stateTime']] },\n      'creator' => ->(obj) { [:creator, obj['creator']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataproc::Property::SessionLabels.new(obj['labels'], to_s)] },\n      'runtimeConfig' => ->(obj) { [:runtime_config, GoogleInSpec::Dataproc::Property::SessionRuntimeConfig.new(obj['runtimeConfig'], to_s)] },\n      'environmentConfig' => ->(obj) { [:environment_config, GoogleInSpec::Dataproc::Property::SessionEnvironmentConfig.new(obj['environmentConfig'], to_s)] },\n      'user' => ->(obj) { [:user, obj['user']] },\n      'stateHistory' => ->(obj) { [:state_history, GoogleInSpec::Dataproc::Property::SessionStateHistoryArray.parse(obj['stateHistory'], to_s)] },\n      'sessionTemplate' => ->(obj) { [:session_template, obj['sessionTemplate']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/sessions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_workflow_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dataproc/property/workflowtemplate_encryption_config'\nrequire 'google/dataproc/property/workflowtemplate_jobs'\nrequire 'google/dataproc/property/workflowtemplate_labels'\nrequire 'google/dataproc/property/workflowtemplate_parameters'\nrequire 'google/dataproc/property/workflowtemplate_placement'\nrequire 'google/dataproc/property/workflowtemplate_placement_cluster_selector'\nrequire 'google/dataproc/property/workflowtemplate_placement_cluster_selector_cluster_labels'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_autoscaling_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_auxiliary_node_groups'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_dataproc_metric_config_metrics'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_encryption_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_endpoint_config_http_ports'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_confidential_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_metadata'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_node_group_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_reservation_affinity'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_gce_cluster_config_shielded_instance_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_namespaced_gke_deployment_target'\nrequire 'google/dataproc/property/workflowtemplate_gke_cluster_config_node_pool_target'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_initialization_actions'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_lifecycle_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_master_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_master_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_master_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_master_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_metastore_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_secondary_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config'\nrequire 'google/dataproc/property/workflowtemplate_security_config_identity_config_user_service_account_mapping'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_security_config_kerberos_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_config_software_config_properties'\nrequire 'google/dataproc/property/workflowtemplate_worker_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_accelerators'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_disk_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_list'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_flexibility_policy_instance_selection_results'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_instance_references'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_managed_group_config'\nrequire 'google/dataproc/property/workflowtemplate_worker_config_startup_config'\nrequire 'google/dataproc/property/workflowtemplate_placement_managed_cluster_labels'\n\n# A provider to manage Dataproc resources.\nclass DataprocWorkflowTemplate < GcpResourceBase\n  name 'google_dataproc_workflow_template'\n  desc 'WorkflowTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :id\n  attr_reader :name\n  attr_reader :version\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :placement\n  attr_reader :jobs\n  attr_reader :parameters\n  attr_reader :dag_timeout\n  attr_reader :encryption_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @version = @fetched['version']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::Dataproc::Property::WorkflowTemplateLabels.new(@fetched['labels'], to_s)\n    @placement = GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacement.new(@fetched['placement'], to_s)\n    @jobs = GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsArray.parse(@fetched['jobs'], to_s)\n    @parameters = GoogleInSpec::Dataproc::Property::WorkflowTemplateParametersArray.parse(@fetched['parameters'], to_s)\n    @dag_timeout = @fetched['dagTimeout']\n    @encryption_config = GoogleInSpec::Dataproc::Property::WorkflowTemplateEncryptionConfig.new(@fetched['encryptionConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"WorkflowTemplate #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dataproc_workflow_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DataprocWorkflowTemplates < GcpResourceBase\n  name 'google_dataproc_workflow_templates'\n  desc 'WorkflowTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:versions, field: :version)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:placements, field: :placement)\n  filter_table_config.add(:jobs, field: :jobs)\n  filter_table_config.add(:parameters, field: :parameters)\n  filter_table_config.add(:dag_timeouts, field: :dag_timeout)\n  filter_table_config.add(:encryption_configs, field: :encryption_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('templates')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'id' => ->(obj) { [:id, obj['id']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'version' => ->(obj) { [:version, obj['version']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Dataproc::Property::WorkflowTemplateLabels.new(obj['labels'], to_s)] },\n      'placement' => ->(obj) { [:placement, GoogleInSpec::Dataproc::Property::WorkflowTemplatePlacement.new(obj['placement'], to_s)] },\n      'jobs' => ->(obj) { [:jobs, GoogleInSpec::Dataproc::Property::WorkflowTemplateJobsArray.parse(obj['jobs'], to_s)] },\n      'parameters' => ->(obj) { [:parameters, GoogleInSpec::Dataproc::Property::WorkflowTemplateParametersArray.parse(obj['parameters'], to_s)] },\n      'dagTimeout' => ->(obj) { [:dag_timeout, obj['dagTimeout']] },\n      'encryptionConfig' => ->(obj) { [:encryption_config, GoogleInSpec::Dataproc::Property::WorkflowTemplateEncryptionConfig.new(obj['encryptionConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dataproc.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/workflowTemplates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_dt.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dlp/property/dt_config'\nrequire 'google/dlp/property/dt_config_info_type_tf'\nrequire 'google/dlp/property/dt_config_info_type_tf_tf'\n\n# A provider to manage Dlp resources.\nclass DLPDT < GcpResourceBase\n  name 'google_dlp_dt'\n  desc 'DT'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :display_name\n  attr_reader :config\n  attr_reader :parent\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @display_name = @fetched['displayName']\n    @config = GoogleInSpec::DLP::Property::DTConfig.new(@fetched['config'], to_s)\n    @parent = @fetched['parent']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"DT #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/deidentifyTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_dts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DLPDTs < GcpResourceBase\n  name 'google_dlp_dts'\n  desc 'DT plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:parents, field: :parent)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('dTs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::DLP::Property::DTConfig.new(obj['config'], to_s)] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/deidentifyTemplates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_inspect_template.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dlp/property/inspecttemplate_inspect_config'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_custom_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_info_types'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_limits_max_findings_per_info_type'\nrequire 'google/dlp/property/inspecttemplate_inspect_config_rule_set'\n\n# A provider to manage Dlp resources.\nclass DLPInspectTemplate < GcpResourceBase\n  name 'google_dlp_inspect_template'\n  desc 'InspectTemplate'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :display_name\n  attr_reader :inspect_config\n  attr_reader :parent\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @display_name = @fetched['displayName']\n    @inspect_config = GoogleInSpec::DLP::Property::InspectTemplateInspectConfig.new(@fetched['inspectConfig'], to_s)\n    @parent = @fetched['parent']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"InspectTemplate #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/inspectTemplates/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_inspect_templates.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DLPInspectTemplates < GcpResourceBase\n  name 'google_dlp_inspect_templates'\n  desc 'InspectTemplate plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:inspect_configs, field: :inspect_config)\n  filter_table_config.add(:parents, field: :parent)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('inspectTemplates')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'inspectConfig' => ->(obj) { [:inspect_config, GoogleInSpec::DLP::Property::InspectTemplateInspectConfig.new(obj['inspectConfig'], to_s)] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/inspectTemplates'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dlp/property/job_act_det'\nrequire 'google/dlp/property/job_errors'\n\n# A provider to manage Dlp resources.\nclass DLPJob < GcpResourceBase\n  name 'google_dlp_job'\n  desc 'Job'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :type\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :job_trigger_name\n  attr_reader :errors\n  attr_reader :act_det\n  attr_reader :risk_details\n  attr_reader :inspect_details\n  attr_reader :parent\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @type = @fetched['type']\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @start_time = @fetched['startTime']\n    @end_time = @fetched['endTime']\n    @job_trigger_name = @fetched['jobTriggerName']\n    @errors = GoogleInSpec::DLP::Property::JobErrorsArray.parse(@fetched['errors'], to_s)\n    @act_det = GoogleInSpec::DLP::Property::JobActDetArray.parse(@fetched['actDet'], to_s)\n    @risk_details = @fetched['riskDetails']\n    @inspect_details = @fetched['inspectDetails']\n    @parent = @fetched['parent']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Job #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/dlpJobs/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_job_trigger.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dlp/property/jobtrigger_inspect_job'\nrequire 'google/dlp/property/jobtrigger_inspect_job_actions'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_big_query_options_table_reference'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_cloud_storage_options_file_set_regex_file_set'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_kind'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_datastore_options_partition_id'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config'\nrequire 'google/dlp/property/jobtrigger_inspect_job_storage_config_timespan_config_timestamp_field'\nrequire 'google/dlp/property/jobtrigger_triggers'\n\n# A provider to manage Dlp resources.\nclass DLPJobTrigger < GcpResourceBase\n  name 'google_dlp_job_trigger'\n  desc 'JobTrigger'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :display_name\n  attr_reader :last_run_time\n  attr_reader :status\n  attr_reader :triggers\n  attr_reader :inspect_job\n  attr_reader :parent\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @display_name = @fetched['displayName']\n    @last_run_time = parse_time_string(@fetched['lastRunTime'])\n    @status = @fetched['status']\n    @triggers = GoogleInSpec::DLP::Property::JobTriggerTriggersArray.parse(@fetched['triggers'], to_s)\n    @inspect_job = GoogleInSpec::DLP::Property::JobTriggerInspectJob.new(@fetched['inspectJob'], to_s)\n    @parent = @fetched['parent']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"JobTrigger #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/jobTriggers/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_job_triggers.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DLPJobTriggers < GcpResourceBase\n  name 'google_dlp_job_triggers'\n  desc 'JobTrigger plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:last_run_times, field: :last_run_time)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:triggers, field: :triggers)\n  filter_table_config.add(:inspect_jobs, field: :inspect_job)\n  filter_table_config.add(:parents, field: :parent)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobTriggers')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'lastRunTime' => ->(obj) { [:last_run_time, parse_time_string(obj['lastRunTime'])] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'triggers' => ->(obj) { [:triggers, GoogleInSpec::DLP::Property::JobTriggerTriggersArray.parse(obj['triggers'], to_s)] },\n      'inspectJob' => ->(obj) { [:inspect_job, GoogleInSpec::DLP::Property::JobTriggerInspectJob.new(obj['inspectJob'], to_s)] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/jobTriggers'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DLPJobs < GcpResourceBase\n  name 'google_dlp_jobs'\n  desc 'Job plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:job_trigger_names, field: :job_trigger_name)\n  filter_table_config.add(:errors, field: :errors)\n  filter_table_config.add(:act_dets, field: :act_det)\n  filter_table_config.add(:risk_details, field: :risk_details)\n  filter_table_config.add(:inspect_details, field: :inspect_details)\n  filter_table_config.add(:parents, field: :parent)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'jobTriggerName' => ->(obj) { [:job_trigger_name, obj['jobTriggerName']] },\n      'errors' => ->(obj) { [:errors, GoogleInSpec::DLP::Property::JobErrorsArray.parse(obj['errors'], to_s)] },\n      'actDet' => ->(obj) { [:act_det, GoogleInSpec::DLP::Property::JobActDetArray.parse(obj['actDet'], to_s)] },\n      'riskDetails' => ->(obj) { [:risk_details, obj['riskDetails']] },\n      'inspectDetails' => ->(obj) { [:inspect_details, obj['inspectDetails']] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/dlpJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_stored_info_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dlp/property/storedinfotype_dictionary'\nrequire 'google/dlp/property/storedinfotype_dictionary_cloud_storage_path'\nrequire 'google/dlp/property/storedinfotype_dictionary_word_list'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_field'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_big_query_field_table'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_cloud_storage_file_set'\nrequire 'google/dlp/property/storedinfotype_large_custom_dictionary_output_path'\nrequire 'google/dlp/property/storedinfotype_regex'\n\n# A provider to manage Dlp resources.\nclass DLPStoredInfoType < GcpResourceBase\n  name 'google_dlp_stored_info_type'\n  desc 'StoredInfoType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :display_name\n  attr_reader :regex\n  attr_reader :dictionary\n  attr_reader :large_custom_dictionary\n  attr_reader :parent\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @display_name = @fetched['displayName']\n    @regex = GoogleInSpec::DLP::Property::StoredInfoTypeRegex.new(@fetched['regex'], to_s)\n    @dictionary = GoogleInSpec::DLP::Property::StoredInfoTypeDictionary.new(@fetched['dictionary'], to_s)\n    @large_custom_dictionary = GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionary.new(@fetched['largeCustomDictionary'], to_s)\n    @parent = @fetched['parent']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"StoredInfoType #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/storedInfoTypes/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dlp_stored_info_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DLPStoredInfoTypes < GcpResourceBase\n  name 'google_dlp_stored_info_types'\n  desc 'StoredInfoType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:regexes, field: :regex)\n  filter_table_config.add(:dictionaries, field: :dictionary)\n  filter_table_config.add(:large_custom_dictionaries, field: :large_custom_dictionary)\n  filter_table_config.add(:parents, field: :parent)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('storedInfoTypes')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'regex' => ->(obj) { [:regex, GoogleInSpec::DLP::Property::StoredInfoTypeRegex.new(obj['regex'], to_s)] },\n      'dictionary' => ->(obj) { [:dictionary, GoogleInSpec::DLP::Property::StoredInfoTypeDictionary.new(obj['dictionary'], to_s)] },\n      'largeCustomDictionary' => ->(obj) { [:large_custom_dictionary, GoogleInSpec::DLP::Property::StoredInfoTypeLargeCustomDictionary.new(obj['largeCustomDictionary'], to_s)] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://dlp.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/storedInfoTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dns_managed_zone.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/dns/property/managedzone_dnssec_config'\nrequire 'google/dns/property/managedzone_dnssec_config_default_key_specs'\nrequire 'google/dns/property/managedzone_forwarding_config'\nrequire 'google/dns/property/managedzone_forwarding_config_target_name_servers'\nrequire 'google/dns/property/managedzone_peering_config'\nrequire 'google/dns/property/managedzone_peering_config_target_network'\nrequire 'google/dns/property/managedzone_private_visibility_config'\nrequire 'google/dns/property/managedzone_private_visibility_config_networks'\nrequire 'google/dns/property/managedzone_service_directory_config'\nrequire 'google/dns/property/managedzone_service_directory_config_namespace'\n\n# A provider to manage Cloud DNS resources.\nclass DNSManagedZone < GcpResourceBase\n  name 'google_dns_managed_zone'\n  desc 'ManagedZone'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :dns_name\n  attr_reader :dnssec_config\n  attr_reader :id\n  attr_reader :name\n  attr_reader :name_servers\n  attr_reader :name_server_set\n  attr_reader :creation_time\n  attr_reader :labels\n  attr_reader :visibility\n  attr_reader :private_visibility_config\n  attr_reader :forwarding_config\n  attr_reader :peering_config\n  attr_reader :reverse_lookup\n  attr_reader :service_directory_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @dns_name = @fetched['dnsName']\n    @dnssec_config = GoogleInSpec::DNS::Property::ManagedZoneDnssecConfig.new(@fetched['dnssecConfig'], to_s)\n    @id = @fetched['id']\n    @name = @fetched['name']\n    @name_servers = @fetched['nameServers']\n    @name_server_set = @fetched['nameServerSet']\n    @creation_time = parse_time_string(@fetched['creationTime'])\n    @labels = @fetched['labels']\n    @visibility = @fetched['visibility']\n    @private_visibility_config = GoogleInSpec::DNS::Property::ManagedZonePrivateVisibilityConfig.new(@fetched['privateVisibilityConfig'], to_s)\n    @forwarding_config = GoogleInSpec::DNS::Property::ManagedZoneForwardingConfig.new(@fetched['forwardingConfig'], to_s)\n    @peering_config = GoogleInSpec::DNS::Property::ManagedZonePeeringConfig.new(@fetched['peeringConfig'], to_s)\n    @reverse_lookup = @fetched['reverseLookupConfig']\n    @service_directory_config = GoogleInSpec::DNS::Property::ManagedZoneServiceDirectoryConfig.new(@fetched['serviceDirectoryConfig'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ManagedZone #{@params[:zone]}\"\n  end\n\n  def key_signing_key_algorithm\n    specs = @dnssec_config&.default_key_specs\n    specs.each do |spec|\n      return spec.algorithm if spec.key_type == 'keySigning'\n    end\n  end\n\n  def zone_signing_key_algorithm\n    specs = @dnssec_config&.default_key_specs\n    specs.each do |spec|\n      return spec.algorithm if spec.key_type == 'zoneSigning'\n    end\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dns.googleapis.com/dns/v1beta2/'\n    else\n      'https://dns.googleapis.com/dns/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones/{{zone}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dns_managed_zones.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DNSManagedZones < GcpResourceBase\n  name 'google_dns_managed_zones'\n  desc 'ManagedZone plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:zone_dns_names, field: :zone_dns_name)\n  filter_table_config.add(:dnssec_configs, field: :dnssec_config)\n  filter_table_config.add(:zone_ids, field: :zone_id)\n  filter_table_config.add(:zone_names, field: :zone_name)\n  filter_table_config.add(:name_servers, field: :name_servers)\n  filter_table_config.add(:name_server_sets, field: :name_server_set)\n  filter_table_config.add(:creation_times, field: :creation_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:visibilities, field: :visibility)\n  filter_table_config.add(:private_visibility_configs, field: :private_visibility_config)\n  filter_table_config.add(:forwarding_configs, field: :forwarding_config)\n  filter_table_config.add(:peering_configs, field: :peering_config)\n  filter_table_config.add(:reverse_lookups, field: :reverse_lookup)\n  filter_table_config.add(:service_directory_configs, field: :service_directory_config)\n  filter_table_config.add(:dnssec_config_states, field: :dnssec_config_state)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('managedZones')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        hash_with_symbols[:dnssec_config_state] = hash.dig('dnssecConfig', 'state')&.downcase == 'on'\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'dnsName' => ->(obj) { [:zone_dns_name, obj['dnsName']] },\n      'dnssecConfig' => ->(obj) { [:dnssec_config, GoogleInSpec::DNS::Property::ManagedZoneDnssecConfig.new(obj['dnssecConfig'], to_s)] },\n      'id' => ->(obj) { [:zone_id, obj['id']] },\n      'name' => ->(obj) { [:zone_name, obj['name']] },\n      'nameServers' => ->(obj) { [:name_servers, obj['nameServers']] },\n      'nameServerSet' => ->(obj) { [:name_server_set, obj['nameServerSet']] },\n      'creationTime' => ->(obj) { [:creation_time, parse_time_string(obj['creationTime'])] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'visibility' => ->(obj) { [:visibility, obj['visibility']] },\n      'privateVisibilityConfig' => ->(obj) { [:private_visibility_config, GoogleInSpec::DNS::Property::ManagedZonePrivateVisibilityConfig.new(obj['privateVisibilityConfig'], to_s)] },\n      'forwardingConfig' => ->(obj) { [:forwarding_config, GoogleInSpec::DNS::Property::ManagedZoneForwardingConfig.new(obj['forwardingConfig'], to_s)] },\n      'peeringConfig' => ->(obj) { [:peering_config, GoogleInSpec::DNS::Property::ManagedZonePeeringConfig.new(obj['peeringConfig'], to_s)] },\n      'reverseLookupConfig' => ->(obj) { [:reverse_lookup, obj['reverseLookupConfig']] },\n      'serviceDirectoryConfig' => ->(obj) { [:service_directory_config, GoogleInSpec::DNS::Property::ManagedZoneServiceDirectoryConfig.new(obj['serviceDirectoryConfig'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dns.googleapis.com/dns/v1beta2/'\n    else\n      'https://dns.googleapis.com/dns/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dns_resource_record_set.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud DNS resources.\nclass DNSResourceRecordSet < GcpResourceBase\n  name 'google_dns_resource_record_set'\n  desc 'ResourceRecordSet'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :type\n  attr_reader :ttl\n  attr_reader :target\n  attr_reader :managed_zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    @fetched = unwrap(fetched, params)\n    parse unless @fetched.nil?\n  end\n\n  def identity\n    %w{name type}\n  end\n\n  def collection_item\n    'rrsets'\n  end\n\n  def unwrap(fetched, params)\n    fetched[collection_item].find { |result| identity.all? { |id| result[id] == params[id.to_sym] } }\n  end\n\n  def parse\n    @name = @fetched['name']\n    @type = @fetched['type']\n    @ttl = @fetched['ttl']\n    @target = @fetched['rrdatas']\n    @managed_zone = @fetched['managed_zone']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ResourceRecordSet #{@params[:type]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dns.googleapis.com/dns/v1beta2/'\n    else\n      'https://dns.googleapis.com/dns/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones/{{managed_zone}}/rrsets?name={{name}}&type={{type}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_dns_resource_record_sets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass DNSResourceRecordSets < GcpResourceBase\n  name 'google_dns_resource_record_sets'\n  desc 'ResourceRecordSet plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:types, field: :type)\n  filter_table_config.add(:ttls, field: :ttl)\n  filter_table_config.add(:targets, field: :target)\n  filter_table_config.add(:managed_zones, field: :managed_zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('rrsets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n      'ttl' => ->(obj) { [:ttl, obj['ttl']] },\n      'rrdatas' => ->(obj) { [:target, obj['rrdatas']] },\n      'managed_zone' => ->(obj) { [:managed_zone, obj['managed_zone']] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://dns.googleapis.com/dns/v1beta2/'\n    else\n      'https://dns.googleapis.com/dns/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/managedZones/{{managed_zone}}/rrsets'\n  end\nend\n"
  },
  {
    "path": "libraries/google_filestore_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/filestore/property/instance_file_shares'\nrequire 'google/filestore/property/instance_networks'\n\n# A provider to manage Filestore resources.\nclass FilestoreInstance < GcpResourceBase\n  name 'google_filestore_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :create_time\n  attr_reader :tier\n  attr_reader :labels\n  attr_reader :file_shares\n  attr_reader :networks\n  attr_reader :etag\n  attr_reader :zone\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @tier = @fetched['tier']\n    @labels = @fetched['labels']\n    @file_shares = GoogleInSpec::Filestore::Property::InstanceFileSharesArray.parse(@fetched['fileShares'], to_s)\n    @networks = GoogleInSpec::Filestore::Property::InstanceNetworksArray.parse(@fetched['networks'], to_s)\n    @etag = @fetched['etag']\n    @zone = @fetched['zone']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://file.googleapis.com/v1beta1/'\n    else\n      'https://file.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{zone}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_filestore_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass FilestoreInstances < GcpResourceBase\n  name 'google_filestore_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:tiers, field: :tier)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:file_shares, field: :file_shares)\n  filter_table_config.add(:networks, field: :networks)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:zones, field: :zone)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'tier' => ->(obj) { [:tier, obj['tier']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'fileShares' => ->(obj) { [:file_shares, GoogleInSpec::Filestore::Property::InstanceFileSharesArray.parse(obj['fileShares'], to_s)] },\n      'networks' => ->(obj) { [:networks, GoogleInSpec::Filestore::Property::InstanceNetworksArray.parse(obj['networks'], to_s)] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'zone' => ->(obj) { [:zone, obj['zone']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://file.googleapis.com/v1beta1/'\n    else\n      'https://file.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{zone}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_iam_organization_custom_role.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud IAM resources.\nclass IAMOrganizationCustomRole < GcpResourceBase\n  name 'google_iam_organization_custom_role'\n  desc 'OrganizationCustomRole'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :title\n  attr_reader :description\n  attr_reader :included_permissions\n  attr_reader :stage\n  attr_reader :deleted\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @title = @fetched['title']\n    @description = @fetched['description']\n    @included_permissions = @fetched['includedPermissions']\n    @stage = @fetched['stage']\n    @deleted = @fetched['deleted']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationCustomRole #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'organizations/{{org_id}}/roles/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_iam_organization_custom_roles.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass IAMOrganizationCustomRoles < GcpResourceBase\n  name 'google_iam_organization_custom_roles'\n  desc 'OrganizationCustomRole plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:titles, field: :title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:included_permissions, field: :included_permissions)\n  filter_table_config.add(:stages, field: :stage)\n  filter_table_config.add(:deleteds, field: :deleted)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('roles')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'title' => ->(obj) { [:title, obj['title']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'includedPermissions' => ->(obj) { [:included_permissions, obj['includedPermissions']] },\n      'stage' => ->(obj) { [:stage, obj['stage']] },\n      'deleted' => ->(obj) { [:deleted, obj['deleted']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'organizations/{{org_id}}/roles?view=FULL'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/kms/property/cryptokey_version_template'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSCryptoKey < GcpResourceBase\n  name 'google_kms_crypto_key'\n  desc 'CryptoKey'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :crypto_key_name\n  attr_reader :create_time\n  attr_reader :labels\n  attr_reader :purpose\n  attr_reader :rotation_period\n  attr_reader :version_template\n  attr_reader :next_rotation_time\n  attr_reader :key_ring\n  attr_reader :skip_initial_version_creation\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @crypto_key_name = name_from_self_link(@fetched['name'])\n    @create_time = parse_time_string(@fetched['createTime'])\n    @labels = @fetched['labels']\n    @purpose = @fetched['purpose']\n    @rotation_period = @fetched['rotationPeriod']\n    @version_template = GoogleInSpec::KMS::Property::CryptoKeyVersionTemplate.new(@fetched['versionTemplate'], to_s)\n    @next_rotation_time = parse_time_string(@fetched['nextRotationTime'])\n    @key_ring = @fetched['keyRing']\n    @skip_initial_version_creation = @fetched['skipInitialVersionCreation']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CryptoKey #{@params[:name]}\"\n  end\n\n  def primary_state\n    return if @fetched.nil? || @fetched.empty?\n    @fetched.dig('primary', 'state')\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}/cryptoKeys/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Key Management Service IAM Binding resources.\nclass CryptoKeyIamBinding < GcpResourceBase\n  name 'google_kms_crypto_key_iam_binding'\n  desc 'CryptoKey Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"CryptoKey IamBinding #{@params[:crypto_key_name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}/cryptoKeys/{{crypto_key_name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleKMSCryptoKeyIAMBindings < GcpResourceBase\n    name 'google_kms_crypto_key_iam_bindings'\n    desc 'Verifies settings for GCP KMS Crypto Key IAM Bindings in bulk'\n\n    example \"\n      describe google_kms_key_ring_iam_bindings(crypto_key_url: 'projects/project/locations/europe-west2/keyRings/key-ring/cryptoKeys/key-name') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @crypto_key_url = opts[:crypto_key_url]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_crypto_key_iam_policy(@crypto_key_url)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Key Management Service IAM Policy resources.\nclass CryptoKeyIamPolicy < GcpResourceBase\n  name 'google_kms_crypto_key_iam_policy'\n  desc 'CryptoKey Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CryptoKey IamPolicy #{@params[:crypto_key_name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}/cryptoKeys/{{crypto_key_name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key_version.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/kms/property/cryptokeyversion_attestation'\nrequire 'google/kms/property/cryptokeyversion_external_protection_level_options'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSCryptoKeyVersion < GcpResourceBase\n  name 'google_kms_crypto_key_version'\n  desc 'CryptoKeyVersion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :generate_time\n  attr_reader :destroy_time\n  attr_reader :destroy_event_time\n  attr_reader :state\n  attr_reader :protection_level\n  attr_reader :algorithm\n  attr_reader :attestation\n  attr_reader :import_job\n  attr_reader :import_time\n  attr_reader :import_failure_reason\n  attr_reader :external_protection_level_options\n  attr_reader :reimport_eligible\n  attr_reader :key_ring\n  attr_reader :crypto_key\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @generate_time = parse_time_string(@fetched['generateTime'])\n    @destroy_time = parse_time_string(@fetched['destroyTime'])\n    @destroy_event_time = parse_time_string(@fetched['destroyEventTime'])\n    @state = @fetched['state']\n    @protection_level = @fetched['protectionLevel']\n    @algorithm = @fetched['algorithm']\n    @attestation = GoogleInSpec::KMS::Property::CryptoKeyVersionAttestation.new(@fetched['attestation'], to_s)\n    @import_job = @fetched['importJob']\n    @import_time = parse_time_string(@fetched['importTime'])\n    @import_failure_reason = @fetched['importFailureReason']\n    @external_protection_level_options = GoogleInSpec::KMS::Property::CryptoKeyVersionExternalProtectionLevelOptions.new(@fetched['externalProtectionLevelOptions'], to_s)\n    @reimport_eligible = @fetched['reimportEligible']\n    @key_ring = @fetched['keyRing']\n    @crypto_key = @fetched['cryptoKey']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CryptoKeyVersion #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring}}/cryptoKeys/{{crypto_key}}/cryptoKeyVersions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_key_versions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSCryptoKeyVersions < GcpResourceBase\n  name 'google_kms_crypto_key_versions'\n  desc 'CryptoKeyVersion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:generate_times, field: :generate_time)\n  filter_table_config.add(:destroy_times, field: :destroy_time)\n  filter_table_config.add(:destroy_event_times, field: :destroy_event_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:protection_levels, field: :protection_level)\n  filter_table_config.add(:algorithms, field: :algorithm)\n  filter_table_config.add(:attestations, field: :attestation)\n  filter_table_config.add(:import_jobs, field: :import_job)\n  filter_table_config.add(:import_times, field: :import_time)\n  filter_table_config.add(:import_failure_reasons, field: :import_failure_reason)\n  filter_table_config.add(:external_protection_level_options, field: :external_protection_level_options)\n  filter_table_config.add(:reimport_eligibles, field: :reimport_eligible)\n  filter_table_config.add(:key_rings, field: :key_ring)\n  filter_table_config.add(:crypto_keys, field: :crypto_key)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('cryptoKeyVersions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'generateTime' => ->(obj) { [:generate_time, parse_time_string(obj['generateTime'])] },\n      'destroyTime' => ->(obj) { [:destroy_time, parse_time_string(obj['destroyTime'])] },\n      'destroyEventTime' => ->(obj) { [:destroy_event_time, parse_time_string(obj['destroyEventTime'])] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'protectionLevel' => ->(obj) { [:protection_level, obj['protectionLevel']] },\n      'algorithm' => ->(obj) { [:algorithm, obj['algorithm']] },\n      'attestation' => ->(obj) { [:attestation, GoogleInSpec::KMS::Property::CryptoKeyVersionAttestation.new(obj['attestation'], to_s)] },\n      'importJob' => ->(obj) { [:import_job, obj['importJob']] },\n      'importTime' => ->(obj) { [:import_time, parse_time_string(obj['importTime'])] },\n      'importFailureReason' => ->(obj) { [:import_failure_reason, obj['importFailureReason']] },\n      'externalProtectionLevelOptions' => ->(obj) { [:external_protection_level_options, GoogleInSpec::KMS::Property::CryptoKeyVersionExternalProtectionLevelOptions.new(obj['externalProtectionLevelOptions'], to_s)] },\n      'reimportEligible' => ->(obj) { [:reimport_eligible, obj['reimportEligible']] },\n      'keyRing' => ->(obj) { [:key_ring, obj['keyRing']] },\n      'cryptoKey' => ->(obj) { [:crypto_key, obj['cryptoKey']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring}}/cryptoKeys/{{crypto_key}}/cryptoKeyVersions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_crypto_keys.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSCryptoKeys < GcpResourceBase\n  name 'google_kms_crypto_keys'\n  desc 'CryptoKey plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:crypto_key_names, field: :crypto_key_name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:purposes, field: :purpose)\n  filter_table_config.add(:rotation_periods, field: :rotation_period)\n  filter_table_config.add(:version_templates, field: :version_template)\n  filter_table_config.add(:next_rotation_times, field: :next_rotation_time)\n  filter_table_config.add(:key_rings, field: :key_ring)\n  filter_table_config.add(:skip_initial_version_creations, field: :skip_initial_version_creation)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('cryptoKeys')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:crypto_key_name, name_from_self_link(obj['name'])] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'purpose' => ->(obj) { [:purpose, obj['purpose']] },\n      'rotationPeriod' => ->(obj) { [:rotation_period, obj['rotationPeriod']] },\n      'versionTemplate' => ->(obj) { [:version_template, GoogleInSpec::KMS::Property::CryptoKeyVersionTemplate.new(obj['versionTemplate'], to_s)] },\n      'nextRotationTime' => ->(obj) { [:next_rotation_time, parse_time_string(obj['nextRotationTime'])] },\n      'keyRing' => ->(obj) { [:key_ring, obj['keyRing']] },\n      'skipInitialVersionCreation' => ->(obj) { [:skip_initial_version_creation, obj['skipInitialVersionCreation']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}/cryptoKeys'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_ekm_connection.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/kms/property/ekmconnection_service_resolvers'\nrequire 'google/kms/property/ekmconnection_service_resolvers_server_certificates'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSEkmConnection < GcpResourceBase\n  name 'google_kms_ekm_connection'\n  desc 'EkmConnection'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :service_resolvers\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @service_resolvers = GoogleInSpec::KMS::Property::EkmConnectionServiceResolvers.new(@fetched['serviceResolvers'], to_s)\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"EkmConnection #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/ekmConnections/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_ekm_connections.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSEkmConnections < GcpResourceBase\n  name 'google_kms_ekm_connections'\n  desc 'EkmConnection plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:service_resolvers, field: :service_resolvers)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('ekmConnections')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'serviceResolvers' => ->(obj) { [:service_resolvers, GoogleInSpec::KMS::Property::EkmConnectionServiceResolvers.new(obj['serviceResolvers'], to_s)] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/ekmConnections'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSKeyRing < GcpResourceBase\n  name 'google_kms_key_ring'\n  desc 'KeyRing'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :create_time\n  attr_reader :key_ring_url\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @create_time = parse_time_string(@fetched['createTime'])\n    @key_ring_url = @fetched['name']\n    @location = @fetched['location']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"KeyRing #{@params[:name]}\"\n  end\n\n  def key_ring_name\n    name_from_self_link(@key_ring_url)\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Key Management Service IAM Binding resources.\nclass KeyRingIamBinding < GcpResourceBase\n  name 'google_kms_key_ring_iam_binding'\n  desc 'KeyRing Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"KeyRing IamBinding #{@params[:key_ring_name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'time'\nrequire 'google/apis/cloudkms_v1'\n\nmodule Inspec::Resources\n  class GoogleKMSKeyRingIAMBindings < GcpResourceBase\n    name 'google_kms_key_ring_iam_bindings'\n    desc 'Verifies settings for GCP KMS key ring IAM bindings in bulk'\n\n    example \"\n      describe google_kms_key_ring_iam_bindings(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @key_ring_url = opts[:key_ring_url]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_client(Google::Apis::CloudkmsV1::CloudKMSService).get_project_location_key_ring_iam_policy(@key_ring_url)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Key Management Service IAM Policy resources.\nclass KeyRingIamPolicy < GcpResourceBase\n  name 'google_kms_key_ring_iam_policy'\n  desc 'KeyRing Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"KeyRing IamPolicy #{@params[:key_ring_name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring_name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring_import_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/kms/property/keyringimportjob_attestation'\nrequire 'google/kms/property/keyringimportjob_public_key'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSKeyRingImportJob < GcpResourceBase\n  name 'google_kms_key_ring_import_job'\n  desc 'KeyRingImportJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :import_method\n  attr_reader :protection_level\n  attr_reader :create_time\n  attr_reader :generate_time\n  attr_reader :expire_time\n  attr_reader :expire_event_time\n  attr_reader :state\n  attr_reader :public_key\n  attr_reader :attestation\n  attr_reader :key_ring\n  attr_reader :import_job_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @import_method = @fetched['importMethod']\n    @protection_level = @fetched['protectionLevel']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @generate_time = parse_time_string(@fetched['generateTime'])\n    @expire_time = parse_time_string(@fetched['expireTime'])\n    @expire_event_time = parse_time_string(@fetched['expireEventTime'])\n    @state = @fetched['state']\n    @public_key = GoogleInSpec::KMS::Property::KeyRingImportJobPublicKey.new(@fetched['publicKey'], to_s)\n    @attestation = GoogleInSpec::KMS::Property::KeyRingImportJobAttestation.new(@fetched['attestation'], to_s)\n    @key_ring = @fetched['keyRing']\n    @import_job_id = @fetched['importJobId']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"KeyRingImportJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_ring_import_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSKeyRingImportJobs < GcpResourceBase\n  name 'google_kms_key_ring_import_jobs'\n  desc 'KeyRingImportJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:import_methods, field: :import_method)\n  filter_table_config.add(:protection_levels, field: :protection_level)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:generate_times, field: :generate_time)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:expire_event_times, field: :expire_event_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:public_keys, field: :public_key)\n  filter_table_config.add(:attestations, field: :attestation)\n  filter_table_config.add(:key_rings, field: :key_ring)\n  filter_table_config.add(:import_job_ids, field: :import_job_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('keyRingImportJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'importMethod' => ->(obj) { [:import_method, obj['importMethod']] },\n      'protectionLevel' => ->(obj) { [:protection_level, obj['protectionLevel']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'generateTime' => ->(obj) { [:generate_time, parse_time_string(obj['generateTime'])] },\n      'expireTime' => ->(obj) { [:expire_time, parse_time_string(obj['expireTime'])] },\n      'expireEventTime' => ->(obj) { [:expire_event_time, parse_time_string(obj['expireEventTime'])] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'publicKey' => ->(obj) { [:public_key, GoogleInSpec::KMS::Property::KeyRingImportJobPublicKey.new(obj['publicKey'], to_s)] },\n      'attestation' => ->(obj) { [:attestation, GoogleInSpec::KMS::Property::KeyRingImportJobAttestation.new(obj['attestation'], to_s)] },\n      'keyRing' => ->(obj) { [:key_ring, obj['keyRing']] },\n      'importJobId' => ->(obj) { [:import_job_id, obj['importJobId']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{key_ring}}/importJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_key_rings.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSKeyRings < GcpResourceBase\n  name 'google_kms_key_rings'\n  desc 'KeyRing plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:key_ring_urls, field: :key_ring_url)\n  filter_table_config.add(:locations, field: :location)\n  filter_table_config.add(:key_ring_names, field: :key_ring_name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('keyRings')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        hash_with_symbols[:key_ring_name] = name_from_self_link(hash['name'])\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'name' => ->(obj) { [:key_ring_url, obj['name']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{location}}/keyRings'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_location.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Key Management Service resources.\nclass KMSLocation < GcpResourceBase\n  name 'google_kms_location'\n  desc 'Location'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :location_id\n  attr_reader :display_name\n  attr_reader :location\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @location_id = @fetched['locationId']\n    @display_name = @fetched['displayName']\n    @location = @fetched['location']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Location #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_kms_locations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass KMSLocations < GcpResourceBase\n  name 'google_kms_locations'\n  desc 'Location plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:location_ids, field: :location_id)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:locations, field: :location)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('locations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'locationId' => ->(obj) { [:location_id, obj['locationId']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'location' => ->(obj) { [:location, obj['location']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudkms.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_folder_exclusion.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingFolderExclusion < GcpResourceBase\n  name 'google_logging_folder_exclusion'\n  desc 'FolderExclusion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :folder\n  attr_reader :name\n  attr_reader :description\n  attr_reader :filter\n  attr_reader :disabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @folder = @fetched['folder']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @filter = @fetched['filter']\n    @disabled = @fetched['disabled']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FolderExclusion #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/exclusions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_folder_exclusions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingFolderExclusions < GcpResourceBase\n  name 'google_logging_folder_exclusions'\n  desc 'FolderExclusion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:folders, field: :folder)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:disableds, field: :disabled)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('exclusions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'folder' => ->(obj) { [:folder, obj['folder']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/exclusions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_folder_log_sink.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingFolderLogSink < GcpResourceBase\n  name 'google_logging_folder_log_sink'\n  desc 'FolderLogSink'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :folder\n  attr_reader :name\n  attr_reader :filter\n  attr_reader :destination\n  attr_reader :writer_identity\n  attr_reader :include_children\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @folder = @fetched['folder']\n    @name = @fetched['name']\n    @filter = @fetched['filter']\n    @destination = @fetched['destination']\n    @writer_identity = @fetched['writerIdentity']\n    @include_children = @fetched['includeChildren']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FolderLogSink #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/sinks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_folder_log_sinks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingFolderLogSinks < GcpResourceBase\n  name 'google_logging_folder_log_sinks'\n  desc 'FolderLogSink plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:folders, field: :folder)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:destinations, field: :destination)\n  filter_table_config.add(:writer_identities, field: :writer_identity)\n  filter_table_config.add(:include_children, field: :include_children)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sinks')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'folder' => ->(obj) { [:folder, obj['folder']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'destination' => ->(obj) { [:destination, obj['destination']] },\n      'writerIdentity' => ->(obj) { [:writer_identity, obj['writerIdentity']] },\n      'includeChildren' => ->(obj) { [:include_children, obj['includeChildren']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders/{{folder}}/sinks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_organization_log_sink.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingOrganizationLogSink < GcpResourceBase\n  name 'google_logging_organization_log_sink'\n  desc 'OrganizationLogSink'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :organization\n  attr_reader :name\n  attr_reader :filter\n  attr_reader :destination\n  attr_reader :writer_identity\n  attr_reader :include_children\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @organization = @fetched['organization']\n    @name = @fetched['name']\n    @filter = @fetched['filter']\n    @destination = @fetched['destination']\n    @writer_identity = @fetched['writerIdentity']\n    @include_children = @fetched['includeChildren']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationLogSink #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'organizations/{{organization}}/sinks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_organization_log_sinks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingOrganizationLogSinks < GcpResourceBase\n  name 'google_logging_organization_log_sinks'\n  desc 'OrganizationLogSink plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:organizations, field: :organization)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:destinations, field: :destination)\n  filter_table_config.add(:writer_identities, field: :writer_identity)\n  filter_table_config.add(:include_children, field: :include_children)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sinks')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'organization' => ->(obj) { [:organization, obj['organization']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'destination' => ->(obj) { [:destination, obj['destination']] },\n      'writerIdentity' => ->(obj) { [:writer_identity, obj['writerIdentity']] },\n      'includeChildren' => ->(obj) { [:include_children, obj['includeChildren']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'organizations/{{organization}}/sinks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_project_exclusion.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingProjectExclusion < GcpResourceBase\n  name 'google_logging_project_exclusion'\n  desc 'ProjectExclusion'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :project\n  attr_reader :name\n  attr_reader :description\n  attr_reader :filter\n  attr_reader :disabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @project = @fetched['project']\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @filter = @fetched['filter']\n    @disabled = @fetched['disabled']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectExclusion #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/exclusions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_project_exclusions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingProjectExclusions < GcpResourceBase\n  name 'google_logging_project_exclusions'\n  desc 'ProjectExclusion plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:projects, field: :project)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:disableds, field: :disabled)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('exclusions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'project' => ->(obj) { [:project, obj['project']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/exclusions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_project_sink.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingProjectSink < GcpResourceBase\n  name 'google_logging_project_sink'\n  desc 'ProjectSink'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :project\n  attr_reader :name\n  attr_reader :filter\n  attr_reader :destination\n  attr_reader :writer_identity\n  attr_reader :include_children\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @project = @fetched['project']\n    @name = @fetched['name']\n    @filter = @fetched['filter']\n    @destination = @fetched['destination']\n    @writer_identity = @fetched['writerIdentity']\n    @include_children = @fetched['includeChildren']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectSink #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/sinks/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_logging_project_sinks.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingProjectSinks < GcpResourceBase\n  name 'google_logging_project_sinks'\n  desc 'ProjectSink plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:projects, field: :project)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:destinations, field: :destination)\n  filter_table_config.add(:writer_identities, field: :writer_identity)\n  filter_table_config.add(:include_children, field: :include_children)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('sinks')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'project' => ->(obj) { [:project, obj['project']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'destination' => ->(obj) { [:destination, obj['destination']] },\n      'writerIdentity' => ->(obj) { [:writer_identity, obj['writerIdentity']] },\n      'includeChildren' => ->(obj) { [:include_children, obj['includeChildren']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/sinks'\n  end\nend\n"
  },
  {
    "path": "libraries/google_memcache_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/memcache/property/instance_memcache_nodes'\nrequire 'google/memcache/property/instance_node_config'\nrequire 'google/memcache/property/instance_parameters'\n\n# A provider to manage Memcache resources.\nclass MemcacheInstance < GcpResourceBase\n  name 'google_memcache_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :display_name\n  attr_reader :memcache_nodes\n  attr_reader :create_time\n  attr_reader :discovery_endpoint\n  attr_reader :labels\n  attr_reader :memcache_full_version\n  attr_reader :zones\n  attr_reader :authorized_network\n  attr_reader :node_count\n  attr_reader :memcache_version\n  attr_reader :node_config\n  attr_reader :parameters\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n    @memcache_nodes = GoogleInSpec::Memcache::Property::InstanceMemcacheNodesArray.parse(@fetched['memcacheNodes'], to_s)\n    @create_time = parse_time_string(@fetched['createTime'])\n    @discovery_endpoint = @fetched['discoveryEndpoint']\n    @labels = @fetched['labels']\n    @memcache_full_version = @fetched['memcacheFullVersion']\n    @zones = @fetched['zones']\n    @authorized_network = @fetched['authorizedNetwork']\n    @node_count = @fetched['nodeCount']\n    @memcache_version = @fetched['memcacheVersion']\n    @node_config = GoogleInSpec::Memcache::Property::InstanceNodeConfig.new(@fetched['nodeConfig'], to_s)\n    @parameters = GoogleInSpec::Memcache::Property::InstanceParameters.new(@fetched['parameters'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://memcache.googleapis.com/v1beta2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_memcache_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass MemcacheInstances < GcpResourceBase\n  name 'google_memcache_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:memcache_nodes, field: :memcache_nodes)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:discovery_endpoints, field: :discovery_endpoint)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:memcache_full_versions, field: :memcache_full_version)\n  filter_table_config.add(:zones, field: :zones)\n  filter_table_config.add(:authorized_networks, field: :authorized_network)\n  filter_table_config.add(:node_counts, field: :node_count)\n  filter_table_config.add(:memcache_versions, field: :memcache_version)\n  filter_table_config.add(:node_configs, field: :node_config)\n  filter_table_config.add(:parameters, field: :parameters)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('resources')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'memcacheNodes' => ->(obj) { [:memcache_nodes, GoogleInSpec::Memcache::Property::InstanceMemcacheNodesArray.parse(obj['memcacheNodes'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'discoveryEndpoint' => ->(obj) { [:discovery_endpoint, obj['discoveryEndpoint']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'memcacheFullVersion' => ->(obj) { [:memcache_full_version, obj['memcacheFullVersion']] },\n      'zones' => ->(obj) { [:zones, obj['zones']] },\n      'authorizedNetwork' => ->(obj) { [:authorized_network, obj['authorizedNetwork']] },\n      'nodeCount' => ->(obj) { [:node_count, obj['nodeCount']] },\n      'memcacheVersion' => ->(obj) { [:memcache_version, obj['memcacheVersion']] },\n      'nodeConfig' => ->(obj) { [:node_config, GoogleInSpec::Memcache::Property::InstanceNodeConfig.new(obj['nodeConfig'], to_s)] },\n      'parameters' => ->(obj) { [:parameters, GoogleInSpec::Memcache::Property::InstanceParameters.new(obj['parameters'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://memcache.googleapis.com/v1beta2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_ml_engine_model.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/mlengine/property/model_default_version'\n\n# A provider to manage ML Engine resources.\nclass MLEngineModel < GcpResourceBase\n  name 'google_ml_engine_model'\n  desc 'Model'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :default_version\n  attr_reader :regions\n  attr_reader :online_prediction_logging\n  attr_reader :online_prediction_console_logging\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @default_version = GoogleInSpec::MLEngine::Property::ModelDefaultVersion.new(@fetched['defaultVersion'], to_s)\n    @regions = @fetched['regions']\n    @online_prediction_logging = @fetched['onlinePredictionLogging']\n    @online_prediction_console_logging = @fetched['onlinePredictionConsoleLogging']\n    @labels = @fetched['labels']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Model #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://ml.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/models/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_ml_engine_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass MLEngineModels < GcpResourceBase\n  name 'google_ml_engine_models'\n  desc 'Model plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:default_versions, field: :default_version)\n  filter_table_config.add(:regions, field: :regions)\n  filter_table_config.add(:online_prediction_loggings, field: :online_prediction_logging)\n  filter_table_config.add(:online_prediction_console_loggings, field: :online_prediction_console_logging)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('models')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'defaultVersion' => ->(obj) { [:default_version, GoogleInSpec::MLEngine::Property::ModelDefaultVersion.new(obj['defaultVersion'], to_s)] },\n      'regions' => ->(obj) { [:regions, obj['regions']] },\n      'onlinePredictionLogging' => ->(obj) { [:online_prediction_logging, obj['onlinePredictionLogging']] },\n      'onlinePredictionConsoleLogging' => ->(obj) { [:online_prediction_console_logging, obj['onlinePredictionConsoleLogging']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://ml.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/models'\n  end\nend\n"
  },
  {
    "path": "libraries/google_monitoring_group.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud (Stackdriver) Monitoring resources.\nclass MonitoringGroup < GcpResourceBase\n  name 'google_monitoring_group'\n  desc 'Group'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :display_name\n  attr_reader :parent_name\n  attr_reader :filter\n  attr_reader :is_cluster\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n    @parent_name = @fetched['parentName']\n    @filter = @fetched['filter']\n    @is_cluster = @fetched['isCluster']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Group #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://monitoring.googleapis.com/v3/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_monitoring_groups.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass MonitoringGroups < GcpResourceBase\n  name 'google_monitoring_groups'\n  desc 'Group plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:parent_names, field: :parent_name)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:is_clusters, field: :is_cluster)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('group')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'parentName' => ->(obj) { [:parent_name, obj['parentName']] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'isCluster' => ->(obj) { [:is_cluster, obj['isCluster']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://monitoring.googleapis.com/v3/'\n  end\n\n  def resource_base_url\n    '{{name}}/groups'\n  end\nend\n"
  },
  {
    "path": "libraries/google_organization.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/resourcemanager/property/organization_owner'\n\n# A provider to manage Resource Manager resources.\nclass ResourceManagerOrganization < GcpResourceBase\n  name 'google_organization'\n  desc 'Organization'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :display_name\n  attr_reader :lifecycle_state\n  attr_reader :creation_time\n  attr_reader :owner\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n    @lifecycle_state = @fetched['lifecycleState']\n    @creation_time = parse_time_string(@fetched['creationTime'])\n    @owner = GoogleInSpec::ResourceManager::Property::OrganizationOwner.new(@fetched['owner'], to_s)\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Organization #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_organization_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Binding resources.\nclass OrganizationIamBinding < GcpResourceBase\n  name 'google_organization_iam_binding'\n  desc 'Organization Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Organization IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_organization_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Policy resources.\nclass OrganizationIamPolicy < GcpResourceBase\n  name 'google_organization_iam_policy'\n  desc 'Organization Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Organization IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_organization_policy.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleOrganizationPolicy < GcpResourceBase\n    name 'google_organization_policy'\n    desc 'Verifies configuration of an organization policy'\n\n    example \"\n      describe google_organization_policy(name: 'organizations/123456', constraint: 'constraints/compute.disableGuestAttributesAccess') do\n        it { should exist }\n        its('boolean_policy.enforced') { should be true }\n      end\n    \"\n    def initialize(opts = {})\n      super(opts)\n      @display_name = opts[:name]\n      @constraint = opts[:constraint]\n      catch_gcp_errors do\n        org_policy_request = Google::Apis::CloudresourcemanagerV1::GetOrgPolicyRequest.new\n        org_policy_request.constraint = opts[:constraint]\n        @organization_policy = @gcp.gcp_project_client.get_organization_org_policy(opts[:name], org_policy_request)\n        create_resource_methods(@organization_policy)\n      end\n    end\n\n    def exists?\n      !@organization_policy.nil?\n    end\n\n    def to_s\n      \"Organization #{@display_name} policy for constraint #{@constraint}\"\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_organizations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ResourceManagerOrganizations < GcpResourceBase\n  name 'google_organizations'\n  desc 'Organization plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:lifecycle_states, field: :lifecycle_state)\n  filter_table_config.add(:creation_times, field: :creation_time)\n  filter_table_config.add(:owners, field: :owner)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('organizations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Post')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'lifecycleState' => ->(obj) { [:lifecycle_state, obj['lifecycleState']] },\n      'creationTime' => ->(obj) { [:creation_time, parse_time_string(obj['creationTime'])] },\n      'owner' => ->(obj) { [:owner, GoogleInSpec::ResourceManager::Property::OrganizationOwner.new(obj['owner'], to_s)] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'organizations:search'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_folder_constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/list_constraint'\nclass OrgpolicyFolderConstraints < GcpResourceBase\n  name 'google_orgpolicy_folder_constraints'\n  desc 'FolderConstraint plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :displayName)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:constraint_defaults, field: :constraintDefault)\n  filter_table_config.add(:list_constraints, field: :listConstraint)\n  filter_table_config.add(:supports_dry_runs, field: :supportsDryRun)\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('constraints')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:displayName, obj['displayName']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'constraintDefault' => ->(obj) { [:constraintDefault, obj['constraintDefault']] },\n      'supportsDryRun' => ->(obj) { [:supportsDryRun, obj['supportsDryRun']] },\n      'listConstraint' => ->(obj) { [:listConstraint, GoogleInSpec::Orgpolicy::Property::ListConstraint.new(obj['listConstraint'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/constraints'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_folder_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass OrgpolicyFolderPolicys < GcpResourceBase\n  name 'google_orgpolicy_folder_policies'\n  desc 'FolderPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dry_run_specs, field: :dry_run_spec)\n  filter_table_config.add(:specs, field: :spec)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:alternates, field: :alternate)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('policies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'dryRunSpec' => ->(obj) { [:dry_run_spec, GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(obj['dryRunSpec'], to_s)] },\n      'spec' => ->(obj) { [:spec, GoogleInSpec::Orgpolicy::Property::PolicySpec.new(obj['spec'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'alternate' => ->(obj) { [:alternate, GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(obj['alternate'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_folder_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/policy_alternate'\nrequire 'google/orgpolicy/property/policy_alternate_spec'\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules'\nrequire 'google/orgpolicy/property/policy_dry_run_spec'\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules'\nrequire 'google/orgpolicy/property/policy_spec'\nrequire 'google/orgpolicy/property/policy_spec_rules'\n\n# A provider to manage orgpolicy resources.\nclass OrgpolicyFolderPolicy < GcpResourceBase\n  name 'google_orgpolicy_folder_policy'\n  desc 'FolderPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :dry_run_spec\n  attr_reader :spec\n  attr_reader :name\n  attr_reader :alternate\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @dry_run_spec = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(@fetched['dryRunSpec'], to_s)\n    @spec = GoogleInSpec::Orgpolicy::Property::PolicySpec.new(@fetched['spec'], to_s)\n    @name = @fetched['name']\n    @alternate = GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(@fetched['alternate'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FolderPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_organization_constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/list_constraint'\nclass OrgpolicyOrganizationConstraints < GcpResourceBase\n  name 'google_orgpolicy_organization_constraints'\n  desc 'OrganizationConstraint plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :displayName)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:constraint_defaults, field: :constraintDefault)\n  filter_table_config.add(:list_constraints, field: :listConstraint)\n  filter_table_config.add(:supports_dry_runs, field: :supportsDryRun)\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('constraints')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:displayName, obj['displayName']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'constraintDefault' => ->(obj) { [:constraintDefault, obj['constraintDefault']] },\n      'supportsDryRun' => ->(obj) { [:supportsDryRun, obj['supportsDryRun']] },\n      'listConstraint' => ->(obj) { [:listConstraint, GoogleInSpec::Orgpolicy::Property::ListConstraint.new(obj['listConstraint'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/constraints'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_organization_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass OrgpolicyOrganizationPolicys < GcpResourceBase\n  name 'google_orgpolicy_organization_policies'\n  desc 'OrganizationPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dry_run_specs, field: :dry_run_spec)\n  filter_table_config.add(:specs, field: :spec)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:alternates, field: :alternate)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('policies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'dryRunSpec' => ->(obj) { [:dry_run_spec, GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(obj['dryRunSpec'], to_s)] },\n      'spec' => ->(obj) { [:spec, GoogleInSpec::Orgpolicy::Property::PolicySpec.new(obj['spec'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'alternate' => ->(obj) { [:alternate, GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(obj['alternate'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_organization_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/policy_alternate'\nrequire 'google/orgpolicy/property/policy_alternate_spec'\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules'\nrequire 'google/orgpolicy/property/policy_dry_run_spec'\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules'\nrequire 'google/orgpolicy/property/policy_spec'\nrequire 'google/orgpolicy/property/policy_spec_rules'\n\n# A provider to manage orgpolicy resources.\nclass OrgpolicyOrganizationPolicy < GcpResourceBase\n  name 'google_orgpolicy_organization_policy'\n  desc 'OrganizationPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :dry_run_spec\n  attr_reader :spec\n  attr_reader :name\n  attr_reader :alternate\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @dry_run_spec = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(@fetched['dryRunSpec'], to_s)\n    @spec = GoogleInSpec::Orgpolicy::Property::PolicySpec.new(@fetched['spec'], to_s)\n    @name = @fetched['name']\n    @alternate = GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(@fetched['alternate'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"OrganizationPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_project_constraints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/list_constraint'\n\nclass OrgpolicyProjectConstraints < GcpResourceBase\n  name 'google_orgpolicy_project_constraints'\n  desc 'ProjectConstraint plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :displayName)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:constraint_defaults, field: :constraintDefault)\n  filter_table_config.add(:list_constraints, field: :listConstraint)\n  filter_table_config.add(:supports_dry_runs, field: :supportsDryRun)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('constraints')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:displayName, obj['displayName']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'constraintDefault' => ->(obj) { [:constraintDefault, obj['constraintDefault']] },\n      'supportsDryRun' => ->(obj) { [:supportsDryRun, obj['supportsDryRun']] },\n      'listConstraint' => ->(obj) { [:listConstraint, GoogleInSpec::Orgpolicy::Property::ListConstraint.new(obj['listConstraint'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/constraints'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_project_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass OrgpolicyProjectPolicys < GcpResourceBase\n  name 'google_orgpolicy_project_policies'\n  desc 'ProjectPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:dry_run_specs, field: :dry_run_spec)\n  filter_table_config.add(:specs, field: :spec)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:alternates, field: :alternate)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('policies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'dryRunSpec' => ->(obj) { [:dry_run_spec, GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(obj['dryRunSpec'], to_s)] },\n      'spec' => ->(obj) { [:spec, GoogleInSpec::Orgpolicy::Property::PolicySpec.new(obj['spec'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'alternate' => ->(obj) { [:alternate, GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(obj['alternate'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_orgpolicy_project_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/orgpolicy/property/policy_alternate'\nrequire 'google/orgpolicy/property/policy_alternate_spec'\nrequire 'google/orgpolicy/property/policy_alternate_spec_rules'\nrequire 'google/orgpolicy/property/policy_dry_run_spec'\nrequire 'google/orgpolicy/property/policy_dry_run_spec_rules'\nrequire 'google/orgpolicy/property/policy_spec'\nrequire 'google/orgpolicy/property/policy_spec_rules'\n\n# A provider to manage orgpolicy resources.\nclass OrgpolicyProjectPolicy < GcpResourceBase\n  name 'google_orgpolicy_project_policy'\n  desc 'ProjectPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :dry_run_spec\n  attr_reader :spec\n  attr_reader :name\n  attr_reader :alternate\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @dry_run_spec = GoogleInSpec::Orgpolicy::Property::PolicyDryRunSpec.new(@fetched['dryRunSpec'], to_s)\n    @spec = GoogleInSpec::Orgpolicy::Property::PolicySpec.new(@fetched['spec'], to_s)\n    @name = @fetched['name']\n    @alternate = GoogleInSpec::Orgpolicy::Property::PolicyAlternate.new(@fetched['alternate'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ProjectPolicy #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://orgpolicy.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/policies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/resourcemanager/property/project_parent'\n\n# A provider to manage Resource Manager resources.\nclass ResourceManagerProject < GcpResourceBase\n  name 'google_project'\n  desc 'Project'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :number\n  attr_reader :lifecycle_state\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :labels\n  attr_reader :parent\n  attr_reader :project_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @number = @fetched['projectNumber']\n    @lifecycle_state = @fetched['lifecycleState']\n    @name = @fetched['name']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @labels = @fetched['labels']\n    @parent = GoogleInSpec::ResourceManager::Property::ProjectParent.new(@fetched['parent'], to_s)\n    @project_id = @fetched['projectId']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Project #{@params[:project]}\"\n  end\n\n  def project_name\n    @name\n  end\n\n  def project_number\n    @number&.to_i\n  end\n\n  def label_value_by_key(label_key)\n    return nil if @labels.nil? || !@labels.has_key(label_key)\n    @labels[label_key]\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_alert_policies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass MonitoringAlertPolicys < GcpResourceBase\n  name 'google_project_alert_policies'\n  desc 'AlertPolicy plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:policy_names, field: :policy_names)\n  filter_table_config.add(:policy_display_names, field: :policy_display_names)\n  filter_table_config.add(:combiners, field: :combiner)\n  filter_table_config.add(:creation_records, field: :creation_record)\n  filter_table_config.add(:policy_enabled_states, field: :policy_enabled_state)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:notification_channels, field: :notification_channels)\n  filter_table_config.add(:user_labels, field: :user_labels)\n  filter_table_config.add(:documentations, field: :documentation)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('alertPolicies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:policy_names, obj['name']] },\n      'displayName' => ->(obj) { [:policy_display_names, obj['displayName']] },\n      'combiner' => ->(obj) { [:combiner, obj['combiner']] },\n      'creationRecord' => ->(obj) { [:creation_record, GoogleInSpec::Monitoring::Property::AlertPolicyCreationRecord.new(obj['creationRecord'], to_s)] },\n      'enabled' => ->(obj) { [:policy_enabled_state, obj['enabled']] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Monitoring::Property::AlertPolicyConditionsArray.parse(obj['conditions'], to_s)] },\n      'notificationChannels' => ->(obj) { [:notification_channels, obj['notificationChannels']] },\n      'userLabels' => ->(obj) { [:user_labels, obj['userLabels']] },\n      'documentation' => ->(obj) { [:documentation, GoogleInSpec::Monitoring::Property::AlertPolicyDocumentation.new(obj['documentation'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://monitoring.googleapis.com/'\n  end\n\n  def resource_base_url\n    'v3/projects/{{project}}/alertPolicies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_alert_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/monitoring/property/alertpolicy_conditions'\nrequire 'google/monitoring/property/alertpolicy_creation_record'\nrequire 'google/monitoring/property/alertpolicy_documentation'\n\n# A provider to manage Cloud (Stackdriver) Monitoring resources.\nclass MonitoringAlertPolicy < GcpResourceBase\n  name 'google_project_alert_policy'\n  desc 'AlertPolicy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :display_name\n  attr_reader :combiner\n  attr_reader :creation_record\n  attr_reader :enabled\n  attr_reader :conditions\n  attr_reader :notification_channels\n  attr_reader :user_labels\n  attr_reader :documentation\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n    @combiner = @fetched['combiner']\n    @creation_record = GoogleInSpec::Monitoring::Property::AlertPolicyCreationRecord.new(@fetched['creationRecord'], to_s)\n    @enabled = @fetched['enabled']\n    @conditions = GoogleInSpec::Monitoring::Property::AlertPolicyConditionsArray.parse(@fetched['conditions'], to_s)\n    @notification_channels = @fetched['notificationChannels']\n    @user_labels = @fetched['userLabels']\n    @documentation = GoogleInSpec::Monitoring::Property::AlertPolicyDocumentation.new(@fetched['documentation'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"AlertPolicy #{@params[:name]}\"\n  end\n\n  def enabled?\n    @enabled\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://monitoring.googleapis.com/'\n  end\n\n  def resource_base_url\n    'v3/projects/{{project}}/alertPolicies/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_alert_policy_condition.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/monitoring_v3'\n\nmodule Inspec::Resources\n  class GoogleProjectAlertPolicyCondition < GcpResourceBase\n    name 'google_project_alert_policy_condition'\n    desc 'Verifies settings for a single GCP project alert policy condition by policy name and filter name'\n\n    example \"\n      describe google_project_alert_policy_condition(policy: 'projects/my-project/alertPolicies/9271751234503117449', filter 'project=\\\"my-project\\\"') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @filter = opts[:filter]\n      @policy = opts[:policy]\n      catch_gcp_errors do\n        @policy_result = @gcp.gcp_client(Google::Apis::MonitoringV3::MonitoringService).get_project_alert_policy(@policy)\n        @condition = condition_for_filter(@filter)\n      end\n    end\n\n    def exists?\n      !@condition.nil?\n    end\n\n    def condition_for_filter(filter)\n      return nil if !defined?(@policy_result.conditions) || @policy_result.conditions.nil?\n      @policy_result.conditions.each do |condition|\n        next if !defined?(condition.condition_threshold.filter) || condition.condition_threshold.filter.nil?\n        return condition if condition.condition_threshold.filter == filter\n      end\n      nil\n    end\n\n    def condition_threshold_value\n      return false if !defined?(@condition.condition_threshold.threshold_value) || @condition.condition_threshold.threshold_value.nil?\n      @condition.condition_threshold.threshold_value\n    end\n\n    def aggregation_alignment_period\n      return false if !defined?(@condition.condition_threshold.aggregations[0].alignment_period) || @condition.condition_threshold.aggregations[0].alignment_period.nil?\n      @condition.condition_threshold.aggregations[0].alignment_period\n    end\n\n    def aggregation_per_series_aligner\n      return false if !defined?(@condition.condition_threshold.aggregations[0].per_series_aligner) || @condition.condition_threshold.aggregations[0].per_series_aligner.nil?\n      @condition.condition_threshold.aggregations[0].per_series_aligner\n    end\n\n    def aggregation_cross_series_reducer\n      return false if !defined?(@condition.condition_threshold.aggregations[0].cross_series_reducer) || @condition.condition_threshold.aggregations[0].cross_series_reducer.nil?\n      @condition.condition_threshold.aggregations[0].cross_series_reducer\n    end\n\n    def to_s\n      \"Alert Policy Condition #{@policy} \\\"#{@filter}\\\"\"\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_iam_binding.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectIAMBinding < GcpResourceBase\n    name 'google_project_iam_binding'\n    desc 'Verifies settings for a single GCP KMS key ring IAM bindings'\n\n    example \"\n      describe google_kms_key_ring_iam_binding(key_ring_url: 'projects/project/locations/europe-west2/keyRings/key-ring', role: 'roles/compute.admin') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      @role = opts[:role]\n      @iam_binding_exists = false\n      @members_list=[]\n      catch_gcp_errors do\n        # NOTE: this is the same call as for the plural iam_bindings resource because there isn't an easy way to pull out a singular binding\n        @iam_bindings = @gcp.gcp_project_client.get_project_iam_policy(@project)\n        raise Inspec::Exceptions::ResourceFailed, \"google_project_iam_binding is missing expected IAM policy 'bindings' property\" if !@iam_bindings || !@iam_bindings.bindings\n        @iam_bindings.bindings.each do |binding|\n          next if binding.role != @role\n          @iam_binding_exists=true\n          @members_list=binding.members\n        end\n      end\n    end\n\n    # return the list of users corresponding to the role\n    def members\n      @members_list\n    end\n\n    def exists?\n      @iam_binding_exists\n    end\n\n    def to_s\n      \"Project IAM Binding #{@role}\"\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectIAMBindings < GcpResourceBase\n    name 'google_project_iam_bindings'\n    desc 'Verifies settings for GCP project iam_bindings in bulk'\n\n    example \"\n      describe google_project_iam_bindings(project: 'chef-inspec-gcp') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_project_client.get_project_iam_policy(@project)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_iam_custom_role.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud IAM resources.\nclass IAMCustomRole < GcpResourceBase\n  name 'google_project_iam_custom_role'\n  desc 'CustomRole'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :title\n  attr_reader :description\n  attr_reader :included_permissions\n  attr_reader :stage\n  attr_reader :deleted\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @title = @fetched['title']\n    @description = @fetched['description']\n    @included_permissions = @fetched['includedPermissions']\n    @stage = @fetched['stage']\n    @deleted = @fetched['deleted']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CustomRole #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/roles/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_iam_custom_roles.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass IAMCustomRoles < GcpResourceBase\n  name 'google_project_iam_custom_roles'\n  desc 'CustomRole plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:titles, field: :title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:included_permissions, field: :included_permissions)\n  filter_table_config.add(:stages, field: :stage)\n  filter_table_config.add(:deleteds, field: :deleted)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('roles')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'title' => ->(obj) { [:title, obj['title']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'includedPermissions' => ->(obj) { [:included_permissions, obj['includedPermissions']] },\n      'stage' => ->(obj) { [:stage, obj['stage']] },\n      'deleted' => ->(obj) { [:deleted, obj['deleted']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/roles?view=FULL'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Policy resources.\nclass ProjectIamPolicy < GcpResourceBase\n  name 'google_project_iam_policy'\n  desc 'Project Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post', { 'options' => { 'requestedPolicyVersion' => 3 } }.to_json)\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Project IamPolicy #{@params[:project]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_logging_audit_config.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleProjectLoggingAuditConfig < GcpResourceBase\n    name 'google_project_logging_audit_config'\n    desc 'Verifies settings for a GCP project logging audit configuration'\n\n    example \"\n      describe google_project_logging_audit_config(project: 'chef-inspec-gcp') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @project = opts[:project]\n      catch_gcp_errors do\n        @audit_logging_configs = @gcp.gcp_project_client.get_project_iam_policy(@project)\n        @default_types = []\n        @default_exempted_members = {}\n        if defined?(@audit_logging_configs.audit_configs) && @audit_logging_configs.audit_configs.instance_of?(::Array)\n          @audit_logging_configs.audit_configs.each do |service_config|\n            next if service_config.service != 'allServices'\n            service_config.audit_log_configs.each do |config|\n              @default_types+=[config.log_type]\n              @default_exempted_members[config.log_type]=config.exempted_members if defined?(config.exempted_members) && !config.exempted_members.nil?\n            end\n          end\n        end\n      end\n    end\n\n    def exists?\n      defined?(@audit_logging_configs.audit_configs) && !@audit_logging_configs.audit_configs.nil?\n    end\n\n    attr_reader :default_types\n\n    attr_reader :default_exempted_members\n\n    def has_default_exempted_members?\n      @default_exempted_members.values.any?\n    end\n\n    def to_s\n      \"Logging Audit Config For #{@project}\"\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_metric.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/logging/property/metric_bucket_options'\nrequire 'google/logging/property/metric_bucket_options_explicit_buckets'\nrequire 'google/logging/property/metric_bucket_options_exponential_buckets'\nrequire 'google/logging/property/metric_bucket_options_linear_buckets'\nrequire 'google/logging/property/metric_metric_descriptor'\nrequire 'google/logging/property/metric_metric_descriptor_labels'\n\n# A provider to manage Cloud (Stackdriver) Logging resources.\nclass LoggingMetric < GcpResourceBase\n  name 'google_project_metric'\n  desc 'Metric'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :filter\n  attr_reader :metric_descriptor\n  attr_reader :label_extractors\n  attr_reader :value_extractor\n  attr_reader :bucket_options\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @filter = @fetched['filter']\n    @metric_descriptor = GoogleInSpec::Logging::Property::MetricMetricDescriptor.new(@fetched['metricDescriptor'], to_s)\n    @label_extractors = @fetched['labelExtractors']\n    @value_extractor = @fetched['valueExtractor']\n    @bucket_options = GoogleInSpec::Logging::Property::MetricBucketOptions.new(@fetched['bucketOptions'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Metric #{@params[:project]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/metrics/{{%name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_metrics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass LoggingMetrics < GcpResourceBase\n  name 'google_project_metrics'\n  desc 'Metric plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:metric_names, field: :metric_name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:metric_filters, field: :metric_filter)\n  filter_table_config.add(:metric_descriptors, field: :metric_descriptor)\n  filter_table_config.add(:label_extractors, field: :label_extractors)\n  filter_table_config.add(:value_extractors, field: :value_extractor)\n  filter_table_config.add(:bucket_options, field: :bucket_options)\n  filter_table_config.add(:metric_types, field: :metric_type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('metrics')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        hash_with_symbols[:metric_type] = hash.dig('metricDescriptor', 'type')\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:metric_name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'filter' => ->(obj) { [:metric_filter, obj['filter']] },\n      'metricDescriptor' => ->(obj) { [:metric_descriptor, GoogleInSpec::Logging::Property::MetricMetricDescriptor.new(obj['metricDescriptor'], to_s)] },\n      'labelExtractors' => ->(obj) { [:label_extractors, obj['labelExtractors']] },\n      'valueExtractor' => ->(obj) { [:value_extractor, obj['valueExtractor']] },\n      'bucketOptions' => ->(obj) { [:bucket_options, GoogleInSpec::Logging::Property::MetricBucketOptions.new(obj['bucketOptions'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://logging.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/metrics'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/serviceusage/property/service_config'\nrequire 'google/serviceusage/property/service_config_apis'\n\n# A provider to manage Service Usage resources.\nclass ServiceUsageService < GcpResourceBase\n  name 'google_project_service'\n  desc 'Service'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :parent\n  attr_reader :state\n  attr_reader :disable_dependent_services\n  attr_reader :config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @parent = @fetched['parent']\n    @state = @fetched['state']\n    @disable_dependent_services = @fetched['disableDependentServices']\n    @config = GoogleInSpec::ServiceUsage::Property::ServiceConfig.new(@fetched['config'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Service #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://serviceusage.googleapis.com/v1beta1/'\n    else\n      'https://serviceusage.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/services/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_project_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ServiceUsageServices < GcpResourceBase\n  name 'google_project_services'\n  desc 'Service plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:disable_dependent_services, field: :disable_dependent_services)\n  filter_table_config.add(:configs, field: :config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('services')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'disableDependentServices' => ->(obj) { [:disable_dependent_services, obj['disableDependentServices']] },\n      'config' => ->(obj) { [:config, GoogleInSpec::ServiceUsage::Property::ServiceConfig.new(obj['config'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://serviceusage.googleapis.com/v1beta1/'\n    else\n      'https://serviceusage.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/services'\n  end\nend\n"
  },
  {
    "path": "libraries/google_projects.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ResourceManagerProjects < GcpResourceBase\n  name 'google_projects'\n  desc 'Project plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:project_numbers, field: :project_number)\n  filter_table_config.add(:lifecycle_states, field: :lifecycle_state)\n  filter_table_config.add(:project_names, field: :project_name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:project_ids, field: :project_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('projects')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'projectNumber' => ->(obj) { [:project_number, obj['projectNumber']] },\n      'lifecycleState' => ->(obj) { [:lifecycle_state, obj['lifecycleState']] },\n      'name' => ->(obj) { [:project_name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'parent' => ->(obj) { [:parent, GoogleInSpec::ResourceManager::Property::ProjectParent.new(obj['parent'], to_s)] },\n      'projectId' => ->(obj) { [:project_id, obj['projectId']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_subscription.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/pubsub/property/subscription_dead_letter_policy'\nrequire 'google/pubsub/property/subscription_expiration_policy'\nrequire 'google/pubsub/property/subscription_push_config'\nrequire 'google/pubsub/property/subscription_push_config_oidc_token'\nrequire 'google/pubsub/property/subscription_retry_policy'\n\n# A provider to manage Cloud Pub/Sub resources.\nclass PubsubSubscription < GcpResourceBase\n  name 'google_pubsub_subscription'\n  desc 'Subscription'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :topic\n  attr_reader :labels\n  attr_reader :push_config\n  attr_reader :ack_deadline_seconds\n  attr_reader :message_retention_duration\n  attr_reader :retain_acked_messages\n  attr_reader :expiration_policy\n  attr_reader :filter\n  attr_reader :dead_letter_policy\n  attr_reader :retry_policy\n  attr_reader :enable_message_ordering\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = name_from_self_link(@fetched['name'])\n    @topic = @fetched['topic']\n    @labels = @fetched['labels']\n    @push_config = GoogleInSpec::Pubsub::Property::SubscriptionPushConfig.new(@fetched['pushConfig'], to_s)\n    @ack_deadline_seconds = @fetched['ackDeadlineSeconds']\n    @message_retention_duration = @fetched['messageRetentionDuration']\n    @retain_acked_messages = @fetched['retainAckedMessages']\n    @expiration_policy = GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(@fetched['expirationPolicy'], to_s)\n    @filter = @fetched['filter']\n    @dead_letter_policy = GoogleInSpec::Pubsub::Property::SubscriptionDeadLetterPolicy.new(@fetched['deadLetterPolicy'], to_s)\n    @retry_policy = GoogleInSpec::Pubsub::Property::SubscriptionRetryPolicy.new(@fetched['retryPolicy'], to_s)\n    @enable_message_ordering = @fetched['enableMessageOrdering']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subscription #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_subscription_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Binding resources.\nclass SubscriptionIamBinding < GcpResourceBase\n  name 'google_pubsub_subscription_iam_binding'\n  desc 'Subscription Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Subscription IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_subscription_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Policy resources.\nclass SubscriptionIamPolicy < GcpResourceBase\n  name 'google_pubsub_subscription_iam_policy'\n  desc 'Subscription Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Subscription IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_subscriptions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass PubsubSubscriptions < GcpResourceBase\n  name 'google_pubsub_subscriptions'\n  desc 'Subscription plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:topics, field: :topic)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:push_configs, field: :push_config)\n  filter_table_config.add(:ack_deadline_seconds, field: :ack_deadline_seconds)\n  filter_table_config.add(:message_retention_durations, field: :message_retention_duration)\n  filter_table_config.add(:retain_acked_messages, field: :retain_acked_messages)\n  filter_table_config.add(:expiration_policies, field: :expiration_policy)\n  filter_table_config.add(:filters, field: :filter)\n  filter_table_config.add(:dead_letter_policies, field: :dead_letter_policy)\n  filter_table_config.add(:retry_policies, field: :retry_policy)\n  filter_table_config.add(:enable_message_orderings, field: :enable_message_ordering)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('subscriptions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n      'topic' => ->(obj) { [:topic, obj['topic']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'pushConfig' => ->(obj) { [:push_config, GoogleInSpec::Pubsub::Property::SubscriptionPushConfig.new(obj['pushConfig'], to_s)] },\n      'ackDeadlineSeconds' => ->(obj) { [:ack_deadline_seconds, obj['ackDeadlineSeconds']] },\n      'messageRetentionDuration' => ->(obj) { [:message_retention_duration, obj['messageRetentionDuration']] },\n      'retainAckedMessages' => ->(obj) { [:retain_acked_messages, obj['retainAckedMessages']] },\n      'expirationPolicy' => ->(obj) { [:expiration_policy, GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(obj['expirationPolicy'], to_s)] },\n      'filter' => ->(obj) { [:filter, obj['filter']] },\n      'deadLetterPolicy' => ->(obj) { [:dead_letter_policy, GoogleInSpec::Pubsub::Property::SubscriptionDeadLetterPolicy.new(obj['deadLetterPolicy'], to_s)] },\n      'retryPolicy' => ->(obj) { [:retry_policy, GoogleInSpec::Pubsub::Property::SubscriptionRetryPolicy.new(obj['retryPolicy'], to_s)] },\n      'enableMessageOrdering' => ->(obj) { [:enable_message_ordering, obj['enableMessageOrdering']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/subscriptions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_topic.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/pubsub/property/topic_message_storage_policy'\n\n# A provider to manage Cloud Pub/Sub resources.\nclass PubsubTopic < GcpResourceBase\n  name 'google_pubsub_topic'\n  desc 'Topic'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :kms_key_name\n  attr_reader :labels\n  attr_reader :message_storage_policy\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = name_from_self_link(@fetched['name'])\n    @kms_key_name = @fetched['kmsKeyName']\n    @labels = @fetched['labels']\n    @message_storage_policy = GoogleInSpec::Pubsub::Property::TopicMessageStoragePolicy.new(@fetched['messageStoragePolicy'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Topic #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_topic_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Binding resources.\nclass TopicIamBinding < GcpResourceBase\n  name 'google_pubsub_topic_iam_binding'\n  desc 'Topic Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Topic IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_topic_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Pub/Sub IAM Policy resources.\nclass TopicIamPolicy < GcpResourceBase\n  name 'google_pubsub_topic_iam_policy'\n  desc 'Topic Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Topic IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_pubsub_topics.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass PubsubTopics < GcpResourceBase\n  name 'google_pubsub_topics'\n  desc 'Topic plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:kms_key_names, field: :kms_key_name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:message_storage_policies, field: :message_storage_policy)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('topics')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, name_from_self_link(obj['name'])] },\n      'kmsKeyName' => ->(obj) { [:kms_key_name, obj['kmsKeyName']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'messageStoragePolicy' => ->(obj) { [:message_storage_policy, GoogleInSpec::Pubsub::Property::TopicMessageStoragePolicy.new(obj['messageStoragePolicy'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://pubsub.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/topics'\n  end\nend\n"
  },
  {
    "path": "libraries/google_redis_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/redis/property/instance_server_ca_certs'\n\n# A provider to manage Memorystore (Redis) resources.\nclass RedisInstance < GcpResourceBase\n  name 'google_redis_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :alternative_location_id\n  attr_reader :auth_enabled\n  attr_reader :authorized_network\n  attr_reader :connect_mode\n  attr_reader :create_time\n  attr_reader :current_location_id\n  attr_reader :display_name\n  attr_reader :host\n  attr_reader :labels\n  attr_reader :redis_configs\n  attr_reader :location_id\n  attr_reader :name\n  attr_reader :memory_size_gb\n  attr_reader :port\n  attr_reader :persistence_iam_identity\n  attr_reader :redis_version\n  attr_reader :reserved_ip_range\n  attr_reader :tier\n  attr_reader :transit_encryption_mode\n  attr_reader :server_ca_certs\n  attr_reader :region\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @alternative_location_id = @fetched['alternativeLocationId']\n    @auth_enabled = @fetched['authEnabled']\n    @authorized_network = @fetched['authorizedNetwork']\n    @connect_mode = @fetched['connectMode']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @current_location_id = @fetched['currentLocationId']\n    @display_name = @fetched['displayName']\n    @host = @fetched['host']\n    @labels = @fetched['labels']\n    @redis_configs = @fetched['redisConfigs']\n    @location_id = @fetched['locationId']\n    @name = @fetched['name']\n    @memory_size_gb = @fetched['memorySizeGb']\n    @port = @fetched['port']\n    @persistence_iam_identity = @fetched['persistenceIamIdentity']\n    @redis_version = @fetched['redisVersion']\n    @reserved_ip_range = @fetched['reservedIpRange']\n    @tier = @fetched['tier']\n    @transit_encryption_mode = @fetched['transitEncryptionMode']\n    @server_ca_certs = GoogleInSpec::Redis::Property::InstanceServerCaCertsArray.parse(@fetched['serverCaCerts'], to_s)\n    @region = @fetched['region']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://redis.googleapis.com/v1beta1/'\n    else\n      'https://redis.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_redis_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RedisInstances < GcpResourceBase\n  name 'google_redis_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:alternative_location_ids, field: :alternative_location_id)\n  filter_table_config.add(:auth_enableds, field: :auth_enabled)\n  filter_table_config.add(:authorized_networks, field: :authorized_network)\n  filter_table_config.add(:connect_modes, field: :connect_mode)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:current_location_ids, field: :current_location_id)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:hosts, field: :host)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:redis_configs, field: :redis_configs)\n  filter_table_config.add(:location_ids, field: :location_id)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:memory_size_gbs, field: :memory_size_gb)\n  filter_table_config.add(:ports, field: :port)\n  filter_table_config.add(:persistence_iam_identities, field: :persistence_iam_identity)\n  filter_table_config.add(:redis_versions, field: :redis_version)\n  filter_table_config.add(:reserved_ip_ranges, field: :reserved_ip_range)\n  filter_table_config.add(:tiers, field: :tier)\n  filter_table_config.add(:transit_encryption_modes, field: :transit_encryption_mode)\n  filter_table_config.add(:server_ca_certs, field: :server_ca_certs)\n  filter_table_config.add(:regions, field: :region)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'alternativeLocationId' => ->(obj) { [:alternative_location_id, obj['alternativeLocationId']] },\n      'authEnabled' => ->(obj) { [:auth_enabled, obj['authEnabled']] },\n      'authorizedNetwork' => ->(obj) { [:authorized_network, obj['authorizedNetwork']] },\n      'connectMode' => ->(obj) { [:connect_mode, obj['connectMode']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'currentLocationId' => ->(obj) { [:current_location_id, obj['currentLocationId']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'host' => ->(obj) { [:host, obj['host']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'redisConfigs' => ->(obj) { [:redis_configs, obj['redisConfigs']] },\n      'locationId' => ->(obj) { [:location_id, obj['locationId']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'memorySizeGb' => ->(obj) { [:memory_size_gb, obj['memorySizeGb']] },\n      'port' => ->(obj) { [:port, obj['port']] },\n      'persistenceIamIdentity' => ->(obj) { [:persistence_iam_identity, obj['persistenceIamIdentity']] },\n      'redisVersion' => ->(obj) { [:redis_version, obj['redisVersion']] },\n      'reservedIpRange' => ->(obj) { [:reserved_ip_range, obj['reservedIpRange']] },\n      'tier' => ->(obj) { [:tier, obj['tier']] },\n      'transitEncryptionMode' => ->(obj) { [:transit_encryption_mode, obj['transitEncryptionMode']] },\n      'serverCaCerts' => ->(obj) { [:server_ca_certs, GoogleInSpec::Redis::Property::InstanceServerCaCertsArray.parse(obj['serverCaCerts'], to_s)] },\n      'region' => ->(obj) { [:region, obj['region']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(beta = false)\n    if beta\n      'https://redis.googleapis.com/v1beta1/'\n    else\n      'https://redis.googleapis.com/v1/'\n    end\n  end\n\n  def resource_base_url\n    'projects/{{project}}/locations/{{region}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_resourcemanager_folder.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Resource Manager resources.\nclass ResourceManagerFolder < GcpResourceBase\n  name 'google_resourcemanager_folder'\n  desc 'Folder'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :lifecycle_state\n  attr_reader :create_time\n  attr_reader :parent\n  attr_reader :display_name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @lifecycle_state = @fetched['lifecycleState']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @parent = @fetched['parent']\n    @display_name = @fetched['displayName']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Folder #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_resourcemanager_folder_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Binding resources.\nclass FolderIamBinding < GcpResourceBase\n  name 'google_resourcemanager_folder_iam_binding'\n  desc 'Folder Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Folder IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_resourcemanager_folder_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Resource Manager IAM Policy resources.\nclass FolderIamPolicy < GcpResourceBase\n  name 'google_resourcemanager_folder_iam_policy'\n  desc 'Folder Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Folder IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_resourcemanager_folders.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ResourceManagerFolders < GcpResourceBase\n  name 'google_resourcemanager_folders'\n  desc 'Folder plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:lifecycle_states, field: :lifecycle_state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:parents, field: :parent)\n  filter_table_config.add(:display_names, field: :display_name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('folders')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'lifecycleState' => ->(obj) { [:lifecycle_state, obj['lifecycleState']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'parent' => ->(obj) { [:parent, obj['parent']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://cloudresourcemanager.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    'folders?parent={{parent}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_run_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/run/property/job_annotations'\nrequire 'google/run/property/job_binary_authorization'\nrequire 'google/run/property/job_conditions'\nrequire 'google/run/property/job_labels'\nrequire 'google/run/property/job_latest_created_execution'\nrequire 'google/run/property/job_template'\nrequire 'google/run/property/job_template_annotations'\nrequire 'google/run/property/job_template_labels'\nrequire 'google/run/property/job_template_template'\nrequire 'google/run/property/job_template_template_containers'\nrequire 'google/run/property/job_template_template_volumes'\nrequire 'google/run/property/job_template_template_vpc_access'\nrequire 'google/run/property/job_template_template_vpc_access_network_interfaces'\nrequire 'google/run/property/job_terminal_condition'\n\n# A provider to manage run resources.\nclass RunJob < GcpResourceBase\n  name 'google_run_job'\n  desc 'Job'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :uid\n  attr_reader :generation\n  attr_reader :labels\n  attr_reader :annotations\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :delete_time\n  attr_reader :expire_time\n  attr_reader :creator\n  attr_reader :last_modifier\n  attr_reader :client\n  attr_reader :client_version\n  attr_reader :launch_stage\n  attr_reader :binary_authorization\n  attr_reader :template\n  attr_reader :observed_generation\n  attr_reader :terminal_condition\n  attr_reader :conditions\n  attr_reader :execution_count\n  attr_reader :latest_created_execution\n  attr_reader :reconciling\n  attr_reader :satisfies_pzs\n  attr_reader :start_execution_token\n  attr_reader :run_execution_token\n  attr_reader :etag\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @uid = @fetched['uid']\n    @generation = @fetched['generation']\n    @labels = GoogleInSpec::Run::Property::JobLabels.new(@fetched['labels'], to_s)\n    @annotations = GoogleInSpec::Run::Property::JobAnnotations.new(@fetched['annotations'], to_s)\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @delete_time = @fetched['deleteTime']\n    @expire_time = @fetched['expireTime']\n    @creator = @fetched['creator']\n    @last_modifier = @fetched['lastModifier']\n    @client = @fetched['client']\n    @client_version = @fetched['clientVersion']\n    @launch_stage = @fetched['launchStage']\n    @binary_authorization = GoogleInSpec::Run::Property::JobBinaryAuthorization.new(@fetched['binaryAuthorization'], to_s)\n    @template = GoogleInSpec::Run::Property::JobTemplate.new(@fetched['template'], to_s)\n    @observed_generation = @fetched['observedGeneration']\n    @terminal_condition = GoogleInSpec::Run::Property::JobTerminalCondition.new(@fetched['terminalCondition'], to_s)\n    @conditions = GoogleInSpec::Run::Property::JobConditionsArray.parse(@fetched['conditions'], to_s)\n    @execution_count = @fetched['executionCount']\n    @latest_created_execution = GoogleInSpec::Run::Property::JobLatestCreatedExecution.new(@fetched['latestCreatedExecution'], to_s)\n    @reconciling = @fetched['reconciling']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @start_execution_token = @fetched['startExecutionToken']\n    @run_execution_token = @fetched['runExecutionToken']\n    @etag = @fetched['etag']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Job #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://run.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_run_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RunJobs < GcpResourceBase\n  name 'google_run_jobs'\n  desc 'Job plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:uids, field: :uid)\n  filter_table_config.add(:generations, field: :generation)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:annotations, field: :annotations)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:delete_times, field: :delete_time)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:creators, field: :creator)\n  filter_table_config.add(:last_modifiers, field: :last_modifier)\n  filter_table_config.add(:clients, field: :client)\n  filter_table_config.add(:client_versions, field: :client_version)\n  filter_table_config.add(:launch_stages, field: :launch_stage)\n  filter_table_config.add(:binary_authorizations, field: :binary_authorization)\n  filter_table_config.add(:templates, field: :template)\n  filter_table_config.add(:observed_generations, field: :observed_generation)\n  filter_table_config.add(:terminal_conditions, field: :terminal_condition)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:execution_counts, field: :execution_count)\n  filter_table_config.add(:latest_created_executions, field: :latest_created_execution)\n  filter_table_config.add(:reconcilings, field: :reconciling)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:start_execution_tokens, field: :start_execution_token)\n  filter_table_config.add(:run_execution_tokens, field: :run_execution_token)\n  filter_table_config.add(:etags, field: :etag)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('jobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'uid' => ->(obj) { [:uid, obj['uid']] },\n      'generation' => ->(obj) { [:generation, obj['generation']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Run::Property::JobLabels.new(obj['labels'], to_s)] },\n      'annotations' => ->(obj) { [:annotations, GoogleInSpec::Run::Property::JobAnnotations.new(obj['annotations'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'deleteTime' => ->(obj) { [:delete_time, obj['deleteTime']] },\n      'expireTime' => ->(obj) { [:expire_time, obj['expireTime']] },\n      'creator' => ->(obj) { [:creator, obj['creator']] },\n      'lastModifier' => ->(obj) { [:last_modifier, obj['lastModifier']] },\n      'client' => ->(obj) { [:client, obj['client']] },\n      'clientVersion' => ->(obj) { [:client_version, obj['clientVersion']] },\n      'launchStage' => ->(obj) { [:launch_stage, obj['launchStage']] },\n      'binaryAuthorization' => ->(obj) { [:binary_authorization, GoogleInSpec::Run::Property::JobBinaryAuthorization.new(obj['binaryAuthorization'], to_s)] },\n      'template' => ->(obj) { [:template, GoogleInSpec::Run::Property::JobTemplate.new(obj['template'], to_s)] },\n      'observedGeneration' => ->(obj) { [:observed_generation, obj['observedGeneration']] },\n      'terminalCondition' => ->(obj) { [:terminal_condition, GoogleInSpec::Run::Property::JobTerminalCondition.new(obj['terminalCondition'], to_s)] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Run::Property::JobConditionsArray.parse(obj['conditions'], to_s)] },\n      'executionCount' => ->(obj) { [:execution_count, obj['executionCount']] },\n      'latestCreatedExecution' => ->(obj) { [:latest_created_execution, GoogleInSpec::Run::Property::JobLatestCreatedExecution.new(obj['latestCreatedExecution'], to_s)] },\n      'reconciling' => ->(obj) { [:reconciling, obj['reconciling']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'startExecutionToken' => ->(obj) { [:start_execution_token, obj['startExecutionToken']] },\n      'runExecutionToken' => ->(obj) { [:run_execution_token, obj['runExecutionToken']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://run.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/jobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_run_service.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/run/property/service_annotations'\nrequire 'google/run/property/service_binary_authorization'\nrequire 'google/run/property/service_conditions'\nrequire 'google/run/property/service_labels'\nrequire 'google/run/property/service_scaling'\nrequire 'google/run/property/service_template'\nrequire 'google/run/property/service_template_annotations'\nrequire 'google/run/property/service_template_containers'\nrequire 'google/run/property/service_template_labels'\nrequire 'google/run/property/service_template_node_selector'\nrequire 'google/run/property/service_template_scaling'\nrequire 'google/run/property/service_template_volumes'\nrequire 'google/run/property/service_template_vpc_access'\nrequire 'google/run/property/service_template_vpc_access_network_interfaces'\nrequire 'google/run/property/service_terminal_condition'\nrequire 'google/run/property/service_traffic'\nrequire 'google/run/property/service_traffic_statuses'\n\n# A provider to manage run resources.\nclass RunService < GcpResourceBase\n  name 'google_run_service'\n  desc 'Service'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :description\n  attr_reader :uid\n  attr_reader :generation\n  attr_reader :labels\n  attr_reader :annotations\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :delete_time\n  attr_reader :expire_time\n  attr_reader :creator\n  attr_reader :last_modifier\n  attr_reader :client\n  attr_reader :client_version\n  attr_reader :ingress\n  attr_reader :launch_stage\n  attr_reader :binary_authorization\n  attr_reader :template\n  attr_reader :traffic\n  attr_reader :scaling\n  attr_reader :default_uri_disabled\n  attr_reader :custom_audiences\n  attr_reader :observed_generation\n  attr_reader :terminal_condition\n  attr_reader :conditions\n  attr_reader :latest_ready_revision\n  attr_reader :latest_created_revision\n  attr_reader :traffic_statuses\n  attr_reader :uri\n  attr_reader :satisfies_pzs\n  attr_reader :reconciling\n  attr_reader :etag\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @description = @fetched['description']\n    @uid = @fetched['uid']\n    @generation = @fetched['generation']\n    @labels = GoogleInSpec::Run::Property::ServiceLabels.new(@fetched['labels'], to_s)\n    @annotations = GoogleInSpec::Run::Property::ServiceAnnotations.new(@fetched['annotations'], to_s)\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @delete_time = @fetched['deleteTime']\n    @expire_time = @fetched['expireTime']\n    @creator = @fetched['creator']\n    @last_modifier = @fetched['lastModifier']\n    @client = @fetched['client']\n    @client_version = @fetched['clientVersion']\n    @ingress = @fetched['ingress']\n    @launch_stage = @fetched['launchStage']\n    @binary_authorization = GoogleInSpec::Run::Property::ServiceBinaryAuthorization.new(@fetched['binaryAuthorization'], to_s)\n    @template = GoogleInSpec::Run::Property::ServiceTemplate.new(@fetched['template'], to_s)\n    @traffic = GoogleInSpec::Run::Property::ServiceTrafficArray.parse(@fetched['traffic'], to_s)\n    @scaling = GoogleInSpec::Run::Property::ServiceScaling.new(@fetched['scaling'], to_s)\n    @default_uri_disabled = @fetched['defaultUriDisabled']\n    @custom_audiences = @fetched['customAudiences']\n    @observed_generation = @fetched['observedGeneration']\n    @terminal_condition = GoogleInSpec::Run::Property::ServiceTerminalCondition.new(@fetched['terminalCondition'], to_s)\n    @conditions = GoogleInSpec::Run::Property::ServiceConditionsArray.parse(@fetched['conditions'], to_s)\n    @latest_ready_revision = @fetched['latestReadyRevision']\n    @latest_created_revision = @fetched['latestCreatedRevision']\n    @traffic_statuses = GoogleInSpec::Run::Property::ServiceTrafficStatusesArray.parse(@fetched['trafficStatuses'], to_s)\n    @uri = @fetched['uri']\n    @satisfies_pzs = @fetched['satisfiesPzs']\n    @reconciling = @fetched['reconciling']\n    @etag = @fetched['etag']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Service #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://run.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_run_services.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RunServices < GcpResourceBase\n  name 'google_run_services'\n  desc 'Service plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:uids, field: :uid)\n  filter_table_config.add(:generations, field: :generation)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:annotations, field: :annotations)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:delete_times, field: :delete_time)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:creators, field: :creator)\n  filter_table_config.add(:last_modifiers, field: :last_modifier)\n  filter_table_config.add(:clients, field: :client)\n  filter_table_config.add(:client_versions, field: :client_version)\n  filter_table_config.add(:ingresses, field: :ingress)\n  filter_table_config.add(:launch_stages, field: :launch_stage)\n  filter_table_config.add(:binary_authorizations, field: :binary_authorization)\n  filter_table_config.add(:templates, field: :template)\n  filter_table_config.add(:traffics, field: :traffic)\n  filter_table_config.add(:scalings, field: :scaling)\n  filter_table_config.add(:default_uri_disableds, field: :default_uri_disabled)\n  filter_table_config.add(:custom_audiences, field: :custom_audiences)\n  filter_table_config.add(:observed_generations, field: :observed_generation)\n  filter_table_config.add(:terminal_conditions, field: :terminal_condition)\n  filter_table_config.add(:conditions, field: :conditions)\n  filter_table_config.add(:latest_ready_revisions, field: :latest_ready_revision)\n  filter_table_config.add(:latest_created_revisions, field: :latest_created_revision)\n  filter_table_config.add(:traffic_statuses, field: :traffic_statuses)\n  filter_table_config.add(:uris, field: :uri)\n  filter_table_config.add(:satisfies_pzs, field: :satisfies_pzs)\n  filter_table_config.add(:reconcilings, field: :reconciling)\n  filter_table_config.add(:etags, field: :etag)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('services')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'uid' => ->(obj) { [:uid, obj['uid']] },\n      'generation' => ->(obj) { [:generation, obj['generation']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::Run::Property::ServiceLabels.new(obj['labels'], to_s)] },\n      'annotations' => ->(obj) { [:annotations, GoogleInSpec::Run::Property::ServiceAnnotations.new(obj['annotations'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'deleteTime' => ->(obj) { [:delete_time, obj['deleteTime']] },\n      'expireTime' => ->(obj) { [:expire_time, obj['expireTime']] },\n      'creator' => ->(obj) { [:creator, obj['creator']] },\n      'lastModifier' => ->(obj) { [:last_modifier, obj['lastModifier']] },\n      'client' => ->(obj) { [:client, obj['client']] },\n      'clientVersion' => ->(obj) { [:client_version, obj['clientVersion']] },\n      'ingress' => ->(obj) { [:ingress, obj['ingress']] },\n      'launchStage' => ->(obj) { [:launch_stage, obj['launchStage']] },\n      'binaryAuthorization' => ->(obj) { [:binary_authorization, GoogleInSpec::Run::Property::ServiceBinaryAuthorization.new(obj['binaryAuthorization'], to_s)] },\n      'template' => ->(obj) { [:template, GoogleInSpec::Run::Property::ServiceTemplate.new(obj['template'], to_s)] },\n      'traffic' => ->(obj) { [:traffic, GoogleInSpec::Run::Property::ServiceTrafficArray.parse(obj['traffic'], to_s)] },\n      'scaling' => ->(obj) { [:scaling, GoogleInSpec::Run::Property::ServiceScaling.new(obj['scaling'], to_s)] },\n      'defaultUriDisabled' => ->(obj) { [:default_uri_disabled, obj['defaultUriDisabled']] },\n      'customAudiences' => ->(obj) { [:custom_audiences, obj['customAudiences']] },\n      'observedGeneration' => ->(obj) { [:observed_generation, obj['observedGeneration']] },\n      'terminalCondition' => ->(obj) { [:terminal_condition, GoogleInSpec::Run::Property::ServiceTerminalCondition.new(obj['terminalCondition'], to_s)] },\n      'conditions' => ->(obj) { [:conditions, GoogleInSpec::Run::Property::ServiceConditionsArray.parse(obj['conditions'], to_s)] },\n      'latestReadyRevision' => ->(obj) { [:latest_ready_revision, obj['latestReadyRevision']] },\n      'latestCreatedRevision' => ->(obj) { [:latest_created_revision, obj['latestCreatedRevision']] },\n      'trafficStatuses' => ->(obj) { [:traffic_statuses, GoogleInSpec::Run::Property::ServiceTrafficStatusesArray.parse(obj['trafficStatuses'], to_s)] },\n      'uri' => ->(obj) { [:uri, obj['uri']] },\n      'satisfiesPzs' => ->(obj) { [:satisfies_pzs, obj['satisfiesPzs']] },\n      'reconciling' => ->(obj) { [:reconciling, obj['reconciling']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://run.googleapis.com/v2/'\n  end\n\n  def resource_base_url\n    '{{parent}}/services'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_config.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Runtime Configurator resources.\nclass RuntimeConfigConfig < GcpResourceBase\n  name 'google_runtime_config_config'\n  desc 'Config'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Config #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_config_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Runtime Configurator IAM Binding resources.\nclass ConfigIamBinding < GcpResourceBase\n  name 'google_runtime_config_config_iam_binding'\n  desc 'Config Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Config IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_config_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Runtime Configurator IAM Policy resources.\nclass ConfigIamPolicy < GcpResourceBase\n  name 'google_runtime_config_config_iam_policy'\n  desc 'Config Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Config IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_configs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RuntimeConfigConfigs < GcpResourceBase\n  name 'google_runtime_config_configs'\n  desc 'Config plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('configs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_variable.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Runtime Configurator resources.\nclass RuntimeConfigVariable < GcpResourceBase\n  name 'google_runtime_config_variable'\n  desc 'Variable'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :value\n  attr_reader :text\n  attr_reader :name\n  attr_reader :config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @value = @fetched['value']\n    @text = @fetched['text']\n    @name = @fetched['name']\n    @config = @fetched['config']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Variable #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{config}}/variables/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_runtime_config_variables.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass RuntimeConfigVariables < GcpResourceBase\n  name 'google_runtime_config_variables'\n  desc 'Variable plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:values, field: :value)\n  filter_table_config.add(:texts, field: :text)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:configs, field: :config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('variables')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'value' => ->(obj) { [:value, obj['value']] },\n      'text' => ->(obj) { [:text, obj['text']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'config' => ->(obj) { [:config, obj['config']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://runtimeconfig.googleapis.com/v1beta1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/configs/{{config}}/variables?returnValues=true'\n  end\nend\n"
  },
  {
    "path": "libraries/google_secret_manager_secret.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/secretmanager/property/secret_replication'\nrequire 'google/secretmanager/property/secret_replication_user_managed'\nrequire 'google/secretmanager/property/secret_replication_user_managed_replicas'\nrequire 'google/secretmanager/property/secret_rotation'\nrequire 'google/secretmanager/property/secret_topics'\n\n# A provider to manage Secret Manager resources.\nclass SecretManagerSecret < GcpResourceBase\n  name 'google_secret_manager_secret'\n  desc 'Secret'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :labels\n  attr_reader :replication\n  attr_reader :topics\n  attr_reader :expire_time\n  attr_reader :ttl\n  attr_reader :rotation\n  attr_reader :secret_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @labels = @fetched['labels']\n    @replication = GoogleInSpec::SecretManager::Property::SecretReplication.new(@fetched['replication'], to_s)\n    @topics = GoogleInSpec::SecretManager::Property::SecretTopicsArray.parse(@fetched['topics'], to_s)\n    @expire_time = @fetched['expireTime']\n    @ttl = @fetched['ttl']\n    @rotation = GoogleInSpec::SecretManager::Property::SecretRotation.new(@fetched['rotation'], to_s)\n    @secret_id = @fetched['secretId']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Secret #{@params[:secret_id]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://secretmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_secret_manager_secrets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SecretManagerSecrets < GcpResourceBase\n  name 'google_secret_manager_secrets'\n  desc 'Secret plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:replications, field: :replication)\n  filter_table_config.add(:topics, field: :topics)\n  filter_table_config.add(:expire_times, field: :expire_time)\n  filter_table_config.add(:ttls, field: :ttl)\n  filter_table_config.add(:rotations, field: :rotation)\n  filter_table_config.add(:secret_ids, field: :secret_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('secrets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'replication' => ->(obj) { [:replication, GoogleInSpec::SecretManager::Property::SecretReplication.new(obj['replication'], to_s)] },\n      'topics' => ->(obj) { [:topics, GoogleInSpec::SecretManager::Property::SecretTopicsArray.parse(obj['topics'], to_s)] },\n      'expireTime' => ->(obj) { [:expire_time, obj['expireTime']] },\n      'ttl' => ->(obj) { [:ttl, obj['ttl']] },\n      'rotation' => ->(obj) { [:rotation, GoogleInSpec::SecretManager::Property::SecretRotation.new(obj['rotation'], to_s)] },\n      'secretId' => ->(obj) { [:secret_id, obj['secretId']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://secretmanager.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/secrets'\n  end\nend\n"
  },
  {
    "path": "libraries/google_service_account.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud IAM resources.\nclass IAMServiceAccount < GcpResourceBase\n  name 'google_service_account'\n  desc 'ServiceAccount'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :project_id\n  attr_reader :unique_id\n  attr_reader :email\n  attr_reader :display_name\n  attr_reader :oauth2_client_id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @project_id = @fetched['projectId']\n    @unique_id = @fetched['uniqueId']\n    @email = @fetched['email']\n    @display_name = @fetched['displayName']\n    @oauth2_client_id = @fetched['oauth2ClientId']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServiceAccount #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/serviceAccounts/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_service_account_key.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud IAM resources.\nclass IAMServiceAccountKey < GcpResourceBase\n  name 'google_service_account_key'\n  desc 'ServiceAccountKey'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :private_key_type\n  attr_reader :key_algorithm\n  attr_reader :private_key_data\n  attr_reader :public_key_data\n  attr_reader :valid_after_time\n  attr_reader :valid_before_time\n  attr_reader :key_origin\n  attr_reader :key_type\n  attr_reader :service_account\n  attr_reader :path\n  attr_reader :disabled\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @private_key_type = @fetched['privateKeyType']\n    @key_algorithm = @fetched['keyAlgorithm']\n    @private_key_data = @fetched['privateKeyData']\n    @public_key_data = @fetched['publicKeyData']\n    @valid_after_time = parse_time_string(@fetched['validAfterTime'])\n    @valid_before_time = parse_time_string(@fetched['validBeforeTime'])\n    @key_origin = @fetched['keyOrigin']\n    @key_type = @fetched['keyType']\n    @service_account = @fetched['serviceAccount']\n    @path = @fetched['path']\n    @disabled = @fetched['disabled']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ServiceAccountKey #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/serviceAccounts/{{service_account}}/keys/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_service_account_keys.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass IAMServiceAccountKeys < GcpResourceBase\n  name 'google_service_account_keys'\n  desc 'ServiceAccountKey plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:key_names, field: :key_name)\n  filter_table_config.add(:private_key_types, field: :private_key_type)\n  filter_table_config.add(:key_algorithms, field: :key_algorithm)\n  filter_table_config.add(:private_key_data, field: :private_key_data)\n  filter_table_config.add(:public_key_data, field: :public_key_data)\n  filter_table_config.add(:valid_after_times, field: :valid_after_time)\n  filter_table_config.add(:valid_before_times, field: :valid_before_time)\n  filter_table_config.add(:key_types, field: :key_type)\n  filter_table_config.add(:service_accounts, field: :service_account)\n  filter_table_config.add(:paths, field: :path)\n  filter_table_config.add(:key_origins, field: :key_origin)\n  filter_table_config.add(:disableds, field: :disabled)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('keys')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:key_name, obj['name']] },\n      'privateKeyType' => ->(obj) { [:private_key_type, obj['privateKeyType']] },\n      'keyAlgorithm' => ->(obj) { [:key_algorithm, obj['keyAlgorithm']] },\n      'privateKeyData' => ->(obj) { [:private_key_data, obj['privateKeyData']] },\n      'publicKeyData' => ->(obj) { [:public_key_data, obj['publicKeyData']] },\n      'validAfterTime' => ->(obj) { [:valid_after_time, parse_time_string(obj['validAfterTime'])] },\n      'validBeforeTime' => ->(obj) { [:valid_before_time, parse_time_string(obj['validBeforeTime'])] },\n      'keyType' => ->(obj) { [:key_type, obj['keyType']] },\n      'serviceAccount' => ->(obj) { [:service_account, obj['serviceAccount']] },\n      'path' => ->(obj) { [:path, obj['path']] },\n      'keyOrigin' => ->(obj) { [:key_origin, obj['keyOrigin']] },\n      'disabled' => ->(obj) { [:disabled, obj['disabled']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/serviceAccounts/{{service_account}}/keys'\n  end\nend\n"
  },
  {
    "path": "libraries/google_service_accounts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass IAMServiceAccounts < GcpResourceBase\n  name 'google_service_accounts'\n  desc 'ServiceAccount plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:service_account_names, field: :service_account_name)\n  filter_table_config.add(:project_ids, field: :project_id)\n  filter_table_config.add(:service_account_ids, field: :service_account_id)\n  filter_table_config.add(:service_account_emails, field: :service_account_email)\n  filter_table_config.add(:service_account_display_names, field: :service_account_display_name)\n  filter_table_config.add(:oauth2_client_ids, field: :oauth2_client_id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('accounts')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:service_account_name, obj['name']] },\n      'projectId' => ->(obj) { [:project_id, obj['projectId']] },\n      'uniqueId' => ->(obj) { [:service_account_id, obj['uniqueId']] },\n      'email' => ->(obj) { [:service_account_email, obj['email']] },\n      'displayName' => ->(obj) { [:service_account_display_name, obj['displayName']] },\n      'oauth2ClientId' => ->(obj) { [:oauth2_client_id, obj['oauth2ClientId']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://iam.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/serviceAccounts'\n  end\nend\n"
  },
  {
    "path": "libraries/google_service_networking_service_connections.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass ServiceNetworkingServiceConnections < GcpResourceBase\n  name 'google_service_networking_service_connections'\n  desc 'service_connection plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:reserved_peering_ranges, field: :reserved_peering_ranges)\n  filter_table_config.add(:peerings, field: :peering)\n  filter_table_config.add(:services, field: :service)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('connections')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'network' => ->(obj) { [:network, obj['network']] },\n      'reservedPeeringRanges' => ->(obj) { [:reserved_peering_ranges, obj['reservedPeeringRanges']] },\n      'peering' => ->(obj) { [:peering, obj['peering']] },\n      'service' => ->(obj) { [:service, obj['service']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://servicenetworking.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/connections?network={{network}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sourcerepo_repositories.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SourceRepoRepositorys < GcpResourceBase\n  name 'google_sourcerepo_repositories'\n  desc 'Repository plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:urls, field: :url)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:pubsub_configs, field: :pubsub_configs)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('repos')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'url' => ->(obj) { [:url, obj['url']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'pubsubConfigs' => ->(obj) { [:pubsub_configs, obj['pubsubConfigs']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sourcerepo.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/repos'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sourcerepo_repository.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/sourcerepo/property/repository_pubsub_configs'\n\n# A provider to manage Cloud Source Repositories resources.\nclass SourceRepoRepository < GcpResourceBase\n  name 'google_sourcerepo_repository'\n  desc 'Repository'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :url\n  attr_reader :size\n  attr_reader :pubsub_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @url = @fetched['url']\n    @size = @fetched['size']\n    @pubsub_configs = @fetched['pubsubConfigs']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Repository #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sourcerepo.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/repos/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_database.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Spanner resources.\nclass SpannerDatabase < GcpResourceBase\n  name 'google_spanner_database'\n  desc 'Database'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :instance\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @instance = @fetched['instance']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Database #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/databases/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_databases.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SpannerDatabases < GcpResourceBase\n  name 'google_spanner_databases'\n  desc 'Database plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:instances, field: :instance)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('databases')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'instance' => ->(obj) { [:instance, obj['instance']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/databases'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Spanner resources.\nclass SpannerInstance < GcpResourceBase\n  name 'google_spanner_instance'\n  desc 'Instance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :config\n  attr_reader :display_name\n  attr_reader :node_count\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @config = @fetched['config']\n    @display_name = @fetched['displayName']\n    @node_count = @fetched['nodeCount']\n    @labels = @fetched['labels']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_instance_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Spanner IAM Binding resources.\nclass InstanceIamBinding < GcpResourceBase\n  name 'google_spanner_instance_iam_binding'\n  desc 'Instance Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Instance IamBinding #{@params[:name]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_instance_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Spanner IAM Policy resources.\nclass InstanceIamPolicy < GcpResourceBase\n  name 'google_spanner_instance_iam_policy'\n  desc 'Instance Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Post')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Instance IamPolicy #{@params[:name]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{name}}:getIamPolicy'\n  end\nend\n"
  },
  {
    "path": "libraries/google_spanner_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SpannerInstances < GcpResourceBase\n  name 'google_spanner_instances'\n  desc 'Instance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:configs, field: :config)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:node_counts, field: :node_count)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('instances')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'config' => ->(obj) { [:config, obj['config']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'nodeCount' => ->(obj) { [:node_count, obj['nodeCount']] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://spanner.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_connect.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/sql/property/connect_ip_addresses'\nrequire 'google/sql/property/connect_server_ca_cert'\n\n# A provider to manage Cloud SQL resources.\nclass SQLConnect < GcpResourceBase\n  name 'google_sql_connect'\n  desc 'Connect'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :region\n  attr_reader :ip_addresses\n  attr_reader :database_version\n  attr_reader :backend_type\n  attr_reader :server_ca_cert\n  attr_reader :instance\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @region = @fetched['region']\n    @ip_addresses = GoogleInSpec::SQL::Property::ConnectIpAddressesArray.parse(@fetched['ipAddresses'], to_s)\n    @database_version = @fetched['databaseVersion']\n    @backend_type = @fetched['backendType']\n    @server_ca_cert = GoogleInSpec::SQL::Property::ConnectServerCaCert.new(@fetched['serverCaCert'], to_s)\n    @instance = @fetched['instance']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Connect #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/connectSettings'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_database.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud SQL resources.\nclass SQLDatabase < GcpResourceBase\n  name 'google_sql_database'\n  desc 'Database'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :charset\n  attr_reader :collation\n  attr_reader :name\n  attr_reader :instance\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @charset = @fetched['charset']\n    @collation = @fetched['collation']\n    @name = @fetched['name']\n    @instance = @fetched['instance']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Database #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/databases/{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_database_instance.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/sql/property/databaseinstance_disk_encryption_configuration'\nrequire 'google/sql/property/databaseinstance_disk_encryption_status'\nrequire 'google/sql/property/databaseinstance_failover_replica'\nrequire 'google/sql/property/databaseinstance_ip_addresses'\nrequire 'google/sql/property/databaseinstance_replica_configuration'\nrequire 'google/sql/property/databaseinstance_replica_configuration_mysql_replica_configuration'\nrequire 'google/sql/property/databaseinstance_server_ca_cert'\nrequire 'google/sql/property/databaseinstance_settings'\nrequire 'google/sql/property/databaseinstance_settings_backup_configuration'\nrequire 'google/sql/property/databaseinstance_settings_database_flags'\nrequire 'google/sql/property/databaseinstance_settings_ip_configuration'\nrequire 'google/sql/property/databaseinstance_settings_ip_configuration_authorized_networks'\n\n# A provider to manage Cloud SQL resources.\nclass SQLDatabaseInstance < GcpResourceBase\n  name 'google_sql_database_instance'\n  desc 'DatabaseInstance'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :backend_type\n  attr_reader :kind\n  attr_reader :connection_name\n  attr_reader :database_version\n  attr_reader :failover_replica\n  attr_reader :instance_type\n  attr_reader :ip_addresses\n  attr_reader :ipv6_address\n  attr_reader :master_instance_name\n  attr_reader :max_disk_size\n  attr_reader :name\n  attr_reader :region\n  attr_reader :replica_configuration\n  attr_reader :settings\n  attr_reader :gce_zone\n  attr_reader :state\n  attr_reader :disk_encryption_configuration\n  attr_reader :disk_encryption_status\n  attr_reader :server_ca_cert\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @backend_type = @fetched['backendType']\n    @kind = @fetched['kind']\n    @connection_name = @fetched['connectionName']\n    @database_version = @fetched['databaseVersion']\n    @failover_replica = GoogleInSpec::SQL::Property::DatabaseInstanceFailoverReplica.new(@fetched['failoverReplica'], to_s)\n    @instance_type = @fetched['instanceType']\n    @ip_addresses = GoogleInSpec::SQL::Property::DatabaseInstanceIpAddressesArray.parse(@fetched['ipAddresses'], to_s)\n    @ipv6_address = @fetched['ipv6Address']\n    @master_instance_name = @fetched['masterInstanceName']\n    @max_disk_size = @fetched['maxDiskSize']\n    @name = @fetched['name']\n    @region = @fetched['region']\n    @replica_configuration = GoogleInSpec::SQL::Property::DatabaseInstanceReplicaConfiguration.new(@fetched['replicaConfiguration'], to_s)\n    @settings = GoogleInSpec::SQL::Property::DatabaseInstanceSettings.new(@fetched['settings'], to_s)\n    @gce_zone = @fetched['gceZone']\n    @state = @fetched['state']\n    @disk_encryption_configuration = GoogleInSpec::SQL::Property::DatabaseInstanceDiskEncryptionConfiguration.new(@fetched['diskEncryptionConfiguration'], to_s)\n    @disk_encryption_status = GoogleInSpec::SQL::Property::DatabaseInstanceDiskEncryptionStatus.new(@fetched['diskEncryptionStatus'], to_s)\n    @server_ca_cert = GoogleInSpec::SQL::Property::DatabaseInstanceServerCaCert.new(@fetched['serverCaCert'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"DatabaseInstance #{@params[:instance]}\"\n  end\n\n  def has_ip_configuration_require_ssl?\n    return false if @settings&.ip_configuration&.require_ssl.nil?\n    return true if @settings.ip_configuration.require_ssl.to_s.casecmp('true').zero?\n    false\n  end\n\n  def authorized_networks\n    return [] if @settings&.ip_configuration&.authorized_networks.nil?\n    @database.settings.ip_configuration.authorized_networks.map(&:value)\n  end\n\n  def primary_ip_address\n    return '' if !@ip_addresses.empty? || @ip_addresses[0].ip_address.nil?\n    @ip_addresses[0].ip_address\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_database_instances.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLDatabaseInstances < GcpResourceBase\n  name 'google_sql_database_instances'\n  desc 'DatabaseInstance plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:backend_types, field: :backend_type)\n  filter_table_config.add(:kinds, field: :kind)\n  filter_table_config.add(:connection_names, field: :connection_name)\n  filter_table_config.add(:instance_versions, field: :instance_version)\n  filter_table_config.add(:failover_replicas, field: :failover_replica)\n  filter_table_config.add(:instance_types, field: :instance_type)\n  filter_table_config.add(:ip_addresses, field: :ip_addresses)\n  filter_table_config.add(:ipv6_addresses, field: :ipv6_address)\n  filter_table_config.add(:master_instance_names, field: :master_instance_name)\n  filter_table_config.add(:max_disk_sizes, field: :max_disk_size)\n  filter_table_config.add(:instance_names, field: :instance_name)\n  filter_table_config.add(:instance_regions, field: :instance_region)\n  filter_table_config.add(:replica_configurations, field: :replica_configuration)\n  filter_table_config.add(:settings, field: :settings)\n  filter_table_config.add(:instance_zones, field: :instance_zone)\n  filter_table_config.add(:instance_states, field: :instance_state)\n  filter_table_config.add(:disk_encryption_configurations, field: :disk_encryption_configuration)\n  filter_table_config.add(:disk_encryption_statuses, field: :disk_encryption_status)\n  filter_table_config.add(:server_ca_certs, field: :server_ca_cert)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'backendType' => ->(obj) { [:backend_type, obj['backendType']] },\n      'kind' => ->(obj) { [:kind, obj['kind']] },\n      'connectionName' => ->(obj) { [:connection_name, obj['connectionName']] },\n      'databaseVersion' => ->(obj) { [:instance_version, obj['databaseVersion']] },\n      'failoverReplica' => ->(obj) { [:failover_replica, GoogleInSpec::SQL::Property::DatabaseInstanceFailoverReplica.new(obj['failoverReplica'], to_s)] },\n      'instanceType' => ->(obj) { [:instance_type, obj['instanceType']] },\n      'ipAddresses' => ->(obj) { [:ip_addresses, GoogleInSpec::SQL::Property::DatabaseInstanceIpAddressesArray.parse(obj['ipAddresses'], to_s)] },\n      'ipv6Address' => ->(obj) { [:ipv6_address, obj['ipv6Address']] },\n      'masterInstanceName' => ->(obj) { [:master_instance_name, obj['masterInstanceName']] },\n      'maxDiskSize' => ->(obj) { [:max_disk_size, obj['maxDiskSize']] },\n      'name' => ->(obj) { [:instance_name, obj['name']] },\n      'region' => ->(obj) { [:instance_region, obj['region']] },\n      'replicaConfiguration' => ->(obj) { [:replica_configuration, GoogleInSpec::SQL::Property::DatabaseInstanceReplicaConfiguration.new(obj['replicaConfiguration'], to_s)] },\n      'settings' => ->(obj) { [:settings, GoogleInSpec::SQL::Property::DatabaseInstanceSettings.new(obj['settings'], to_s)] },\n      'gceZone' => ->(obj) { [:instance_zone, obj['gceZone']] },\n      'state' => ->(obj) { [:instance_state, obj['state']] },\n      'diskEncryptionConfiguration' => ->(obj) { [:disk_encryption_configuration, GoogleInSpec::SQL::Property::DatabaseInstanceDiskEncryptionConfiguration.new(obj['diskEncryptionConfiguration'], to_s)] },\n      'diskEncryptionStatus' => ->(obj) { [:disk_encryption_status, GoogleInSpec::SQL::Property::DatabaseInstanceDiskEncryptionStatus.new(obj['diskEncryptionStatus'], to_s)] },\n      'serverCaCert' => ->(obj) { [:server_ca_cert, GoogleInSpec::SQL::Property::DatabaseInstanceServerCaCert.new(obj['serverCaCert'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_databases.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLDatabases < GcpResourceBase\n  name 'google_sql_databases'\n  desc 'Database plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:charsets, field: :charset)\n  filter_table_config.add(:collations, field: :collation)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:instances, field: :instance)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'charset' => ->(obj) { [:charset, obj['charset']] },\n      'collation' => ->(obj) { [:collation, obj['collation']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'instance' => ->(obj) { [:instance, obj['instance']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/databases'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_flags.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLFlags < GcpResourceBase\n  name 'google_sql_flags'\n  desc 'Flag plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:allowed_string_values, field: :allowed_string_values)\n  filter_table_config.add(:applies_tos, field: :applies_to)\n  filter_table_config.add(:max_values, field: :max_value)\n  filter_table_config.add(:min_values, field: :min_value)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:requires_restarts, field: :requires_restart)\n  filter_table_config.add(:types, field: :type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'allowedStringValues' => ->(obj) { [:allowed_string_values, obj['allowedStringValues']] },\n      'appliesTo' => ->(obj) { [:applies_to, obj['appliesTo']] },\n      'maxValue' => ->(obj) { [:max_value, obj['maxValue']] },\n      'minValue' => ->(obj) { [:min_value, obj['minValue']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'requiresRestart' => ->(obj) { [:requires_restart, obj['requiresRestart']] },\n      'type' => ->(obj) { [:type, obj['type']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'flags'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_operation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud SQL resources.\nclass SQLOperation < GcpResourceBase\n  name 'google_sql_operation'\n  desc 'Operation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :user\n  attr_reader :name\n  attr_reader :status\n  attr_reader :operation_type\n  attr_reader :instance\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @user = @fetched['user']\n    @name = @fetched['name']\n    @status = @fetched['status']\n    @operation_type = @fetched['operationType']\n    @instance = @fetched['instance']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Operation #{@params[:operation]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/operations/{{operation}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_operations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLOperations < GcpResourceBase\n  name 'google_sql_operations'\n  desc 'Operation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:users, field: :user)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:statuses, field: :status)\n  filter_table_config.add(:operation_types, field: :operation_type)\n  filter_table_config.add(:instances, field: :instance)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'user' => ->(obj) { [:user, obj['user']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'status' => ->(obj) { [:status, obj['status']] },\n      'operationType' => ->(obj) { [:operation_type, obj['operationType']] },\n      'instance' => ->(obj) { [:instance, obj['instance']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/operations?instance={{instance}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_ssl_cert.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud SQL resources.\nclass SQLSslCert < GcpResourceBase\n  name 'google_sql_ssl_cert'\n  desc 'SslCert'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :cert\n  attr_reader :cert_serial_number\n  attr_reader :common_name\n  attr_reader :create_time\n  attr_reader :expiration_time\n  attr_reader :instance\n  attr_reader :sha1_fingerprint\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @cert = @fetched['cert']\n    @cert_serial_number = @fetched['certSerialNumber']\n    @common_name = @fetched['commonName']\n    @create_time = parse_time_string(@fetched['createTime'])\n    @expiration_time = parse_time_string(@fetched['expirationTime'])\n    @instance = @fetched['instance']\n    @sha1_fingerprint = @fetched['sha1Fingerprint']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"SslCert #{@params[:sha1_fingerprint]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/sslCerts/{{sha1_fingerprint}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_ssl_certs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLSslCerts < GcpResourceBase\n  name 'google_sql_ssl_certs'\n  desc 'SslCert plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:certs, field: :cert)\n  filter_table_config.add(:cert_serial_numbers, field: :cert_serial_number)\n  filter_table_config.add(:common_names, field: :common_name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:expiration_times, field: :expiration_time)\n  filter_table_config.add(:instances, field: :instance)\n  filter_table_config.add(:sha1_fingerprints, field: :sha1_fingerprint)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'cert' => ->(obj) { [:cert, obj['cert']] },\n      'certSerialNumber' => ->(obj) { [:cert_serial_number, obj['certSerialNumber']] },\n      'commonName' => ->(obj) { [:common_name, obj['commonName']] },\n      'createTime' => ->(obj) { [:create_time, parse_time_string(obj['createTime'])] },\n      'expirationTime' => ->(obj) { [:expiration_time, parse_time_string(obj['expirationTime'])] },\n      'instance' => ->(obj) { [:instance, obj['instance']] },\n      'sha1Fingerprint' => ->(obj) { [:sha1_fingerprint, obj['sha1Fingerprint']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://sqladmin.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{instance}}/sslCerts'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_user.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud SQL resources.\nclass SQLUser < GcpResourceBase\n  name 'google_sql_user'\n  desc 'User'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :host\n  attr_reader :name\n  attr_reader :instance\n  attr_reader :password\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    @fetched = unwrap(fetched, params)\n    parse unless @fetched.nil?\n  end\n\n  def identity\n    %w{name host}\n  end\n\n  def collection_item\n    'items'\n  end\n\n  def unwrap(fetched, params)\n    fetched[collection_item].find { |result| identity.all? { |id| result[id] == params[id.to_sym] } }\n  end\n\n  def parse\n    @host = @fetched['host']\n    @name = @fetched['name']\n    @instance = @fetched['instance']\n    @password = @fetched['password']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"User #{@params[:database]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://www.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{database}}/users'\n  end\nend\n"
  },
  {
    "path": "libraries/google_sql_users.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass SQLUsers < GcpResourceBase\n  name 'google_sql_users'\n  desc 'User plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:user_hosts, field: :user_host)\n  filter_table_config.add(:user_names, field: :user_name)\n  filter_table_config.add(:user_instances, field: :user_instance)\n  filter_table_config.add(:passwords, field: :password)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'host' => ->(obj) { [:user_host, obj['host']] },\n      'name' => ->(obj) { [:user_name, obj['name']] },\n      'instance' => ->(obj) { [:user_instance, obj['instance']] },\n      'password' => ->(obj) { [:password, obj['password']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://www.googleapis.com/sql/v1beta4/'\n  end\n\n  def resource_base_url\n    'projects/{{project}}/instances/{{database}}/users'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/storage/property/bucket_acl'\nrequire 'google/storage/property/bucket_cors'\nrequire 'google/storage/property/bucket_default_object_acl'\nrequire 'google/storage/property/bucket_encryption'\nrequire 'google/storage/property/bucket_lifecycle'\nrequire 'google/storage/property/bucket_lifecycle_rule'\nrequire 'google/storage/property/bucket_logging'\nrequire 'google/storage/property/bucket_owner'\nrequire 'google/storage/property/bucket_retention_policy'\nrequire 'google/storage/property/bucket_versioning'\nrequire 'google/storage/property/bucket_website'\n\n# A provider to manage Cloud Storage resources.\nclass StorageBucket < GcpResourceBase\n  name 'google_storage_bucket'\n  desc 'Bucket'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :acl\n  attr_reader :cors\n  attr_reader :default_event_based_hold\n  attr_reader :default_object_acl\n  attr_reader :id\n  attr_reader :lifecycle\n  attr_reader :location\n  attr_reader :logging\n  attr_reader :metageneration\n  attr_reader :name\n  attr_reader :owner\n  attr_reader :project_number\n  attr_reader :storage_class\n  attr_reader :time_created\n  attr_reader :updated\n  attr_reader :versioning\n  attr_reader :website\n  attr_reader :labels\n  attr_reader :encryption\n  attr_reader :retention_policy\n  attr_reader :project\n  attr_reader :predefined_default_object_acl\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @acl = GoogleInSpec::Storage::Property::BucketAclArray.parse(@fetched['acl'], to_s)\n    @cors = GoogleInSpec::Storage::Property::BucketCorsArray.parse(@fetched['cors'], to_s)\n    @default_event_based_hold = @fetched['defaultEventBasedHold']\n    @default_object_acl = GoogleInSpec::Storage::Property::BucketDefaultObjectAclArray.parse(@fetched['defaultObjectAcl'], to_s)\n    @id = @fetched['id']\n    @lifecycle = GoogleInSpec::Storage::Property::BucketLifecycle.new(@fetched['lifecycle'], to_s)\n    @location = @fetched['location']\n    @logging = GoogleInSpec::Storage::Property::BucketLogging.new(@fetched['logging'], to_s)\n    @metageneration = @fetched['metageneration']\n    @name = @fetched['name']\n    @owner = GoogleInSpec::Storage::Property::BucketOwner.new(@fetched['owner'], to_s)\n    @project_number = @fetched['projectNumber']\n    @storage_class = @fetched['storageClass']\n    @time_created = parse_time_string(@fetched['timeCreated'])\n    @updated = parse_time_string(@fetched['updated'])\n    @versioning = GoogleInSpec::Storage::Property::BucketVersioning.new(@fetched['versioning'], to_s)\n    @website = GoogleInSpec::Storage::Property::BucketWebsite.new(@fetched['website'], to_s)\n    @labels = @fetched['labels']\n    @encryption = GoogleInSpec::Storage::Property::BucketEncryption.new(@fetched['encryption'], to_s)\n    @retention_policy = GoogleInSpec::Storage::Property::BucketRetentionPolicy.new(@fetched['retentionPolicy'], to_s)\n    @project = @fetched['project']\n    @predefined_default_object_acl = @fetched['predefinedDefaultObjectAcl']\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Bucket #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{name}}?projection=full'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_acl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/storage/property/bucketacl_project_team'\n\n# A provider to manage Cloud Storage resources.\nclass StorageBucketACL < GcpResourceBase\n  name 'google_storage_bucket_acl'\n  desc 'BucketACL'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :domain\n  attr_reader :email\n  attr_reader :entity\n  attr_reader :entity_id\n  attr_reader :id\n  attr_reader :project_team\n  attr_reader :role\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @domain = @fetched['domain']\n    @email = @fetched['email']\n    @entity = @fetched['entity']\n    @entity_id = @fetched['entityId']\n    @id = @fetched['id']\n    @project_team = GoogleInSpec::Storage::Property::BucketACLProjectTeam.new(@fetched['projectTeam'], to_s)\n    @role = @fetched['role']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BucketACL #{@params[:entity]}\"\n  end\n\n  def bucket\n    @params[:bucket]\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/acl/{{entity}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_iam_binding.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Storage IAM Binding resources.\nclass BucketIamBinding < GcpResourceBase\n  name 'google_storage_bucket_iam_binding'\n  desc 'Bucket Iam Binding'\n  supports platform: 'gcp'\n\n  attr_reader :params\n\n  attr_reader :condition\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    raise \"Expected 'role' to be defined for iam_binding resource\" unless params.key?(:role)\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @bindings.each do |binding|\n      next if binding.role != params[:role]\n      if params[:condition]\n        # Control defines a condition, match via this condition\n        condition = params[:condition]\n        if condition[:title] && condition[:title] != binding&.condition&.title\n          next\n        end\n        if condition[:description] && condition[:description] != binding&.condition&.description\n          next\n        end\n        if condition[:expression] && condition[:expression] != binding&.condition&.expression\n          next\n        end\n      else\n        # No condition defined in controls, skip any binding with a condition\n        next unless binding.condition.title.nil? && binding.condition.description.nil? && binding.condition.expression.nil?\n      end\n      @members_list = binding.members\n      @condition = binding.condition\n      @iam_binding_exists = true\n    end\n  end\n\n  def exists?\n    @iam_binding_exists\n  end\n\n  def members\n    @members_list\n  end\n\n  def to_s\n    \"Bucket IamBinding #{@params[:bucket]} Role: #{@params[:role]}\"\n  end\n\n  private\n\n  def product_url\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/iam'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_iam_bindings.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\n\nmodule Inspec::Resources\n  class GoogleStorageBucketIamBindings < GcpResourceBase\n    name 'google_storage_bucket_iam_bindings'\n    desc 'Verifies settings for GCP storage bucket IAM bindings in bulk'\n\n    example \"\n      describe google_storage_bucket_iam_bindings(bucket: 'bucket-buvsjjcndqz') do\n        it { should exist }\n        ...\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @bucket = opts[:bucket]\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:iam_binding_roles, field: :iam_binding_role)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      iam_binding_rows = []\n      catch_gcp_errors do\n        @iam_bindings = @gcp.gcp_storage_client.get_bucket_iam_policy(@bucket)\n      end\n      return [] if !@iam_bindings || !@iam_bindings.bindings\n      @iam_bindings.bindings.map do |iam_binding|\n        iam_binding_rows+=[{ iam_binding_role: iam_binding.role }]\n      end\n      @table = iam_binding_rows\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_iam_policy.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/iam/property/iam_policy_audit_configs'\nrequire 'google/iam/property/iam_policy_bindings'\n\n# A provider to manage Cloud Storage IAM Policy resources.\nclass BucketIamPolicy < GcpResourceBase\n  name 'google_storage_bucket_iam_policy'\n  desc 'Bucket Iam Policy'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bindings\n  attr_reader :audit_configs\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bindings = GoogleInSpec::Iam::Property::IamPolicyBindingsArray.parse(@fetched['bindings'], to_s)\n    @audit_configs = GoogleInSpec::Iam::Property::IamPolicyAuditConfigsArray.parse(@fetched['auditConfigs'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Bucket IamPolicy #{@params[:bucket]}\"\n  end\n\n  def iam_binding_roles\n    @bindings.map(&:role)\n  end\n\n  def count\n    @bindings.size\n  end\n\n  private\n\n  def product_url\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/iam'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_object.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Cloud Storage resources.\nclass StorageBucketObject < GcpResourceBase\n  name 'google_storage_bucket_object'\n  desc 'BucketObject'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :bucket\n  attr_reader :object\n  attr_reader :content_type\n  attr_reader :crc32c\n  attr_reader :etag\n  attr_reader :generation\n  attr_reader :id\n  attr_reader :md5_hash\n  attr_reader :media_link\n  attr_reader :metageneration\n  attr_reader :name\n  attr_reader :size\n  attr_reader :storage_class\n  attr_reader :time_created\n  attr_reader :time_deleted\n  attr_reader :time_storage_class_updated\n  attr_reader :time_updated\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @bucket = @fetched['bucket']\n    @object = @fetched['object']\n    @content_type = @fetched['contentType']\n    @crc32c = @fetched['crc32c']\n    @etag = @fetched['etag']\n    @generation = @fetched['generation']\n    @id = @fetched['id']\n    @md5_hash = @fetched['md5Hash']\n    @media_link = @fetched['mediaLink']\n    @metageneration = @fetched['metageneration']\n    @name = @fetched['name']\n    @size = @fetched['size']\n    @storage_class = @fetched['storageClass']\n    @time_created = parse_time_string(@fetched['timeCreated'])\n    @time_deleted = parse_time_string(@fetched['timeDeleted'])\n    @time_storage_class_updated = parse_time_string(@fetched['timeStorageClassUpdated'])\n    @time_updated = parse_time_string(@fetched['updated'])\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BucketObject #{@params[:object]}\"\n  end\n\n  # rubocop:disable Lint/DuplicateMethods\n  def size\n    @size&.to_i\n  end\n  # rubocop:enable Lint/DuplicateMethods\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/o/{{object}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_bucket_objects.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass StorageBucketObjects < GcpResourceBase\n  name 'google_storage_bucket_objects'\n  desc 'BucketObject plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:object_buckets, field: :object_bucket)\n  filter_table_config.add(:objects, field: :object)\n  filter_table_config.add(:content_types, field: :content_type)\n  filter_table_config.add(:crc32cs, field: :crc32c)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:generations, field: :generation)\n  filter_table_config.add(:ids, field: :id)\n  filter_table_config.add(:md5_hashes, field: :md5_hash)\n  filter_table_config.add(:media_links, field: :media_link)\n  filter_table_config.add(:metagenerations, field: :metageneration)\n  filter_table_config.add(:object_names, field: :object_name)\n  filter_table_config.add(:sizes, field: :size)\n  filter_table_config.add(:storage_classes, field: :storage_class)\n  filter_table_config.add(:object_created_times, field: :object_created_times)\n  filter_table_config.add(:time_deleteds, field: :time_deleted)\n  filter_table_config.add(:time_storage_class_updateds, field: :time_storage_class_updated)\n  filter_table_config.add(:time_updateds, field: :time_updated)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'bucket' => ->(obj) { [:object_bucket, obj['bucket']] },\n      'object' => ->(obj) { [:object, obj['object']] },\n      'contentType' => ->(obj) { [:content_type, obj['contentType']] },\n      'crc32c' => ->(obj) { [:crc32c, obj['crc32c']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'generation' => ->(obj) { [:generation, obj['generation']] },\n      'id' => ->(obj) { [:id, obj['id']] },\n      'md5Hash' => ->(obj) { [:md5_hash, obj['md5Hash']] },\n      'mediaLink' => ->(obj) { [:media_link, obj['mediaLink']] },\n      'metageneration' => ->(obj) { [:metageneration, obj['metageneration']] },\n      'name' => ->(obj) { [:object_name, obj['name']] },\n      'size' => ->(obj) { [:size, obj['size']] },\n      'storageClass' => ->(obj) { [:storage_class, obj['storageClass']] },\n      'timeCreated' => ->(obj) { [:object_created_times, parse_time_string(obj['timeCreated'])] },\n      'timeDeleted' => ->(obj) { [:time_deleted, parse_time_string(obj['timeDeleted'])] },\n      'timeStorageClassUpdated' => ->(obj) { [:time_storage_class_updated, parse_time_string(obj['timeStorageClassUpdated'])] },\n      'updated' => ->(obj) { [:time_updated, parse_time_string(obj['updated'])] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/o'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_buckets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass StorageBuckets < GcpResourceBase\n  name 'google_storage_buckets'\n  desc 'Bucket plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:acls, field: :acl)\n  filter_table_config.add(:cors, field: :cors)\n  filter_table_config.add(:default_event_based_holds, field: :default_event_based_hold)\n  filter_table_config.add(:default_object_acls, field: :default_object_acl)\n  filter_table_config.add(:bucket_ids, field: :bucket_id)\n  filter_table_config.add(:lifecycles, field: :lifecycle)\n  filter_table_config.add(:bucket_locations, field: :bucket_location)\n  filter_table_config.add(:loggings, field: :logging)\n  filter_table_config.add(:metagenerations, field: :metageneration)\n  filter_table_config.add(:bucket_names, field: :bucket_name)\n  filter_table_config.add(:owners, field: :owner)\n  filter_table_config.add(:bucket_project_numbers, field: :bucket_project_number)\n  filter_table_config.add(:storage_classes, field: :storage_class)\n  filter_table_config.add(:time_createds, field: :time_created)\n  filter_table_config.add(:updateds, field: :updated)\n  filter_table_config.add(:versionings, field: :versioning)\n  filter_table_config.add(:websites, field: :website)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:encryptions, field: :encryption)\n  filter_table_config.add(:retention_policies, field: :retention_policy)\n  filter_table_config.add(:projects, field: :project)\n  filter_table_config.add(:predefined_default_object_acls, field: :predefined_default_object_acl)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('items')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'acl' => ->(obj) { [:acl, GoogleInSpec::Storage::Property::BucketAclArray.parse(obj['acl'], to_s)] },\n      'cors' => ->(obj) { [:cors, GoogleInSpec::Storage::Property::BucketCorsArray.parse(obj['cors'], to_s)] },\n      'defaultEventBasedHold' => ->(obj) { [:default_event_based_hold, obj['defaultEventBasedHold']] },\n      'defaultObjectAcl' => ->(obj) { [:default_object_acl, GoogleInSpec::Storage::Property::BucketDefaultObjectAclArray.parse(obj['defaultObjectAcl'], to_s)] },\n      'id' => ->(obj) { [:bucket_id, obj['id']] },\n      'lifecycle' => ->(obj) { [:lifecycle, GoogleInSpec::Storage::Property::BucketLifecycle.new(obj['lifecycle'], to_s)] },\n      'location' => ->(obj) { [:bucket_location, obj['location']] },\n      'logging' => ->(obj) { [:logging, GoogleInSpec::Storage::Property::BucketLogging.new(obj['logging'], to_s)] },\n      'metageneration' => ->(obj) { [:metageneration, obj['metageneration']] },\n      'name' => ->(obj) { [:bucket_name, obj['name']] },\n      'owner' => ->(obj) { [:owner, GoogleInSpec::Storage::Property::BucketOwner.new(obj['owner'], to_s)] },\n      'projectNumber' => ->(obj) { [:bucket_project_number, obj['projectNumber']] },\n      'storageClass' => ->(obj) { [:storage_class, obj['storageClass']] },\n      'timeCreated' => ->(obj) { [:time_created, parse_time_string(obj['timeCreated'])] },\n      'updated' => ->(obj) { [:updated, parse_time_string(obj['updated'])] },\n      'versioning' => ->(obj) { [:versioning, GoogleInSpec::Storage::Property::BucketVersioning.new(obj['versioning'], to_s)] },\n      'website' => ->(obj) { [:website, GoogleInSpec::Storage::Property::BucketWebsite.new(obj['website'], to_s)] },\n      'labels' => ->(obj) { [:labels, obj['labels']] },\n      'encryption' => ->(obj) { [:encryption, GoogleInSpec::Storage::Property::BucketEncryption.new(obj['encryption'], to_s)] },\n      'retentionPolicy' => ->(obj) { [:retention_policy, GoogleInSpec::Storage::Property::BucketRetentionPolicy.new(obj['retentionPolicy'], to_s)] },\n      'project' => ->(obj) { [:project, obj['project']] },\n      'predefinedDefaultObjectAcl' => ->(obj) { [:predefined_default_object_acl, obj['predefinedDefaultObjectAcl']] },\n    }\n  end\n\n  # Handles parsing RFC3339 time string\n  def parse_time_string(time_string)\n    time_string ? Time.parse(time_string) : nil\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b?project={{project}}&projection=full'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_default_object_acl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/storage/property/defaultobjectacl_project_team'\n\n# A provider to manage Cloud Storage resources.\nclass StorageDefaultObjectACL < GcpResourceBase\n  name 'google_storage_default_object_acl'\n  desc 'DefaultObjectACL'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :domain\n  attr_reader :email\n  attr_reader :entity\n  attr_reader :entity_id\n  attr_reader :generation\n  attr_reader :id\n  attr_reader :object\n  attr_reader :project_team\n  attr_reader :role\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @domain = @fetched['domain']\n    @email = @fetched['email']\n    @entity = @fetched['entity']\n    @entity_id = @fetched['entityId']\n    @generation = @fetched['generation']\n    @id = @fetched['id']\n    @object = @fetched['object']\n    @project_team = GoogleInSpec::Storage::Property::DefaultObjectACLProjectTeam.new(@fetched['projectTeam'], to_s)\n    @role = @fetched['role']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"DefaultObjectACL #{@params[:entity]}\"\n  end\n\n  def bucket\n    @params[:bucket]\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/defaultObjectAcl/{{entity}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_storage_object_acl.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/storage/property/objectacl_project_team'\n\n# A provider to manage Cloud Storage resources.\nclass StorageObjectACL < GcpResourceBase\n  name 'google_storage_object_acl'\n  desc 'ObjectACL'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :domain\n  attr_reader :email\n  attr_reader :entity\n  attr_reader :entity_id\n  attr_reader :generation\n  attr_reader :id\n  attr_reader :object\n  attr_reader :project_team\n  attr_reader :role\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @domain = @fetched['domain']\n    @email = @fetched['email']\n    @entity = @fetched['entity']\n    @entity_id = @fetched['entityId']\n    @generation = @fetched['generation']\n    @id = @fetched['id']\n    @object = @fetched['object']\n    @project_team = GoogleInSpec::Storage::Property::ObjectACLProjectTeam.new(@fetched['projectTeam'], to_s)\n    @role = @fetched['role']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ObjectACL #{@params[:entity]}\"\n  end\n\n  def bucket\n    @params[:bucket]\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://storage.googleapis.com/storage/v1/'\n  end\n\n  def resource_base_url\n    'b/{{bucket}}/o/{{object}}/acl/{{entity}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_user.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/admin_directory_v1'\n\nmodule Inspec::Resources\n  class GoogleUser < GcpResourceBase\n    name 'google_user'\n    desc 'Verifies settings for a GCP user'\n\n    example \"\n      describe google_user(user_key: '110491234567894702010') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @display_name = opts[:user_key]\n      catch_gcp_errors do\n        @user = @gcp.gcp_admin_client.get_user(opts[:user_key])\n        create_resource_methods(@user)\n      end\n    end\n\n    def exists?\n      !@user.nil?\n    end\n\n    def suspended?\n      return false if !defined?(@user.suspended) || @user.suspended.nil?\n      @user.suspended\n    end\n\n    def has_mfa_enabled?\n      return false if !defined?(@user.is_enrolled_in2_sv) || @user.is_enrolled_in2_sv.nil?\n      @user.is_enrolled_in2_sv\n    end\n\n    def to_s\n      \"User #{@display_name}\"\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_users.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'gcp_backend'\nrequire 'google/apis/admin_directory_v1'\n\nmodule Inspec::Resources\n  class GoogleUsers < GcpResourceBase\n    name 'google_users'\n    desc 'Verifies settings for GCP users in bulk'\n\n    example \"\n      describe google_users(customer: 'my_customer') do\n        it { should exist }\n      end\n    \"\n\n    def initialize(opts = {})\n      # Call the parent class constructor\n      super(opts)\n      @customer = opts[:customer] || 'my_customer'\n      @domain = opts[:domain] || ''\n    end\n\n    # FilterTable setup\n    filter_table_config = FilterTable.create\n    filter_table_config.add(:user_ids, field: :user_id)\n    filter_table_config.add(:user_full_names, field: :user_full_name)\n    filter_table_config.add(:user_emails, field: :user_email)\n    filter_table_config.connect(self, :fetch_data)\n\n    def fetch_data\n      user_rows = []\n      next_page = nil\n      loop do\n        catch_gcp_errors do\n          @users = @gcp.gcp_admin_client.list_users(customer: @customer, domain: @domain, page_token: next_page)\n        end\n        return [] if !@users || !@users.users\n        @users.users.map do |user|\n          user_rows+=[{ user_id: user.id,\n                        user_name: user.name.full_name,\n                        user_email: user.primary_email }]\n        end\n        next_page = @users.next_page_token\n        break unless next_page\n      end\n      @table = user_rows\n    end\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_batch_prediction_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/batchpredictionjob_completion_stats'\nrequire 'google/vertexai/property/batchpredictionjob_dedicated_resources'\nrequire 'google/vertexai/property/batchpredictionjob_dedicated_resources_machine_spec'\nrequire 'google/vertexai/property/batchpredictionjob_encryption_spec'\nrequire 'google/vertexai/property/batchpredictionjob_error'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_espigabb_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasg_config'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/batchpredictionjob_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_espxasgcfnsn_sigma'\nrequire 'google/vertexai/property/batchpredictionjob_input_config'\nrequire 'google/vertexai/property/batchpredictionjob_input_config_bigquery_source'\nrequire 'google/vertexai/property/batchpredictionjob_input_config_gcs_source'\nrequire 'google/vertexai/property/batchpredictionjob_instance_config'\nrequire 'google/vertexai/property/batchpredictionjob_labels'\nrequire 'google/vertexai/property/batchpredictionjob_manual_batch_tuning_parameters'\nrequire 'google/vertexai/property/batchpredictionjob_output_config'\nrequire 'google/vertexai/property/batchpredictionjob_output_config_bigquery_destination'\nrequire 'google/vertexai/property/batchpredictionjob_output_config_gcs_destination'\nrequire 'google/vertexai/property/batchpredictionjob_output_info'\nrequire 'google/vertexai/property/batchpredictionjob_partial_failures'\nrequire 'google/vertexai/property/batchpredictionjob_resources_consumed'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_env'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_container_spec_ports'\nrequire 'google/vertexai/property/batchpredictionjob_unmanaged_container_model_predict_schemata'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIBatchPredictionJob < GcpResourceBase\n  name 'google_vertex_ai_batch_prediction_job'\n  desc 'BatchPredictionJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :create_time\n  attr_reader :model_parameters\n  attr_reader :instance_config\n  attr_reader :model_version_id\n  attr_reader :dedicated_resources\n  attr_reader :output_info\n  attr_reader :disable_container_logging\n  attr_reader :explanation_spec\n  attr_reader :end_time\n  attr_reader :generate_explanation\n  attr_reader :resources_consumed\n  attr_reader :error\n  attr_reader :input_config\n  attr_reader :unmanaged_container_model\n  attr_reader :completion_stats\n  attr_reader :start_time\n  attr_reader :manual_batch_tuning_parameters\n  attr_reader :update_time\n  attr_reader :name\n  attr_reader :labels\n  attr_reader :state\n  attr_reader :encryption_spec\n  attr_reader :partial_failures\n  attr_reader :model\n  attr_reader :output_config\n  attr_reader :display_name\n  attr_reader :service_account\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @create_time = @fetched['createTime']\n    @model_parameters = @fetched['modelParameters']\n    @instance_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobInstanceConfig.new(@fetched['instanceConfig'], to_s)\n    @model_version_id = @fetched['modelVersionId']\n    @dedicated_resources = GoogleInSpec::VertexAI::Property::BatchPredictionJobDedicatedResources.new(@fetched['dedicatedResources'], to_s)\n    @output_info = GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputInfo.new(@fetched['outputInfo'], to_s)\n    @disable_container_logging = @fetched['disableContainerLogging']\n    @explanation_spec = GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpec.new(@fetched['explanationSpec'], to_s)\n    @end_time = @fetched['endTime']\n    @generate_explanation = @fetched['generateExplanation']\n    @resources_consumed = GoogleInSpec::VertexAI::Property::BatchPredictionJobResourcesConsumed.new(@fetched['resourcesConsumed'], to_s)\n    @error = GoogleInSpec::VertexAI::Property::BatchPredictionJobError.new(@fetched['error'], to_s)\n    @input_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobInputConfig.new(@fetched['inputConfig'], to_s)\n    @unmanaged_container_model = GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModel.new(@fetched['unmanagedContainerModel'], to_s)\n    @completion_stats = GoogleInSpec::VertexAI::Property::BatchPredictionJobCompletionStats.new(@fetched['completionStats'], to_s)\n    @start_time = @fetched['startTime']\n    @manual_batch_tuning_parameters = GoogleInSpec::VertexAI::Property::BatchPredictionJobManualBatchTuningParameters.new(@fetched['manualBatchTuningParameters'], to_s)\n    @update_time = @fetched['updateTime']\n    @name = @fetched['name']\n    @labels = GoogleInSpec::VertexAI::Property::BatchPredictionJobLabels.new(@fetched['labels'], to_s)\n    @state = @fetched['state']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::BatchPredictionJobEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @partial_failures = GoogleInSpec::VertexAI::Property::BatchPredictionJobPartialFailuresArray.parse(@fetched['partialFailures'], to_s)\n    @model = @fetched['model']\n    @output_config = GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputConfig.new(@fetched['outputConfig'], to_s)\n    @display_name = @fetched['displayName']\n    @service_account = @fetched['serviceAccount']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"BatchPredictionJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_batch_prediction_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIBatchPredictionJobs < GcpResourceBase\n  name 'google_vertex_ai_batch_prediction_jobs'\n  desc 'BatchPredictionJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:model_parameters, field: :model_parameters)\n  filter_table_config.add(:instance_configs, field: :instance_config)\n  filter_table_config.add(:model_version_ids, field: :model_version_id)\n  filter_table_config.add(:dedicated_resources, field: :dedicated_resources)\n  filter_table_config.add(:output_infos, field: :output_info)\n  filter_table_config.add(:disable_container_loggings, field: :disable_container_logging)\n  filter_table_config.add(:explanation_specs, field: :explanation_spec)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:generate_explanations, field: :generate_explanation)\n  filter_table_config.add(:resources_consumeds, field: :resources_consumed)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:input_configs, field: :input_config)\n  filter_table_config.add(:unmanaged_container_models, field: :unmanaged_container_model)\n  filter_table_config.add(:completion_stats, field: :completion_stats)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:manual_batch_tuning_parameters, field: :manual_batch_tuning_parameters)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:partial_failures, field: :partial_failures)\n  filter_table_config.add(:models, field: :model)\n  filter_table_config.add(:output_configs, field: :output_config)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:service_accounts, field: :service_account)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('batchPredictionJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'modelParameters' => ->(obj) { [:model_parameters, obj['modelParameters']] },\n      'instanceConfig' => ->(obj) { [:instance_config, GoogleInSpec::VertexAI::Property::BatchPredictionJobInstanceConfig.new(obj['instanceConfig'], to_s)] },\n      'modelVersionId' => ->(obj) { [:model_version_id, obj['modelVersionId']] },\n      'dedicatedResources' => ->(obj) { [:dedicated_resources, GoogleInSpec::VertexAI::Property::BatchPredictionJobDedicatedResources.new(obj['dedicatedResources'], to_s)] },\n      'outputInfo' => ->(obj) { [:output_info, GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputInfo.new(obj['outputInfo'], to_s)] },\n      'disableContainerLogging' => ->(obj) { [:disable_container_logging, obj['disableContainerLogging']] },\n      'explanationSpec' => ->(obj) { [:explanation_spec, GoogleInSpec::VertexAI::Property::BatchPredictionJobExplanationSpec.new(obj['explanationSpec'], to_s)] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'generateExplanation' => ->(obj) { [:generate_explanation, obj['generateExplanation']] },\n      'resourcesConsumed' => ->(obj) { [:resources_consumed, GoogleInSpec::VertexAI::Property::BatchPredictionJobResourcesConsumed.new(obj['resourcesConsumed'], to_s)] },\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::BatchPredictionJobError.new(obj['error'], to_s)] },\n      'inputConfig' => ->(obj) { [:input_config, GoogleInSpec::VertexAI::Property::BatchPredictionJobInputConfig.new(obj['inputConfig'], to_s)] },\n      'unmanagedContainerModel' => ->(obj) { [:unmanaged_container_model, GoogleInSpec::VertexAI::Property::BatchPredictionJobUnmanagedContainerModel.new(obj['unmanagedContainerModel'], to_s)] },\n      'completionStats' => ->(obj) { [:completion_stats, GoogleInSpec::VertexAI::Property::BatchPredictionJobCompletionStats.new(obj['completionStats'], to_s)] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'manualBatchTuningParameters' => ->(obj) { [:manual_batch_tuning_parameters, GoogleInSpec::VertexAI::Property::BatchPredictionJobManualBatchTuningParameters.new(obj['manualBatchTuningParameters'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::BatchPredictionJobLabels.new(obj['labels'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::BatchPredictionJobEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'partialFailures' => ->(obj) { [:partial_failures, GoogleInSpec::VertexAI::Property::BatchPredictionJobPartialFailuresArray.parse(obj['partialFailures'], to_s)] },\n      'model' => ->(obj) { [:model, obj['model']] },\n      'outputConfig' => ->(obj) { [:output_config, GoogleInSpec::VertexAI::Property::BatchPredictionJobOutputConfig.new(obj['outputConfig'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'serviceAccount' => ->(obj) { [:service_account, obj['serviceAccount']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/batchPredictionJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_custom_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/customjob_encryption_spec'\nrequire 'google/vertexai/property/customjob_error'\nrequire 'google/vertexai/property/customjob_job_spec'\nrequire 'google/vertexai/property/customjob_job_spec_base_output_directory'\nrequire 'google/vertexai/property/customjob_job_spec_scheduling'\nrequire 'google/vertexai/property/customjob_job_spec_worker_pool_specs'\nrequire 'google/vertexai/property/customjob_labels'\nrequire 'google/vertexai/property/customjob_web_access_uris'\n\n# A provider to manage Vertex AI resources.\nclass VertexAICustomJob < GcpResourceBase\n  name 'google_vertex_ai_custom_job'\n  desc 'CustomJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :error\n  attr_reader :web_access_uris\n  attr_reader :job_spec\n  attr_reader :start_time\n  attr_reader :labels\n  attr_reader :encryption_spec\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :end_time\n  attr_reader :state\n  attr_reader :display_name\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @error = GoogleInSpec::VertexAI::Property::CustomJobError.new(@fetched['error'], to_s)\n    @web_access_uris = GoogleInSpec::VertexAI::Property::CustomJobWebAccessUris.new(@fetched['webAccessUris'], to_s)\n    @job_spec = GoogleInSpec::VertexAI::Property::CustomJobJobSpec.new(@fetched['jobSpec'], to_s)\n    @start_time = @fetched['startTime']\n    @labels = GoogleInSpec::VertexAI::Property::CustomJobLabels.new(@fetched['labels'], to_s)\n    @encryption_spec = GoogleInSpec::VertexAI::Property::CustomJobEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @end_time = @fetched['endTime']\n    @state = @fetched['state']\n    @display_name = @fetched['displayName']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"CustomJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_custom_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAICustomJobs < GcpResourceBase\n  name 'google_vertex_ai_custom_jobs'\n  desc 'CustomJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:web_access_uris, field: :web_access_uris)\n  filter_table_config.add(:job_specs, field: :job_spec)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('customJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::CustomJobError.new(obj['error'], to_s)] },\n      'webAccessUris' => ->(obj) { [:web_access_uris, GoogleInSpec::VertexAI::Property::CustomJobWebAccessUris.new(obj['webAccessUris'], to_s)] },\n      'jobSpec' => ->(obj) { [:job_spec, GoogleInSpec::VertexAI::Property::CustomJobJobSpec.new(obj['jobSpec'], to_s)] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::CustomJobLabels.new(obj['labels'], to_s)] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::CustomJobEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/customJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_dataset.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/dataset_encryption_spec'\nrequire 'google/vertexai/property/dataset_labels'\nrequire 'google/vertexai/property/dataset_saved_queries'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIDataset < GcpResourceBase\n  name 'google_vertex_ai_dataset'\n  desc 'Dataset'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :saved_queries\n  attr_reader :create_time\n  attr_reader :encryption_spec\n  attr_reader :name\n  attr_reader :metadata\n  attr_reader :etag\n  attr_reader :description\n  attr_reader :labels\n  attr_reader :metadata_schema_uri\n  attr_reader :metadata_artifact\n  attr_reader :update_time\n  attr_reader :data_item_count\n  attr_reader :display_name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @saved_queries = GoogleInSpec::VertexAI::Property::DatasetSavedQueriesArray.parse(@fetched['savedQueries'], to_s)\n    @create_time = @fetched['createTime']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::DatasetEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @name = @fetched['name']\n    @metadata = @fetched['metadata']\n    @etag = @fetched['etag']\n    @description = @fetched['description']\n    @labels = GoogleInSpec::VertexAI::Property::DatasetLabels.new(@fetched['labels'], to_s)\n    @metadata_schema_uri = @fetched['metadataSchemaUri']\n    @metadata_artifact = @fetched['metadataArtifact']\n    @update_time = @fetched['updateTime']\n    @data_item_count = @fetched['dataItemCount']\n    @display_name = @fetched['displayName']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Dataset #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_dataset_data_item_annotations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIDatasetDataItemAnnotations < GcpResourceBase\n  name 'google_vertex_ai_dataset_data_item_annotations'\n  desc 'DatasetDataItemAnnotation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:payload_schema_uris, field: :payload_schema_uri)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:payloads, field: :payload)\n  filter_table_config.add(:annotation_sources, field: :annotation_source)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('annotations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'payloadSchemaUri' => ->(obj) { [:payload_schema_uri, obj['payloadSchemaUri']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::DatasetDataItemAnnotationLabels.new(obj['labels'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'payload' => ->(obj) { [:payload, obj['payload']] },\n      'annotationSource' => ->(obj) { [:annotation_source, obj['annotationSource']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/annotations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_datasets.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIDatasets < GcpResourceBase\n  name 'google_vertex_ai_datasets'\n  desc 'Dataset plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:saved_queries, field: :saved_queries)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:metadata_schema_uris, field: :metadata_schema_uri)\n  filter_table_config.add(:metadata_artifacts, field: :metadata_artifact)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:data_item_counts, field: :data_item_count)\n  filter_table_config.add(:display_names, field: :display_name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('datasets')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'savedQueries' => ->(obj) { [:saved_queries, GoogleInSpec::VertexAI::Property::DatasetSavedQueriesArray.parse(obj['savedQueries'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::DatasetEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::DatasetLabels.new(obj['labels'], to_s)] },\n      'metadataSchemaUri' => ->(obj) { [:metadata_schema_uri, obj['metadataSchemaUri']] },\n      'metadataArtifact' => ->(obj) { [:metadata_artifact, obj['metadataArtifact']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'dataItemCount' => ->(obj) { [:data_item_count, obj['dataItemCount']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/datasets'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_datasets_annotation_spec.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIDatasetsAnnotationSpec < GcpResourceBase\n  name 'google_vertex_ai_datasets_annotation_spec'\n  desc 'DatasetsAnnotationSpec'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :display_name\n  attr_reader :name\n  attr_reader :etag\n  attr_reader :create_time\n  attr_reader :update_time\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @display_name = @fetched['displayName']\n    @name = @fetched['name']\n    @etag = @fetched['etag']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"DatasetsAnnotationSpec #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_datasets_data_items.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIDatasetsDataItems < GcpResourceBase\n  name 'google_vertex_ai_datasets_data_items'\n  desc 'DatasetsDataItem plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:payloads, field: :payload)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('dataItems')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'payload' => ->(obj) { [:payload, obj['payload']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::DatasetsDataItemLabels.new(obj['labels'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/dataItems'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_datasets_saved_queries.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIDatasetsSavedQuerys < GcpResourceBase\n  name 'google_vertex_ai_datasets_saved_queries'\n  desc 'DatasetsSavedQuery plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:annotation_spec_counts, field: :annotation_spec_count)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:support_automl_trainings, field: :support_automl_training)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:problem_types, field: :problem_type)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:annotation_filters, field: :annotation_filter)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('savedQueries')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'annotationSpecCount' => ->(obj) { [:annotation_spec_count, obj['annotationSpecCount']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'supportAutomlTraining' => ->(obj) { [:support_automl_training, obj['supportAutomlTraining']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'problemType' => ->(obj) { [:problem_type, obj['problemType']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'annotationFilter' => ->(obj) { [:annotation_filter, obj['annotationFilter']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/savedQueries'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_endpoint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/endpoint_deployed_models'\nrequire 'google/vertexai/property/endpoint_encryption_spec'\nrequire 'google/vertexai/property/endpoint_labels'\nrequire 'google/vertexai/property/endpoint_predict_request_response_logging_config'\nrequire 'google/vertexai/property/endpoint_predict_request_response_logging_config_bigquery_destination'\nrequire 'google/vertexai/property/endpoint_traffic_split'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIEndpoint < GcpResourceBase\n  name 'google_vertex_ai_endpoint'\n  desc 'Endpoint'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :encryption_spec\n  attr_reader :enable_private_service_connect\n  attr_reader :update_time\n  attr_reader :model_deployment_monitoring_job\n  attr_reader :description\n  attr_reader :deployed_models\n  attr_reader :network\n  attr_reader :traffic_split\n  attr_reader :labels\n  attr_reader :display_name\n  attr_reader :predict_request_response_logging_config\n  attr_reader :etag\n  attr_reader :create_time\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @encryption_spec = GoogleInSpec::VertexAI::Property::EndpointEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @enable_private_service_connect = @fetched['enablePrivateServiceConnect']\n    @update_time = @fetched['updateTime']\n    @model_deployment_monitoring_job = @fetched['modelDeploymentMonitoringJob']\n    @description = @fetched['description']\n    @deployed_models = GoogleInSpec::VertexAI::Property::EndpointDeployedModelsArray.parse(@fetched['deployedModels'], to_s)\n    @network = @fetched['network']\n    @traffic_split = GoogleInSpec::VertexAI::Property::EndpointTrafficSplit.new(@fetched['trafficSplit'], to_s)\n    @labels = GoogleInSpec::VertexAI::Property::EndpointLabels.new(@fetched['labels'], to_s)\n    @display_name = @fetched['displayName']\n    @predict_request_response_logging_config = GoogleInSpec::VertexAI::Property::EndpointPredictRequestResponseLoggingConfig.new(@fetched['predictRequestResponseLoggingConfig'], to_s)\n    @etag = @fetched['etag']\n    @create_time = @fetched['createTime']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Endpoint #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIEndpoints < GcpResourceBase\n  name 'google_vertex_ai_endpoints'\n  desc 'Endpoint plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:enable_private_service_connects, field: :enable_private_service_connect)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:model_deployment_monitoring_jobs, field: :model_deployment_monitoring_job)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:deployed_models, field: :deployed_models)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:traffic_splits, field: :traffic_split)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:predict_request_response_logging_configs, field: :predict_request_response_logging_config)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('endpoints')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::EndpointEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'enablePrivateServiceConnect' => ->(obj) { [:enable_private_service_connect, obj['enablePrivateServiceConnect']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'modelDeploymentMonitoringJob' => ->(obj) { [:model_deployment_monitoring_job, obj['modelDeploymentMonitoringJob']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'deployedModels' => ->(obj) { [:deployed_models, GoogleInSpec::VertexAI::Property::EndpointDeployedModelsArray.parse(obj['deployedModels'], to_s)] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'trafficSplit' => ->(obj) { [:traffic_split, GoogleInSpec::VertexAI::Property::EndpointTrafficSplit.new(obj['trafficSplit'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::EndpointLabels.new(obj['labels'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'predictRequestResponseLoggingConfig' => ->(obj) { [:predict_request_response_logging_config, GoogleInSpec::VertexAI::Property::EndpointPredictRequestResponseLoggingConfig.new(obj['predictRequestResponseLoggingConfig'], to_s)] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/endpoints'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestore.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/featurestore_encryption_spec'\nrequire 'google/vertexai/property/featurestore_labels'\nrequire 'google/vertexai/property/featurestore_online_serving_config'\nrequire 'google/vertexai/property/featurestore_online_serving_config_scaling'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIFeaturestore < GcpResourceBase\n  name 'google_vertex_ai_featurestore'\n  desc 'Featurestore'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :etag\n  attr_reader :online_storage_ttl_days\n  attr_reader :encryption_spec\n  attr_reader :labels\n  attr_reader :update_time\n  attr_reader :name\n  attr_reader :online_serving_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @etag = @fetched['etag']\n    @online_storage_ttl_days = @fetched['onlineStorageTtlDays']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::FeaturestoreEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @labels = GoogleInSpec::VertexAI::Property::FeaturestoreLabels.new(@fetched['labels'], to_s)\n    @update_time = @fetched['updateTime']\n    @name = @fetched['name']\n    @online_serving_config = GoogleInSpec::VertexAI::Property::FeaturestoreOnlineServingConfig.new(@fetched['onlineServingConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Featurestore #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestore_entity_type_feature.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/featurestoreentitytypefeature_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIFeaturestoreEntityTypeFeature < GcpResourceBase\n  name 'google_vertex_ai_featurestore_entity_type_feature'\n  desc 'FeaturestoreEntityTypeFeature'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :create_time\n  attr_reader :monitoring_stats_anomalies\n  attr_reader :etag\n  attr_reader :labels\n  attr_reader :name\n  attr_reader :update_time\n  attr_reader :disable_monitoring\n  attr_reader :value_type\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @create_time = @fetched['createTime']\n    @monitoring_stats_anomalies = @fetched['monitoringStatsAnomalies']\n    @etag = @fetched['etag']\n    @labels = GoogleInSpec::VertexAI::Property::FeaturestoreEntityTypeFeatureLabels.new(@fetched['labels'], to_s)\n    @name = @fetched['name']\n    @update_time = @fetched['updateTime']\n    @disable_monitoring = @fetched['disableMonitoring']\n    @value_type = @fetched['valueType']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FeaturestoreEntityTypeFeature #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestore_entity_type_features.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIFeaturestoreEntityTypeFeatures < GcpResourceBase\n  name 'google_vertex_ai_featurestore_entity_type_features'\n  desc 'FeaturestoreEntityTypeFeature plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:monitoring_stats_anomalies, field: :monitoring_stats_anomalies)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:disable_monitorings, field: :disable_monitoring)\n  filter_table_config.add(:value_types, field: :value_type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('features')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'monitoringStatsAnomalies' => ->(obj) { [:monitoring_stats_anomalies, obj['monitoringStatsAnomalies']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::FeaturestoreEntityTypeFeatureLabels.new(obj['labels'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'disableMonitoring' => ->(obj) { [:disable_monitoring, obj['disableMonitoring']] },\n      'valueType' => ->(obj) { [:value_type, obj['valueType']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/features'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestores.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIFeaturestores < GcpResourceBase\n  name 'google_vertex_ai_featurestores'\n  desc 'Featurestore plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:online_storage_ttl_days, field: :online_storage_ttl_days)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:online_serving_configs, field: :online_serving_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('featurestores')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'onlineStorageTtlDays' => ->(obj) { [:online_storage_ttl_days, obj['onlineStorageTtlDays']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::FeaturestoreEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::FeaturestoreLabels.new(obj['labels'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'onlineServingConfig' => ->(obj) { [:online_serving_config, GoogleInSpec::VertexAI::Property::FeaturestoreOnlineServingConfig.new(obj['onlineServingConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/featurestores'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestores_entity_type.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/featurestoresentitytype_labels'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_categorical_threshold_config'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_import_features_analysis'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_numerical_threshold_config'\nrequire 'google/vertexai/property/featurestoresentitytype_monitoring_config_snapshot_analysis'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIFeaturestoresEntityType < GcpResourceBase\n  name 'google_vertex_ai_featurestores_entity_type'\n  desc 'FeaturestoresEntityType'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :labels\n  attr_reader :description\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :monitoring_config\n  attr_reader :etag\n  attr_reader :update_time\n  attr_reader :offline_storage_ttl_days\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @labels = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeLabels.new(@fetched['labels'], to_s)\n    @description = @fetched['description']\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @monitoring_config = GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfig.new(@fetched['monitoringConfig'], to_s)\n    @etag = @fetched['etag']\n    @update_time = @fetched['updateTime']\n    @offline_storage_ttl_days = @fetched['offlineStorageTtlDays']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"FeaturestoresEntityType #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_featurestores_entity_types.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIFeaturestoresEntityTypes < GcpResourceBase\n  name 'google_vertex_ai_featurestores_entity_types'\n  desc 'FeaturestoresEntityType plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:monitoring_configs, field: :monitoring_config)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:offline_storage_ttl_days, field: :offline_storage_ttl_days)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('entityTypes')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeLabels.new(obj['labels'], to_s)] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'monitoringConfig' => ->(obj) { [:monitoring_config, GoogleInSpec::VertexAI::Property::FeaturestoresEntityTypeMonitoringConfig.new(obj['monitoringConfig'], to_s)] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'offlineStorageTtlDays' => ->(obj) { [:offline_storage_ttl_days, obj['offlineStorageTtlDays']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/entityTypes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_hyperparameter_tuning_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/hyperparametertuningjob_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIHyperparameterTuningJob < GcpResourceBase\n  name 'google_vertex_ai_hyperparameter_tuning_job'\n  desc 'HyperparameterTuningJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :study_spec\n  attr_reader :trials\n  attr_reader :state\n  attr_reader :max_failed_trial_count\n  attr_reader :encryption_spec\n  attr_reader :error\n  attr_reader :end_time\n  attr_reader :update_time\n  attr_reader :start_time\n  attr_reader :labels\n  attr_reader :create_time\n  attr_reader :parallel_trial_count\n  attr_reader :trial_job_spec\n  attr_reader :max_trial_count\n  attr_reader :display_name\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @study_spec = @fetched['studySpec']\n    @trials = @fetched['trials']\n    @state = @fetched['state']\n    @max_failed_trial_count = @fetched['maxFailedTrialCount']\n    @encryption_spec = @fetched['encryptionSpec']\n    @error = @fetched['error']\n    @end_time = @fetched['endTime']\n    @update_time = @fetched['updateTime']\n    @start_time = @fetched['startTime']\n    @labels = GoogleInSpec::VertexAI::Property::HyperparameterTuningJobLabels.new(@fetched['labels'], to_s)\n    @create_time = @fetched['createTime']\n    @parallel_trial_count = @fetched['parallelTrialCount']\n    @trial_job_spec = @fetched['trialJobSpec']\n    @max_trial_count = @fetched['maxTrialCount']\n    @display_name = @fetched['displayName']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"HyperparameterTuningJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_hyperparameter_tuning_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIHyperparameterTuningJobs < GcpResourceBase\n  name 'google_vertex_ai_hyperparameter_tuning_jobs'\n  desc 'HyperparameterTuningJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:study_specs, field: :study_spec)\n  filter_table_config.add(:trials, field: :trials)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:max_failed_trial_counts, field: :max_failed_trial_count)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:parallel_trial_counts, field: :parallel_trial_count)\n  filter_table_config.add(:trial_job_specs, field: :trial_job_spec)\n  filter_table_config.add(:max_trial_counts, field: :max_trial_count)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('hyperparameterTuningJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'studySpec' => ->(obj) { [:study_spec, obj['studySpec']] },\n      'trials' => ->(obj) { [:trials, obj['trials']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'maxFailedTrialCount' => ->(obj) { [:max_failed_trial_count, obj['maxFailedTrialCount']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, obj['encryptionSpec']] },\n      'error' => ->(obj) { [:error, obj['error']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::HyperparameterTuningJobLabels.new(obj['labels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'parallelTrialCount' => ->(obj) { [:parallel_trial_count, obj['parallelTrialCount']] },\n      'trialJobSpec' => ->(obj) { [:trial_job_spec, obj['trialJobSpec']] },\n      'maxTrialCount' => ->(obj) { [:max_trial_count, obj['maxTrialCount']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/hyperparameterTuningJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_index.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/index_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIIndex < GcpResourceBase\n  name 'google_vertex_ai_index'\n  desc 'Index'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :metadata\n  attr_reader :index_stats\n  attr_reader :name\n  attr_reader :deployed_indexes\n  attr_reader :display_name\n  attr_reader :metadata_schema_uri\n  attr_reader :index_update_method\n  attr_reader :update_time\n  attr_reader :create_time\n  attr_reader :etag\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @metadata = @fetched['metadata']\n    @index_stats = @fetched['indexStats']\n    @name = @fetched['name']\n    @deployed_indexes = @fetched['deployedIndexes']\n    @display_name = @fetched['displayName']\n    @metadata_schema_uri = @fetched['metadataSchemaUri']\n    @index_update_method = @fetched['indexUpdateMethod']\n    @update_time = @fetched['updateTime']\n    @create_time = @fetched['createTime']\n    @etag = @fetched['etag']\n    @labels = GoogleInSpec::VertexAI::Property::IndexLabels.new(@fetched['labels'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Index #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_index_endpoint.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/indexendpoint_deployed_indexes'\nrequire 'google/vertexai/property/indexendpoint_labels'\nrequire 'google/vertexai/property/indexendpoint_private_service_connect_config'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIIndexEndpoint < GcpResourceBase\n  name 'google_vertex_ai_index_endpoint'\n  desc 'IndexEndpoint'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :deployed_indexes\n  attr_reader :private_service_connect_config\n  attr_reader :display_name\n  attr_reader :public_endpoint_enabled\n  attr_reader :labels\n  attr_reader :create_time\n  attr_reader :name\n  attr_reader :network\n  attr_reader :update_time\n  attr_reader :public_endpoint_domain_name\n  attr_reader :enable_private_service_connect\n  attr_reader :etag\n  attr_reader :description\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @deployed_indexes = GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesArray.parse(@fetched['deployedIndexes'], to_s)\n    @private_service_connect_config = GoogleInSpec::VertexAI::Property::IndexEndpointPrivateServiceConnectConfig.new(@fetched['privateServiceConnectConfig'], to_s)\n    @display_name = @fetched['displayName']\n    @public_endpoint_enabled = @fetched['publicEndpointEnabled']\n    @labels = GoogleInSpec::VertexAI::Property::IndexEndpointLabels.new(@fetched['labels'], to_s)\n    @create_time = @fetched['createTime']\n    @name = @fetched['name']\n    @network = @fetched['network']\n    @update_time = @fetched['updateTime']\n    @public_endpoint_domain_name = @fetched['publicEndpointDomainName']\n    @enable_private_service_connect = @fetched['enablePrivateServiceConnect']\n    @etag = @fetched['etag']\n    @description = @fetched['description']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"IndexEndpoint #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_index_endpoints.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIIndexEndpoints < GcpResourceBase\n  name 'google_vertex_ai_index_endpoints'\n  desc 'IndexEndpoint plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:deployed_indexes, field: :deployed_indexes)\n  filter_table_config.add(:private_service_connect_configs, field: :private_service_connect_config)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:public_endpoint_enableds, field: :public_endpoint_enabled)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:public_endpoint_domain_names, field: :public_endpoint_domain_name)\n  filter_table_config.add(:enable_private_service_connects, field: :enable_private_service_connect)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:descriptions, field: :description)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('indexEndpoints')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'deployedIndexes' => ->(obj) { [:deployed_indexes, GoogleInSpec::VertexAI::Property::IndexEndpointDeployedIndexesArray.parse(obj['deployedIndexes'], to_s)] },\n      'privateServiceConnectConfig' => ->(obj) { [:private_service_connect_config, GoogleInSpec::VertexAI::Property::IndexEndpointPrivateServiceConnectConfig.new(obj['privateServiceConnectConfig'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'publicEndpointEnabled' => ->(obj) { [:public_endpoint_enabled, obj['publicEndpointEnabled']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::IndexEndpointLabels.new(obj['labels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'publicEndpointDomainName' => ->(obj) { [:public_endpoint_domain_name, obj['publicEndpointDomainName']] },\n      'enablePrivateServiceConnect' => ->(obj) { [:enable_private_service_connect, obj['enablePrivateServiceConnect']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/indexEndpoints'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_indices.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIIndexs < GcpResourceBase\n  name 'google_vertex_ai_indices'\n  desc 'Index plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:index_stats, field: :index_stats)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:deployed_indexes, field: :deployed_indexes)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:metadata_schema_uris, field: :metadata_schema_uri)\n  filter_table_config.add(:index_update_methods, field: :index_update_method)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('indexes')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'indexStats' => ->(obj) { [:index_stats, obj['indexStats']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'deployedIndexes' => ->(obj) { [:deployed_indexes, obj['deployedIndexes']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'metadataSchemaUri' => ->(obj) { [:metadata_schema_uri, obj['metadataSchemaUri']] },\n      'indexUpdateMethod' => ->(obj) { [:index_update_method, obj['indexUpdateMethod']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::IndexLabels.new(obj['labels'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/indexes'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_store.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/metadatastore_encryption_spec'\nrequire 'google/vertexai/property/metadatastore_state'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIMetadataStore < GcpResourceBase\n  name 'google_vertex_ai_metadata_store'\n  desc 'MetadataStore'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :encryption_spec\n  attr_reader :state\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::MetadataStoreEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @state = GoogleInSpec::VertexAI::Property::MetadataStoreState.new(@fetched['state'], to_s)\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MetadataStore #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIMetadataStores < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores'\n  desc 'MetadataStore plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('metadataStores')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::MetadataStoreEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'state' => ->(obj) { [:state, GoogleInSpec::VertexAI::Property::MetadataStoreState.new(obj['state'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/metadataStores'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_artifact.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/metadatastoresartifact_labels'\nrequire 'google/vertexai/property/metadatastoresartifact_metadata'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIMetadataStoresArtifact < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_artifact'\n  desc 'MetadataStoresArtifact'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :schema_version\n  attr_reader :display_name\n  attr_reader :etag\n  attr_reader :name\n  attr_reader :update_time\n  attr_reader :state\n  attr_reader :metadata\n  attr_reader :uri\n  attr_reader :create_time\n  attr_reader :schema_title\n  attr_reader :description\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @schema_version = @fetched['schemaVersion']\n    @display_name = @fetched['displayName']\n    @etag = @fetched['etag']\n    @name = @fetched['name']\n    @update_time = @fetched['updateTime']\n    @state = @fetched['state']\n    @metadata = GoogleInSpec::VertexAI::Property::MetadataStoresArtifactMetadata.new(@fetched['metadata'], to_s)\n    @uri = @fetched['uri']\n    @create_time = @fetched['createTime']\n    @schema_title = @fetched['schemaTitle']\n    @description = @fetched['description']\n    @labels = GoogleInSpec::VertexAI::Property::MetadataStoresArtifactLabels.new(@fetched['labels'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MetadataStoresArtifact #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_artifacts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIMetadataStoresArtifacts < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_artifacts'\n  desc 'MetadataStoresArtifact plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:schema_versions, field: :schema_version)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:uris, field: :uri)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:schema_titles, field: :schema_title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('artifacts')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'schemaVersion' => ->(obj) { [:schema_version, obj['schemaVersion']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'metadata' => ->(obj) { [:metadata, GoogleInSpec::VertexAI::Property::MetadataStoresArtifactMetadata.new(obj['metadata'], to_s)] },\n      'uri' => ->(obj) { [:uri, obj['uri']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'schemaTitle' => ->(obj) { [:schema_title, obj['schemaTitle']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::MetadataStoresArtifactLabels.new(obj['labels'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/artifacts'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_context.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/metadatastorescontext_labels'\nrequire 'google/vertexai/property/metadatastorescontext_metadata'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIMetadataStoresContext < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_context'\n  desc 'MetadataStoresContext'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :schema_title\n  attr_reader :etag\n  attr_reader :description\n  attr_reader :display_name\n  attr_reader :schema_version\n  attr_reader :create_time\n  attr_reader :labels\n  attr_reader :metadata\n  attr_reader :update_time\n  attr_reader :parent_contexts\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @schema_title = @fetched['schemaTitle']\n    @etag = @fetched['etag']\n    @description = @fetched['description']\n    @display_name = @fetched['displayName']\n    @schema_version = @fetched['schemaVersion']\n    @create_time = @fetched['createTime']\n    @labels = GoogleInSpec::VertexAI::Property::MetadataStoresContextLabels.new(@fetched['labels'], to_s)\n    @metadata = GoogleInSpec::VertexAI::Property::MetadataStoresContextMetadata.new(@fetched['metadata'], to_s)\n    @update_time = @fetched['updateTime']\n    @parent_contexts = @fetched['parentContexts']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MetadataStoresContext #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_contexts.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIMetadataStoresContexts < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_contexts'\n  desc 'MetadataStoresContext plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:schema_titles, field: :schema_title)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:schema_versions, field: :schema_version)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:parent_contexts, field: :parent_contexts)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('contexts')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'schemaTitle' => ->(obj) { [:schema_title, obj['schemaTitle']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'schemaVersion' => ->(obj) { [:schema_version, obj['schemaVersion']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::MetadataStoresContextLabels.new(obj['labels'], to_s)] },\n      'metadata' => ->(obj) { [:metadata, GoogleInSpec::VertexAI::Property::MetadataStoresContextMetadata.new(obj['metadata'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'parentContexts' => ->(obj) { [:parent_contexts, obj['parentContexts']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/contexts'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_execution.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/metadatastoresexecution_labels'\nrequire 'google/vertexai/property/metadatastoresexecution_metadata'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIMetadataStoresExecution < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_execution'\n  desc 'MetadataStoresExecution'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :labels\n  attr_reader :create_time\n  attr_reader :schema_version\n  attr_reader :state\n  attr_reader :name\n  attr_reader :etag\n  attr_reader :display_name\n  attr_reader :metadata\n  attr_reader :schema_title\n  attr_reader :description\n  attr_reader :update_time\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @labels = GoogleInSpec::VertexAI::Property::MetadataStoresExecutionLabels.new(@fetched['labels'], to_s)\n    @create_time = @fetched['createTime']\n    @schema_version = @fetched['schemaVersion']\n    @state = @fetched['state']\n    @name = @fetched['name']\n    @etag = @fetched['etag']\n    @display_name = @fetched['displayName']\n    @metadata = GoogleInSpec::VertexAI::Property::MetadataStoresExecutionMetadata.new(@fetched['metadata'], to_s)\n    @schema_title = @fetched['schemaTitle']\n    @description = @fetched['description']\n    @update_time = @fetched['updateTime']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MetadataStoresExecution #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_executions.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIMetadataStoresExecutions < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_executions'\n  desc 'MetadataStoresExecution plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:schema_versions, field: :schema_version)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:schema_titles, field: :schema_title)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:update_times, field: :update_time)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('executions')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::MetadataStoresExecutionLabels.new(obj['labels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'schemaVersion' => ->(obj) { [:schema_version, obj['schemaVersion']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'metadata' => ->(obj) { [:metadata, GoogleInSpec::VertexAI::Property::MetadataStoresExecutionMetadata.new(obj['metadata'], to_s)] },\n      'schemaTitle' => ->(obj) { [:schema_title, obj['schemaTitle']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/executions'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_metadata_schema.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIMetadataStoresMetadataSchema < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_metadata_schema'\n  desc 'MetadataStoresMetadataSchema'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :schema_type\n  attr_reader :description\n  attr_reader :schema_version\n  attr_reader :name\n  attr_reader :create_time\n  attr_reader :schema\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @schema_type = @fetched['schemaType']\n    @description = @fetched['description']\n    @schema_version = @fetched['schemaVersion']\n    @name = @fetched['name']\n    @create_time = @fetched['createTime']\n    @schema = @fetched['schema']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"MetadataStoresMetadataSchema #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_metadata_stores_metadata_schemas.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIMetadataStoresMetadataSchemas < GcpResourceBase\n  name 'google_vertex_ai_metadata_stores_metadata_schemas'\n  desc 'MetadataStoresMetadataSchema plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:schema_types, field: :schema_type)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:schema_versions, field: :schema_version)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:schemas, field: :schema)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('metadataSchemas')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'schemaType' => ->(obj) { [:schema_type, obj['schemaType']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'schemaVersion' => ->(obj) { [:schema_version, obj['schemaVersion']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'schema' => ->(obj) { [:schema, obj['schema']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/metadataSchemas'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_model.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/model_container_spec'\nrequire 'google/vertexai/property/model_container_spec_env'\nrequire 'google/vertexai/property/model_container_spec_ports'\nrequire 'google/vertexai/property/model_deployed_models'\nrequire 'google/vertexai/property/model_encryption_spec'\nrequire 'google/vertexai/property/model_explanation_spec'\nrequire 'google/vertexai/property/model_explanation_spec_metadata'\nrequire 'google/vertexai/property/model_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/model_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/model_explanation_spec_parameters'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_example_gcs_source_gcs_source'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_integrated_gradients_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_espigasgcfn_sigma'\nrequire 'google/vertexai/property/model_espigasgcfnsn_sigma'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_blur_baseline_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/model_explanation_spec_parameters_xrai_attribution_smooth_grad_config_feature_noise_sigma'\nrequire 'google/vertexai/property/model_espxasgcfnsn_sigma'\nrequire 'google/vertexai/property/model_labels'\nrequire 'google/vertexai/property/model_model_source_info'\nrequire 'google/vertexai/property/model_original_model_info'\nrequire 'google/vertexai/property/model_predict_schemata'\nrequire 'google/vertexai/property/model_supported_export_formats'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIModel < GcpResourceBase\n  name 'google_vertex_ai_model'\n  desc 'Model'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :model_source_info\n  attr_reader :name\n  attr_reader :metadata\n  attr_reader :update_time\n  attr_reader :etag\n  attr_reader :description\n  attr_reader :deployed_models\n  attr_reader :create_time\n  attr_reader :explanation_spec\n  attr_reader :encryption_spec\n  attr_reader :pipeline_job\n  attr_reader :predict_schemata\n  attr_reader :version_update_time\n  attr_reader :supported_export_formats\n  attr_reader :original_model_info\n  attr_reader :metadata_artifact\n  attr_reader :supported_input_storage_formats\n  attr_reader :metadata_schema_uri\n  attr_reader :container_spec\n  attr_reader :version_id\n  attr_reader :artifact_uri\n  attr_reader :training_pipeline\n  attr_reader :display_name\n  attr_reader :supported_deployment_resources_types\n  attr_reader :supported_output_storage_formats\n  attr_reader :version_aliases\n  attr_reader :version_create_time\n  attr_reader :version_description\n  attr_reader :labels\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @model_source_info = GoogleInSpec::VertexAI::Property::ModelModelSourceInfo.new(@fetched['modelSourceInfo'], to_s)\n    @name = @fetched['name']\n    @metadata = @fetched['metadata']\n    @update_time = @fetched['updateTime']\n    @etag = @fetched['etag']\n    @description = @fetched['description']\n    @deployed_models = GoogleInSpec::VertexAI::Property::ModelDeployedModelsArray.parse(@fetched['deployedModels'], to_s)\n    @create_time = @fetched['createTime']\n    @explanation_spec = GoogleInSpec::VertexAI::Property::ModelExplanationSpec.new(@fetched['explanationSpec'], to_s)\n    @encryption_spec = GoogleInSpec::VertexAI::Property::ModelEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @pipeline_job = @fetched['pipelineJob']\n    @predict_schemata = GoogleInSpec::VertexAI::Property::ModelPredictSchemata.new(@fetched['predictSchemata'], to_s)\n    @version_update_time = @fetched['versionUpdateTime']\n    @supported_export_formats = GoogleInSpec::VertexAI::Property::ModelSupportedExportFormatsArray.parse(@fetched['supportedExportFormats'], to_s)\n    @original_model_info = GoogleInSpec::VertexAI::Property::ModelOriginalModelInfo.new(@fetched['originalModelInfo'], to_s)\n    @metadata_artifact = @fetched['metadataArtifact']\n    @supported_input_storage_formats = @fetched['supportedInputStorageFormats']\n    @metadata_schema_uri = @fetched['metadataSchemaUri']\n    @container_spec = GoogleInSpec::VertexAI::Property::ModelContainerSpec.new(@fetched['containerSpec'], to_s)\n    @version_id = @fetched['versionId']\n    @artifact_uri = @fetched['artifactUri']\n    @training_pipeline = @fetched['trainingPipeline']\n    @display_name = @fetched['displayName']\n    @supported_deployment_resources_types = @fetched['supportedDeploymentResourcesTypes']\n    @supported_output_storage_formats = @fetched['supportedOutputStorageFormats']\n    @version_aliases = @fetched['versionAliases']\n    @version_create_time = @fetched['versionCreateTime']\n    @version_description = @fetched['versionDescription']\n    @labels = GoogleInSpec::VertexAI::Property::ModelLabels.new(@fetched['labels'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Model #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_model_deployment_monitoring_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_bigquery_tables'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_encryption_spec'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_error'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_labels'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_latest_monitoring_pipeline_metadata'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_latest_monitoring_pipeline_metadata_status'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_logging_sampling_strategy'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_logging_sampling_strategy_random_sample_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_objective_configs'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_deployment_monitoring_schedule_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_monitoring_alert_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_model_monitoring_alert_config_email_alert_config'\nrequire 'google/vertexai/property/modeldeploymentmonitoringjob_stats_anomalies_base_directory'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIModelDeploymentMonitoringJob < GcpResourceBase\n  name 'google_vertex_ai_model_deployment_monitoring_job'\n  desc 'ModelDeploymentMonitoringJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :model_deployment_monitoring_objective_configs\n  attr_reader :labels\n  attr_reader :state\n  attr_reader :analysis_instance_schema_uri\n  attr_reader :enable_monitoring_pipeline_logs\n  attr_reader :endpoint\n  attr_reader :logging_sampling_strategy\n  attr_reader :bigquery_tables\n  attr_reader :display_name\n  attr_reader :schedule_state\n  attr_reader :error\n  attr_reader :model_monitoring_alert_config\n  attr_reader :latest_monitoring_pipeline_metadata\n  attr_reader :sample_predict_instance\n  attr_reader :predict_instance_schema_uri\n  attr_reader :next_schedule_time\n  attr_reader :create_time\n  attr_reader :log_ttl\n  attr_reader :stats_anomalies_base_directory\n  attr_reader :update_time\n  attr_reader :model_deployment_monitoring_schedule_config\n  attr_reader :encryption_spec\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @model_deployment_monitoring_objective_configs = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsArray.parse(@fetched['modelDeploymentMonitoringObjectiveConfigs'], to_s)\n    @labels = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLabels.new(@fetched['labels'], to_s)\n    @state = @fetched['state']\n    @analysis_instance_schema_uri = @fetched['analysisInstanceSchemaUri']\n    @enable_monitoring_pipeline_logs = @fetched['enableMonitoringPipelineLogs']\n    @endpoint = @fetched['endpoint']\n    @logging_sampling_strategy = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLoggingSamplingStrategy.new(@fetched['loggingSamplingStrategy'], to_s)\n    @bigquery_tables = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobBigqueryTablesArray.parse(@fetched['bigqueryTables'], to_s)\n    @display_name = @fetched['displayName']\n    @schedule_state = @fetched['scheduleState']\n    @error = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobError.new(@fetched['error'], to_s)\n    @model_monitoring_alert_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelMonitoringAlertConfig.new(@fetched['modelMonitoringAlertConfig'], to_s)\n    @latest_monitoring_pipeline_metadata = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadata.new(@fetched['latestMonitoringPipelineMetadata'], to_s)\n    @sample_predict_instance = @fetched['samplePredictInstance']\n    @predict_instance_schema_uri = @fetched['predictInstanceSchemaUri']\n    @next_schedule_time = @fetched['nextScheduleTime']\n    @create_time = @fetched['createTime']\n    @log_ttl = @fetched['logTtl']\n    @stats_anomalies_base_directory = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobStatsAnomaliesBaseDirectory.new(@fetched['statsAnomaliesBaseDirectory'], to_s)\n    @update_time = @fetched['updateTime']\n    @model_deployment_monitoring_schedule_config = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringScheduleConfig.new(@fetched['modelDeploymentMonitoringScheduleConfig'], to_s)\n    @encryption_spec = GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ModelDeploymentMonitoringJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_model_deployment_monitoring_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIModelDeploymentMonitoringJobs < GcpResourceBase\n  name 'google_vertex_ai_model_deployment_monitoring_jobs'\n  desc 'ModelDeploymentMonitoringJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:model_deployment_monitoring_objective_configs, field: :model_deployment_monitoring_objective_configs)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:analysis_instance_schema_uris, field: :analysis_instance_schema_uri)\n  filter_table_config.add(:enable_monitoring_pipeline_logs, field: :enable_monitoring_pipeline_logs)\n  filter_table_config.add(:endpoints, field: :endpoint)\n  filter_table_config.add(:logging_sampling_strategies, field: :logging_sampling_strategy)\n  filter_table_config.add(:bigquery_tables, field: :bigquery_tables)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:schedule_states, field: :schedule_state)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:model_monitoring_alert_configs, field: :model_monitoring_alert_config)\n  filter_table_config.add(:latest_monitoring_pipeline_metadata, field: :latest_monitoring_pipeline_metadata)\n  filter_table_config.add(:sample_predict_instances, field: :sample_predict_instance)\n  filter_table_config.add(:predict_instance_schema_uris, field: :predict_instance_schema_uri)\n  filter_table_config.add(:next_schedule_times, field: :next_schedule_time)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:log_ttls, field: :log_ttl)\n  filter_table_config.add(:stats_anomalies_base_directories, field: :stats_anomalies_base_directory)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:model_deployment_monitoring_schedule_configs, field: :model_deployment_monitoring_schedule_config)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('modelDeploymentMonitoringJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'modelDeploymentMonitoringObjectiveConfigs' => ->(obj) { [:model_deployment_monitoring_objective_configs, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringObjectiveConfigsArray.parse(obj['modelDeploymentMonitoringObjectiveConfigs'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLabels.new(obj['labels'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'analysisInstanceSchemaUri' => ->(obj) { [:analysis_instance_schema_uri, obj['analysisInstanceSchemaUri']] },\n      'enableMonitoringPipelineLogs' => ->(obj) { [:enable_monitoring_pipeline_logs, obj['enableMonitoringPipelineLogs']] },\n      'endpoint' => ->(obj) { [:endpoint, obj['endpoint']] },\n      'loggingSamplingStrategy' => ->(obj) { [:logging_sampling_strategy, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLoggingSamplingStrategy.new(obj['loggingSamplingStrategy'], to_s)] },\n      'bigqueryTables' => ->(obj) { [:bigquery_tables, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobBigqueryTablesArray.parse(obj['bigqueryTables'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'scheduleState' => ->(obj) { [:schedule_state, obj['scheduleState']] },\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobError.new(obj['error'], to_s)] },\n      'modelMonitoringAlertConfig' => ->(obj) { [:model_monitoring_alert_config, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelMonitoringAlertConfig.new(obj['modelMonitoringAlertConfig'], to_s)] },\n      'latestMonitoringPipelineMetadata' => ->(obj) { [:latest_monitoring_pipeline_metadata, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobLatestMonitoringPipelineMetadata.new(obj['latestMonitoringPipelineMetadata'], to_s)] },\n      'samplePredictInstance' => ->(obj) { [:sample_predict_instance, obj['samplePredictInstance']] },\n      'predictInstanceSchemaUri' => ->(obj) { [:predict_instance_schema_uri, obj['predictInstanceSchemaUri']] },\n      'nextScheduleTime' => ->(obj) { [:next_schedule_time, obj['nextScheduleTime']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'logTtl' => ->(obj) { [:log_ttl, obj['logTtl']] },\n      'statsAnomaliesBaseDirectory' => ->(obj) { [:stats_anomalies_base_directory, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobStatsAnomaliesBaseDirectory.new(obj['statsAnomaliesBaseDirectory'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'modelDeploymentMonitoringScheduleConfig' => ->(obj) { [:model_deployment_monitoring_schedule_config, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobModelDeploymentMonitoringScheduleConfig.new(obj['modelDeploymentMonitoringScheduleConfig'], to_s)] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::ModelDeploymentMonitoringJobEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/modelDeploymentMonitoringJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_model_evaluation_slice.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/modelevaluationslice_model_explanation'\nrequire 'google/vertexai/property/modelevaluationslice_model_explanation_mean_attributions'\nrequire 'google/vertexai/property/modelevaluationslice_slice'\nrequire 'google/vertexai/property/modelevaluationslice_slice_slice_spec'\nrequire 'google/vertexai/property/modelevaluationslice_slice_slice_spec_configs'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIModelEvaluationSlice < GcpResourceBase\n  name 'google_vertex_ai_model_evaluation_slice'\n  desc 'ModelEvaluationSlice'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :create_time\n  attr_reader :model_explanation\n  attr_reader :name\n  attr_reader :metrics\n  attr_reader :slice\n  attr_reader :metrics_schema_uri\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @create_time = @fetched['createTime']\n    @model_explanation = GoogleInSpec::VertexAI::Property::ModelEvaluationSliceModelExplanation.new(@fetched['modelExplanation'], to_s)\n    @name = @fetched['name']\n    @metrics = @fetched['metrics']\n    @slice = GoogleInSpec::VertexAI::Property::ModelEvaluationSliceSlice.new(@fetched['slice'], to_s)\n    @metrics_schema_uri = @fetched['metricsSchemaUri']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ModelEvaluationSlice #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_model_evaluation_slices.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIModelEvaluationSlices < GcpResourceBase\n  name 'google_vertex_ai_model_evaluation_slices'\n  desc 'ModelEvaluationSlice plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:model_explanations, field: :model_explanation)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:metrics, field: :metrics)\n  filter_table_config.add(:slices, field: :slice)\n  filter_table_config.add(:metrics_schema_uris, field: :metrics_schema_uri)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('modelEvaluationSlices')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'modelExplanation' => ->(obj) { [:model_explanation, GoogleInSpec::VertexAI::Property::ModelEvaluationSliceModelExplanation.new(obj['modelExplanation'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'metrics' => ->(obj) { [:metrics, obj['metrics']] },\n      'slice' => ->(obj) { [:slice, GoogleInSpec::VertexAI::Property::ModelEvaluationSliceSlice.new(obj['slice'], to_s)] },\n      'metricsSchemaUri' => ->(obj) { [:metrics_schema_uri, obj['metricsSchemaUri']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/slices'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_models.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIModels < GcpResourceBase\n  name 'google_vertex_ai_models'\n  desc 'Model plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:model_source_infos, field: :model_source_info)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:deployed_models, field: :deployed_models)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:explanation_specs, field: :explanation_spec)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:pipeline_jobs, field: :pipeline_job)\n  filter_table_config.add(:predict_schemata, field: :predict_schemata)\n  filter_table_config.add(:version_update_times, field: :version_update_time)\n  filter_table_config.add(:supported_export_formats, field: :supported_export_formats)\n  filter_table_config.add(:original_model_infos, field: :original_model_info)\n  filter_table_config.add(:metadata_artifacts, field: :metadata_artifact)\n  filter_table_config.add(:supported_input_storage_formats, field: :supported_input_storage_formats)\n  filter_table_config.add(:metadata_schema_uris, field: :metadata_schema_uri)\n  filter_table_config.add(:container_specs, field: :container_spec)\n  filter_table_config.add(:version_ids, field: :version_id)\n  filter_table_config.add(:artifact_uris, field: :artifact_uri)\n  filter_table_config.add(:training_pipelines, field: :training_pipeline)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:supported_deployment_resources_types, field: :supported_deployment_resources_types)\n  filter_table_config.add(:supported_output_storage_formats, field: :supported_output_storage_formats)\n  filter_table_config.add(:version_aliases, field: :version_aliases)\n  filter_table_config.add(:version_create_times, field: :version_create_time)\n  filter_table_config.add(:version_descriptions, field: :version_description)\n  filter_table_config.add(:labels, field: :labels)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('models')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'modelSourceInfo' => ->(obj) { [:model_source_info, GoogleInSpec::VertexAI::Property::ModelModelSourceInfo.new(obj['modelSourceInfo'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'deployedModels' => ->(obj) { [:deployed_models, GoogleInSpec::VertexAI::Property::ModelDeployedModelsArray.parse(obj['deployedModels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'explanationSpec' => ->(obj) { [:explanation_spec, GoogleInSpec::VertexAI::Property::ModelExplanationSpec.new(obj['explanationSpec'], to_s)] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::ModelEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'pipelineJob' => ->(obj) { [:pipeline_job, obj['pipelineJob']] },\n      'predictSchemata' => ->(obj) { [:predict_schemata, GoogleInSpec::VertexAI::Property::ModelPredictSchemata.new(obj['predictSchemata'], to_s)] },\n      'versionUpdateTime' => ->(obj) { [:version_update_time, obj['versionUpdateTime']] },\n      'supportedExportFormats' => ->(obj) { [:supported_export_formats, GoogleInSpec::VertexAI::Property::ModelSupportedExportFormatsArray.parse(obj['supportedExportFormats'], to_s)] },\n      'originalModelInfo' => ->(obj) { [:original_model_info, GoogleInSpec::VertexAI::Property::ModelOriginalModelInfo.new(obj['originalModelInfo'], to_s)] },\n      'metadataArtifact' => ->(obj) { [:metadata_artifact, obj['metadataArtifact']] },\n      'supportedInputStorageFormats' => ->(obj) { [:supported_input_storage_formats, obj['supportedInputStorageFormats']] },\n      'metadataSchemaUri' => ->(obj) { [:metadata_schema_uri, obj['metadataSchemaUri']] },\n      'containerSpec' => ->(obj) { [:container_spec, GoogleInSpec::VertexAI::Property::ModelContainerSpec.new(obj['containerSpec'], to_s)] },\n      'versionId' => ->(obj) { [:version_id, obj['versionId']] },\n      'artifactUri' => ->(obj) { [:artifact_uri, obj['artifactUri']] },\n      'trainingPipeline' => ->(obj) { [:training_pipeline, obj['trainingPipeline']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'supportedDeploymentResourcesTypes' => ->(obj) { [:supported_deployment_resources_types, obj['supportedDeploymentResourcesTypes']] },\n      'supportedOutputStorageFormats' => ->(obj) { [:supported_output_storage_formats, obj['supportedOutputStorageFormats']] },\n      'versionAliases' => ->(obj) { [:version_aliases, obj['versionAliases']] },\n      'versionCreateTime' => ->(obj) { [:version_create_time, obj['versionCreateTime']] },\n      'versionDescription' => ->(obj) { [:version_description, obj['versionDescription']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::ModelLabels.new(obj['labels'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/models'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_models_evaluation.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/modelsevaluation_explanation_specs'\nrequire 'google/vertexai/property/modelsevaluation_model_explanation'\nrequire 'google/vertexai/property/modelsevaluation_model_explanation_mean_attributions'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIModelsEvaluation < GcpResourceBase\n  name 'google_vertex_ai_models_evaluation'\n  desc 'ModelsEvaluation'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :data_item_schema_uri\n  attr_reader :metadata\n  attr_reader :metrics_schema_uri\n  attr_reader :create_time\n  attr_reader :annotation_schema_uri\n  attr_reader :metrics\n  attr_reader :explanation_specs\n  attr_reader :slice_dimensions\n  attr_reader :model_explanation\n  attr_reader :name\n  attr_reader :display_name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @data_item_schema_uri = @fetched['dataItemSchemaUri']\n    @metadata = @fetched['metadata']\n    @metrics_schema_uri = @fetched['metricsSchemaUri']\n    @create_time = @fetched['createTime']\n    @annotation_schema_uri = @fetched['annotationSchemaUri']\n    @metrics = @fetched['metrics']\n    @explanation_specs = GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsArray.parse(@fetched['explanationSpecs'], to_s)\n    @slice_dimensions = @fetched['sliceDimensions']\n    @model_explanation = GoogleInSpec::VertexAI::Property::ModelsEvaluationModelExplanation.new(@fetched['modelExplanation'], to_s)\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"ModelsEvaluation #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_models_evaluations.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIModelsEvaluations < GcpResourceBase\n  name 'google_vertex_ai_models_evaluations'\n  desc 'ModelsEvaluation plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:data_item_schema_uris, field: :data_item_schema_uri)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:metrics_schema_uris, field: :metrics_schema_uri)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:annotation_schema_uris, field: :annotation_schema_uri)\n  filter_table_config.add(:metrics, field: :metrics)\n  filter_table_config.add(:explanation_specs, field: :explanation_specs)\n  filter_table_config.add(:slice_dimensions, field: :slice_dimensions)\n  filter_table_config.add(:model_explanations, field: :model_explanation)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :display_name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('modelEvaluations')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'dataItemSchemaUri' => ->(obj) { [:data_item_schema_uri, obj['dataItemSchemaUri']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'metricsSchemaUri' => ->(obj) { [:metrics_schema_uri, obj['metricsSchemaUri']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'annotationSchemaUri' => ->(obj) { [:annotation_schema_uri, obj['annotationSchemaUri']] },\n      'metrics' => ->(obj) { [:metrics, obj['metrics']] },\n      'explanationSpecs' => ->(obj) { [:explanation_specs, GoogleInSpec::VertexAI::Property::ModelsEvaluationExplanationSpecsArray.parse(obj['explanationSpecs'], to_s)] },\n      'sliceDimensions' => ->(obj) { [:slice_dimensions, obj['sliceDimensions']] },\n      'modelExplanation' => ->(obj) { [:model_explanation, GoogleInSpec::VertexAI::Property::ModelsEvaluationModelExplanation.new(obj['modelExplanation'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/evaluations'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_nas_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/nasjob_encryption_spec'\nrequire 'google/vertexai/property/nasjob_error'\nrequire 'google/vertexai/property/nasjob_labels'\nrequire 'google/vertexai/property/nasjob_nas_job_output'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_search_trials'\nrequire 'google/vertexai/property/nasjob_nas_job_output_multi_trial_job_output_train_trials'\nrequire 'google/vertexai/property/nasjob_nas_job_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_metric'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_search_trial_spec_search_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasstsstjswp_specs'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjsbo_directory'\nrequire 'google/vertexai/property/nasjob_nas_job_spec_multi_trial_algorithm_spec_train_trial_spec_train_trial_job_spec_scheduling'\nrequire 'google/vertexai/property/nasjob_njsmtasttsttjswp_specs'\n\n# A provider to manage Vertex AI resources.\nclass VertexAINasJob < GcpResourceBase\n  name 'google_vertex_ai_nas_job'\n  desc 'NasJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :nas_job_output\n  attr_reader :name\n  attr_reader :end_time\n  attr_reader :error\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :display_name\n  attr_reader :nas_job_spec\n  attr_reader :enable_restricted_image_training\n  attr_reader :start_time\n  attr_reader :encryption_spec\n  attr_reader :labels\n  attr_reader :update_time\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @nas_job_output = GoogleInSpec::VertexAI::Property::NasJobNasJobOutput.new(@fetched['nasJobOutput'], to_s)\n    @name = @fetched['name']\n    @end_time = @fetched['endTime']\n    @error = GoogleInSpec::VertexAI::Property::NasJobError.new(@fetched['error'], to_s)\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @display_name = @fetched['displayName']\n    @nas_job_spec = GoogleInSpec::VertexAI::Property::NasJobNasJobSpec.new(@fetched['nasJobSpec'], to_s)\n    @enable_restricted_image_training = @fetched['enableRestrictedImageTraining']\n    @start_time = @fetched['startTime']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::NasJobEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @labels = GoogleInSpec::VertexAI::Property::NasJobLabels.new(@fetched['labels'], to_s)\n    @update_time = @fetched['updateTime']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NasJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_nas_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAINasJobs < GcpResourceBase\n  name 'google_vertex_ai_nas_jobs'\n  desc 'NasJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:nas_job_outputs, field: :nas_job_output)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:nas_job_specs, field: :nas_job_spec)\n  filter_table_config.add(:enable_restricted_image_trainings, field: :enable_restricted_image_training)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:update_times, field: :update_time)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('nasJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'nasJobOutput' => ->(obj) { [:nas_job_output, GoogleInSpec::VertexAI::Property::NasJobNasJobOutput.new(obj['nasJobOutput'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::NasJobError.new(obj['error'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'nasJobSpec' => ->(obj) { [:nas_job_spec, GoogleInSpec::VertexAI::Property::NasJobNasJobSpec.new(obj['nasJobSpec'], to_s)] },\n      'enableRestrictedImageTraining' => ->(obj) { [:enable_restricted_image_training, obj['enableRestrictedImageTraining']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::NasJobEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::NasJobLabels.new(obj['labels'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/nasJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_nas_jobs_nas_trial_detail.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_search_trial_final_measurement_metrics'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement'\nrequire 'google/vertexai/property/nasjobsnastrialdetail_train_trial_final_measurement_metrics'\n\n# A provider to manage Vertex AI resources.\nclass VertexAINasJobsNasTrialDetail < GcpResourceBase\n  name 'google_vertex_ai_nas_jobs_nas_trial_detail'\n  desc 'NasJobsNasTrialDetail'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :parameters\n  attr_reader :name\n  attr_reader :search_trial\n  attr_reader :train_trial\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @parameters = @fetched['parameters']\n    @name = @fetched['name']\n    @search_trial = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailSearchTrial.new(@fetched['searchTrial'], to_s)\n    @train_trial = GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailTrainTrial.new(@fetched['trainTrial'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"NasJobsNasTrialDetail #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_nas_jobs_nas_trial_details.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAINasJobsNasTrialDetails < GcpResourceBase\n  name 'google_vertex_ai_nas_jobs_nas_trial_details'\n  desc 'NasJobsNasTrialDetail plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:parameters, field: :parameters)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:search_trials, field: :search_trial)\n  filter_table_config.add(:train_trials, field: :train_trial)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('nasTrialDetails')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'parameters' => ->(obj) { [:parameters, obj['parameters']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'searchTrial' => ->(obj) { [:search_trial, GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailSearchTrial.new(obj['searchTrial'], to_s)] },\n      'trainTrial' => ->(obj) { [:train_trial, GoogleInSpec::VertexAI::Property::NasJobsNasTrialDetailTrainTrial.new(obj['trainTrial'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/nasTrialDetails'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_pipeline_job.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/pipelinejob_encryption_spec'\nrequire 'google/vertexai/property/pipelinejob_error'\nrequire 'google/vertexai/property/pipelinejob_job_detail'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/pipelinejob_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/pipelinejob_job_detail_task_details'\nrequire 'google/vertexai/property/pipelinejob_labels'\nrequire 'google/vertexai/property/pipelinejob_pipeline_spec'\nrequire 'google/vertexai/property/pipelinejob_runtime_config'\nrequire 'google/vertexai/property/pipelinejob_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/pipelinejob_runtime_config_parameter_values'\nrequire 'google/vertexai/property/pipelinejob_runtime_config_parameters'\nrequire 'google/vertexai/property/pipelinejob_template_metadata'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIPipelineJob < GcpResourceBase\n  name 'google_vertex_ai_pipeline_job'\n  desc 'PipelineJob'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :encryption_spec\n  attr_reader :end_time\n  attr_reader :error\n  attr_reader :update_time\n  attr_reader :job_detail\n  attr_reader :template_metadata\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :name\n  attr_reader :schedule_name\n  attr_reader :reserved_ip_ranges\n  attr_reader :start_time\n  attr_reader :service_account\n  attr_reader :display_name\n  attr_reader :template_uri\n  attr_reader :pipeline_spec\n  attr_reader :network\n  attr_reader :labels\n  attr_reader :runtime_config\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @encryption_spec = GoogleInSpec::VertexAI::Property::PipelineJobEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @end_time = @fetched['endTime']\n    @error = GoogleInSpec::VertexAI::Property::PipelineJobError.new(@fetched['error'], to_s)\n    @update_time = @fetched['updateTime']\n    @job_detail = GoogleInSpec::VertexAI::Property::PipelineJobJobDetail.new(@fetched['jobDetail'], to_s)\n    @template_metadata = GoogleInSpec::VertexAI::Property::PipelineJobTemplateMetadata.new(@fetched['templateMetadata'], to_s)\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @name = @fetched['name']\n    @schedule_name = @fetched['scheduleName']\n    @reserved_ip_ranges = @fetched['reservedIpRanges']\n    @start_time = @fetched['startTime']\n    @service_account = @fetched['serviceAccount']\n    @display_name = @fetched['displayName']\n    @template_uri = @fetched['templateUri']\n    @pipeline_spec = GoogleInSpec::VertexAI::Property::PipelineJobPipelineSpec.new(@fetched['pipelineSpec'], to_s)\n    @network = @fetched['network']\n    @labels = GoogleInSpec::VertexAI::Property::PipelineJobLabels.new(@fetched['labels'], to_s)\n    @runtime_config = GoogleInSpec::VertexAI::Property::PipelineJobRuntimeConfig.new(@fetched['runtimeConfig'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"PipelineJob #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_pipeline_jobs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIPipelineJobs < GcpResourceBase\n  name 'google_vertex_ai_pipeline_jobs'\n  desc 'PipelineJob plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:job_details, field: :job_detail)\n  filter_table_config.add(:template_metadata, field: :template_metadata)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:schedule_names, field: :schedule_name)\n  filter_table_config.add(:reserved_ip_ranges, field: :reserved_ip_ranges)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:service_accounts, field: :service_account)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:template_uris, field: :template_uri)\n  filter_table_config.add(:pipeline_specs, field: :pipeline_spec)\n  filter_table_config.add(:networks, field: :network)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:runtime_configs, field: :runtime_config)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('pipelineJobs')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::PipelineJobEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::PipelineJobError.new(obj['error'], to_s)] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'jobDetail' => ->(obj) { [:job_detail, GoogleInSpec::VertexAI::Property::PipelineJobJobDetail.new(obj['jobDetail'], to_s)] },\n      'templateMetadata' => ->(obj) { [:template_metadata, GoogleInSpec::VertexAI::Property::PipelineJobTemplateMetadata.new(obj['templateMetadata'], to_s)] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'scheduleName' => ->(obj) { [:schedule_name, obj['scheduleName']] },\n      'reservedIpRanges' => ->(obj) { [:reserved_ip_ranges, obj['reservedIpRanges']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'serviceAccount' => ->(obj) { [:service_account, obj['serviceAccount']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'templateUri' => ->(obj) { [:template_uri, obj['templateUri']] },\n      'pipelineSpec' => ->(obj) { [:pipeline_spec, GoogleInSpec::VertexAI::Property::PipelineJobPipelineSpec.new(obj['pipelineSpec'], to_s)] },\n      'network' => ->(obj) { [:network, obj['network']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::PipelineJobLabels.new(obj['labels'], to_s)] },\n      'runtimeConfig' => ->(obj) { [:runtime_config, GoogleInSpec::VertexAI::Property::PipelineJobRuntimeConfig.new(obj['runtimeConfig'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/pipelineJobs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_schedule.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_encryption_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_error'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_pipeline_run_context_metadata'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_job_detail_task_details'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_labels'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_pipeline_spec'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_input_artifacts'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameter_values'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_runtime_config_parameters'\nrequire 'google/vertexai/property/schedule_create_pipeline_job_request_pipeline_job_template_metadata'\nrequire 'google/vertexai/property/schedule_last_scheduled_run_response'\n\n# A provider to manage Vertex AI resources.\nclass VertexAISchedule < GcpResourceBase\n  name 'google_vertex_ai_schedule'\n  desc 'Schedule'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :started_run_count\n  attr_reader :allow_queueing\n  attr_reader :name\n  attr_reader :cron\n  attr_reader :last_pause_time\n  attr_reader :create_time\n  attr_reader :start_time\n  attr_reader :max_run_count\n  attr_reader :next_run_time\n  attr_reader :update_time\n  attr_reader :last_scheduled_run_response\n  attr_reader :last_resume_time\n  attr_reader :max_concurrent_run_count\n  attr_reader :state\n  attr_reader :create_pipeline_job_request\n  attr_reader :display_name\n  attr_reader :catch_up\n  attr_reader :end_time\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @started_run_count = @fetched['startedRunCount']\n    @allow_queueing = @fetched['allowQueueing']\n    @name = @fetched['name']\n    @cron = @fetched['cron']\n    @last_pause_time = @fetched['lastPauseTime']\n    @create_time = @fetched['createTime']\n    @start_time = @fetched['startTime']\n    @max_run_count = @fetched['maxRunCount']\n    @next_run_time = @fetched['nextRunTime']\n    @update_time = @fetched['updateTime']\n    @last_scheduled_run_response = GoogleInSpec::VertexAI::Property::ScheduleLastScheduledRunResponse.new(@fetched['lastScheduledRunResponse'], to_s)\n    @last_resume_time = @fetched['lastResumeTime']\n    @max_concurrent_run_count = @fetched['maxConcurrentRunCount']\n    @state = @fetched['state']\n    @create_pipeline_job_request = GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequest.new(@fetched['createPipelineJobRequest'], to_s)\n    @display_name = @fetched['displayName']\n    @catch_up = @fetched['catchUp']\n    @end_time = @fetched['endTime']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Schedule #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_schedules.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAISchedules < GcpResourceBase\n  name 'google_vertex_ai_schedules'\n  desc 'Schedule plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:started_run_counts, field: :started_run_count)\n  filter_table_config.add(:allow_queueings, field: :allow_queueing)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:crons, field: :cron)\n  filter_table_config.add(:last_pause_times, field: :last_pause_time)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:max_run_counts, field: :max_run_count)\n  filter_table_config.add(:next_run_times, field: :next_run_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:last_scheduled_run_responses, field: :last_scheduled_run_response)\n  filter_table_config.add(:last_resume_times, field: :last_resume_time)\n  filter_table_config.add(:max_concurrent_run_counts, field: :max_concurrent_run_count)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_pipeline_job_requests, field: :create_pipeline_job_request)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:catch_ups, field: :catch_up)\n  filter_table_config.add(:end_times, field: :end_time)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('schedules')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'startedRunCount' => ->(obj) { [:started_run_count, obj['startedRunCount']] },\n      'allowQueueing' => ->(obj) { [:allow_queueing, obj['allowQueueing']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'cron' => ->(obj) { [:cron, obj['cron']] },\n      'lastPauseTime' => ->(obj) { [:last_pause_time, obj['lastPauseTime']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'maxRunCount' => ->(obj) { [:max_run_count, obj['maxRunCount']] },\n      'nextRunTime' => ->(obj) { [:next_run_time, obj['nextRunTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'lastScheduledRunResponse' => ->(obj) { [:last_scheduled_run_response, GoogleInSpec::VertexAI::Property::ScheduleLastScheduledRunResponse.new(obj['lastScheduledRunResponse'], to_s)] },\n      'lastResumeTime' => ->(obj) { [:last_resume_time, obj['lastResumeTime']] },\n      'maxConcurrentRunCount' => ->(obj) { [:max_concurrent_run_count, obj['maxConcurrentRunCount']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createPipelineJobRequest' => ->(obj) { [:create_pipeline_job_request, GoogleInSpec::VertexAI::Property::ScheduleCreatePipelineJobRequest.new(obj['createPipelineJobRequest'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'catchUp' => ->(obj) { [:catch_up, obj['catchUp']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/schedules'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_studies.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIStudys < GcpResourceBase\n  name 'google_vertex_ai_studies'\n  desc 'Study plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:study_specs, field: :study_spec)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:inactive_reasons, field: :inactive_reason)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('studies')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'studySpec' => ->(obj) { [:study_spec, obj['studySpec']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'inactiveReason' => ->(obj) { [:inactive_reason, obj['inactiveReason']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/studies'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_studies_trial.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/studiestrial_final_measurement'\nrequire 'google/vertexai/property/studiestrial_final_measurement_metrics'\nrequire 'google/vertexai/property/studiestrial_measurements'\nrequire 'google/vertexai/property/studiestrial_parameters'\nrequire 'google/vertexai/property/studiestrial_web_access_uris'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIStudiesTrial < GcpResourceBase\n  name 'google_vertex_ai_studies_trial'\n  desc 'StudiesTrial'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :measurements\n  attr_reader :start_time\n  attr_reader :end_time\n  attr_reader :parameters\n  attr_reader :name\n  attr_reader :infeasible_reason\n  attr_reader :final_measurement\n  attr_reader :client_id\n  attr_reader :custom_job\n  attr_reader :state\n  attr_reader :web_access_uris\n  attr_reader :id\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @measurements = GoogleInSpec::VertexAI::Property::StudiesTrialMeasurementsArray.parse(@fetched['measurements'], to_s)\n    @start_time = @fetched['startTime']\n    @end_time = @fetched['endTime']\n    @parameters = GoogleInSpec::VertexAI::Property::StudiesTrialParametersArray.parse(@fetched['parameters'], to_s)\n    @name = @fetched['name']\n    @infeasible_reason = @fetched['infeasibleReason']\n    @final_measurement = GoogleInSpec::VertexAI::Property::StudiesTrialFinalMeasurement.new(@fetched['finalMeasurement'], to_s)\n    @client_id = @fetched['clientId']\n    @custom_job = @fetched['customJob']\n    @state = @fetched['state']\n    @web_access_uris = GoogleInSpec::VertexAI::Property::StudiesTrialWebAccessUris.new(@fetched['webAccessUris'], to_s)\n    @id = @fetched['id']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"StudiesTrial #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_studies_trials.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAIStudiesTrials < GcpResourceBase\n  name 'google_vertex_ai_studies_trials'\n  desc 'StudiesTrial plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:measurements, field: :measurements)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:parameters, field: :parameters)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:infeasible_reasons, field: :infeasible_reason)\n  filter_table_config.add(:final_measurements, field: :final_measurement)\n  filter_table_config.add(:client_ids, field: :client_id)\n  filter_table_config.add(:custom_jobs, field: :custom_job)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:web_access_uris, field: :web_access_uris)\n  filter_table_config.add(:ids, field: :id)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('trials')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'measurements' => ->(obj) { [:measurements, GoogleInSpec::VertexAI::Property::StudiesTrialMeasurementsArray.parse(obj['measurements'], to_s)] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'parameters' => ->(obj) { [:parameters, GoogleInSpec::VertexAI::Property::StudiesTrialParametersArray.parse(obj['parameters'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'infeasibleReason' => ->(obj) { [:infeasible_reason, obj['infeasibleReason']] },\n      'finalMeasurement' => ->(obj) { [:final_measurement, GoogleInSpec::VertexAI::Property::StudiesTrialFinalMeasurement.new(obj['finalMeasurement'], to_s)] },\n      'clientId' => ->(obj) { [:client_id, obj['clientId']] },\n      'customJob' => ->(obj) { [:custom_job, obj['customJob']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'webAccessUris' => ->(obj) { [:web_access_uris, GoogleInSpec::VertexAI::Property::StudiesTrialWebAccessUris.new(obj['webAccessUris'], to_s)] },\n      'id' => ->(obj) { [:id, obj['id']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/trials'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_study.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Vertex AI resources.\nclass VertexAIStudy < GcpResourceBase\n  name 'google_vertex_ai_study'\n  desc 'Study'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :study_spec\n  attr_reader :name\n  attr_reader :display_name\n  attr_reader :state\n  attr_reader :create_time\n  attr_reader :inactive_reason\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @study_spec = @fetched['studySpec']\n    @name = @fetched['name']\n    @display_name = @fetched['displayName']\n    @state = @fetched['state']\n    @create_time = @fetched['createTime']\n    @inactive_reason = @fetched['inactiveReason']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Study #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboard.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/tensorboard_encryption_spec'\nrequire 'google/vertexai/property/tensorboard_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAITensorboard < GcpResourceBase\n  name 'google_vertex_ai_tensorboard'\n  desc 'Tensorboard'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :name\n  attr_reader :is_default\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :blob_storage_path_prefix\n  attr_reader :etag\n  attr_reader :create_time\n  attr_reader :run_count\n  attr_reader :encryption_spec\n  attr_reader :display_name\n  attr_reader :description\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @name = @fetched['name']\n    @is_default = @fetched['isDefault']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::VertexAI::Property::TensorboardLabels.new(@fetched['labels'], to_s)\n    @blob_storage_path_prefix = @fetched['blobStoragePathPrefix']\n    @etag = @fetched['etag']\n    @create_time = @fetched['createTime']\n    @run_count = @fetched['runCount']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::TensorboardEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @display_name = @fetched['displayName']\n    @description = @fetched['description']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"Tensorboard #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboard_experiment_run.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/tensorboardexperimentrun_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAITensorboardExperimentRun < GcpResourceBase\n  name 'google_vertex_ai_tensorboard_experiment_run'\n  desc 'TensorboardExperimentRun'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :display_name\n  attr_reader :update_time\n  attr_reader :description\n  attr_reader :etag\n  attr_reader :labels\n  attr_reader :create_time\n  attr_reader :name\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @display_name = @fetched['displayName']\n    @update_time = @fetched['updateTime']\n    @description = @fetched['description']\n    @etag = @fetched['etag']\n    @labels = GoogleInSpec::VertexAI::Property::TensorboardExperimentRunLabels.new(@fetched['labels'], to_s)\n    @create_time = @fetched['createTime']\n    @name = @fetched['name']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TensorboardExperimentRun #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboard_experiment_run_time_series_resource.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\n\n# A provider to manage Vertex AI resources.\nclass VertexAITensorboardExperimentRunTimeSeriesResource < GcpResourceBase\n  name 'google_vertex_ai_tensorboard_experiment_run_time_series_resource'\n  desc 'TensorboardExperimentRunTimeSeriesResource'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :plugin_name\n  attr_reader :plugin_data\n  attr_reader :description\n  attr_reader :etag\n  attr_reader :display_name\n  attr_reader :update_time\n  attr_reader :create_time\n  attr_reader :name\n  attr_reader :metadata\n  attr_reader :value_type\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @plugin_name = @fetched['pluginName']\n    @plugin_data = @fetched['pluginData']\n    @description = @fetched['description']\n    @etag = @fetched['etag']\n    @display_name = @fetched['displayName']\n    @update_time = @fetched['updateTime']\n    @create_time = @fetched['createTime']\n    @name = @fetched['name']\n    @metadata = @fetched['metadata']\n    @value_type = @fetched['valueType']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TensorboardExperimentRunTimeSeriesResource #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboard_experiment_run_time_series_resources.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAITensorboardExperimentRunTimeSeriesResources < GcpResourceBase\n  name 'google_vertex_ai_tensorboard_experiment_run_time_series_resources'\n  desc 'TensorboardExperimentRunTimeSeriesResource plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:plugin_names, field: :plugin_name)\n  filter_table_config.add(:plugin_data, field: :plugin_data)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:metadata, field: :metadata)\n  filter_table_config.add(:value_types, field: :value_type)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tensorboardTimeSeries')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'pluginName' => ->(obj) { [:plugin_name, obj['pluginName']] },\n      'pluginData' => ->(obj) { [:plugin_data, obj['pluginData']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'metadata' => ->(obj) { [:metadata, obj['metadata']] },\n      'valueType' => ->(obj) { [:value_type, obj['valueType']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/timeSeries'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboard_experiment_runs.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAITensorboardExperimentRuns < GcpResourceBase\n  name 'google_vertex_ai_tensorboard_experiment_runs'\n  desc 'TensorboardExperimentRun plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:names, field: :name)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tensorboardRuns')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::TensorboardExperimentRunLabels.new(obj['labels'], to_s)] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/runs'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboards.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAITensorboards < GcpResourceBase\n  name 'google_vertex_ai_tensorboards'\n  desc 'Tensorboard plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:is_defaults, field: :is_default)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:blob_storage_path_prefixes, field: :blob_storage_path_prefix)\n  filter_table_config.add(:etags, field: :etag)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:run_counts, field: :run_count)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:descriptions, field: :description)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tensorboards')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'name' => ->(obj) { [:name, obj['name']] },\n      'isDefault' => ->(obj) { [:is_default, obj['isDefault']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::TensorboardLabels.new(obj['labels'], to_s)] },\n      'blobStoragePathPrefix' => ->(obj) { [:blob_storage_path_prefix, obj['blobStoragePathPrefix']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'runCount' => ->(obj) { [:run_count, obj['runCount']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::TensorboardEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'description' => ->(obj) { [:description, obj['description']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/tensorboards'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboards_experiment.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/tensorboardsexperiment_labels'\n\n# A provider to manage Vertex AI resources.\nclass VertexAITensorboardsExperiment < GcpResourceBase\n  name 'google_vertex_ai_tensorboards_experiment'\n  desc 'TensorboardsExperiment'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :description\n  attr_reader :source\n  attr_reader :display_name\n  attr_reader :create_time\n  attr_reader :update_time\n  attr_reader :labels\n  attr_reader :name\n  attr_reader :etag\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @description = @fetched['description']\n    @source = @fetched['source']\n    @display_name = @fetched['displayName']\n    @create_time = @fetched['createTime']\n    @update_time = @fetched['updateTime']\n    @labels = GoogleInSpec::VertexAI::Property::TensorboardsExperimentLabels.new(@fetched['labels'], to_s)\n    @name = @fetched['name']\n    @etag = @fetched['etag']\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TensorboardsExperiment #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_tensorboards_experiments.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAITensorboardsExperiments < GcpResourceBase\n  name 'google_vertex_ai_tensorboards_experiments'\n  desc 'TensorboardsExperiment plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:descriptions, field: :description)\n  filter_table_config.add(:sources, field: :source)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:etags, field: :etag)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('tensorboardExperiments')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'description' => ->(obj) { [:description, obj['description']] },\n      'source' => ->(obj) { [:source, obj['source']] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::TensorboardsExperimentLabels.new(obj['labels'], to_s)] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'etag' => ->(obj) { [:etag, obj['etag']] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/experiments'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_training_pipeline.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nrequire 'google/vertexai/property/trainingpipeline_encryption_spec'\nrequire 'google/vertexai/property/trainingpipeline_error'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_bigquery_destination'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_filter_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_fraction_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_gcs_destination'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_predefined_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_stratified_split'\nrequire 'google/vertexai/property/trainingpipeline_input_data_config_timestamp_split'\nrequire 'google/vertexai/property/trainingpipeline_labels'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_env'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_container_spec_ports'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_deployed_models'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_encryption_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_inputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_metadata_outputs'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_example_gcs_source'\nrequire 'google/vertexai/property/trainingpipeline_mtuespeegsg_source'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_examples_presets'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_integrated_gradients_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigabb_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasg_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespigasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_sampled_shapley_attribution'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxabb_config'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_explanation_spec_parameters_xrai_attribution_smooth_grad_config'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_mtuespxasgcfnsn_sigma'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_labels'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_model_source_info'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_original_model_info'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_predict_schemata'\nrequire 'google/vertexai/property/trainingpipeline_model_to_upload_supported_export_formats'\n\n# A provider to manage Vertex AI resources.\nclass VertexAITrainingPipeline < GcpResourceBase\n  name 'google_vertex_ai_training_pipeline'\n  desc 'TrainingPipeline'\n  supports platform: 'gcp'\n\n  attr_reader :params\n  attr_reader :end_time\n  attr_reader :error\n  attr_reader :display_name\n  attr_reader :name\n  attr_reader :input_data_config\n  attr_reader :parent_model\n  attr_reader :update_time\n  attr_reader :state\n  attr_reader :labels\n  attr_reader :training_task_definition\n  attr_reader :start_time\n  attr_reader :create_time\n  attr_reader :training_task_metadata\n  attr_reader :training_task_inputs\n  attr_reader :model_id\n  attr_reader :encryption_spec\n  attr_reader :model_to_upload\n\n  def initialize(params)\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @fetched = @connection.fetch(product_url(params[:beta]), resource_base_url, params, 'Get')\n    parse unless @fetched.nil?\n  end\n\n  def parse\n    @end_time = @fetched['endTime']\n    @error = GoogleInSpec::VertexAI::Property::TrainingPipelineError.new(@fetched['error'], to_s)\n    @display_name = @fetched['displayName']\n    @name = @fetched['name']\n    @input_data_config = GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfig.new(@fetched['inputDataConfig'], to_s)\n    @parent_model = @fetched['parentModel']\n    @update_time = @fetched['updateTime']\n    @state = @fetched['state']\n    @labels = GoogleInSpec::VertexAI::Property::TrainingPipelineLabels.new(@fetched['labels'], to_s)\n    @training_task_definition = @fetched['trainingTaskDefinition']\n    @start_time = @fetched['startTime']\n    @create_time = @fetched['createTime']\n    @training_task_metadata = @fetched['trainingTaskMetadata']\n    @training_task_inputs = @fetched['trainingTaskInputs']\n    @model_id = @fetched['modelId']\n    @encryption_spec = GoogleInSpec::VertexAI::Property::TrainingPipelineEncryptionSpec.new(@fetched['encryptionSpec'], to_s)\n    @model_to_upload = GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUpload.new(@fetched['modelToUpload'], to_s)\n  end\n\n  def exists?\n    !@fetched.nil?\n  end\n\n  def to_s\n    \"TrainingPipeline #{@params[:name]}\"\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{name}}'\n  end\nend\n"
  },
  {
    "path": "libraries/google_vertex_ai_training_pipelines.rb",
    "content": "# frozen_string_literal: false\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\nrequire 'gcp_backend'\nclass VertexAITrainingPipelines < GcpResourceBase\n  name 'google_vertex_ai_training_pipelines'\n  desc 'TrainingPipeline plural resource'\n  supports platform: 'gcp'\n\n  attr_reader :table\n\n  filter_table_config = FilterTable.create\n\n  filter_table_config.add(:end_times, field: :end_time)\n  filter_table_config.add(:errors, field: :error)\n  filter_table_config.add(:display_names, field: :display_name)\n  filter_table_config.add(:names, field: :name)\n  filter_table_config.add(:input_data_configs, field: :input_data_config)\n  filter_table_config.add(:parent_models, field: :parent_model)\n  filter_table_config.add(:update_times, field: :update_time)\n  filter_table_config.add(:states, field: :state)\n  filter_table_config.add(:labels, field: :labels)\n  filter_table_config.add(:training_task_definitions, field: :training_task_definition)\n  filter_table_config.add(:start_times, field: :start_time)\n  filter_table_config.add(:create_times, field: :create_time)\n  filter_table_config.add(:training_task_metadata, field: :training_task_metadata)\n  filter_table_config.add(:training_task_inputs, field: :training_task_inputs)\n  filter_table_config.add(:model_ids, field: :model_id)\n  filter_table_config.add(:encryption_specs, field: :encryption_spec)\n  filter_table_config.add(:model_to_uploads, field: :model_to_upload)\n\n  filter_table_config.connect(self, :table)\n\n  def initialize(params = {})\n    super(params.merge({ use_http_transport: true }))\n    @params = params\n    @table = fetch_wrapped_resource('trainingPipelines')\n  end\n\n  def fetch_wrapped_resource(wrap_path)\n    # fetch_resource returns an array of responses (to handle pagination)\n    result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get')\n    return if result.nil?\n\n    # Conversion of string -> object hash to symbol -> object hash that InSpec needs\n    converted = []\n    result.each do |response|\n      next if response.nil? || !response.key?(wrap_path)\n      response[wrap_path].each do |hash|\n        hash_with_symbols = {}\n        hash.each_key do |key|\n          name, value = transform(key, hash)\n          hash_with_symbols[name] = value\n        end\n        converted.push(hash_with_symbols)\n      end\n    end\n\n    converted\n  end\n\n  def transform(key, value)\n    return transformers[key].call(value) if transformers.key?(key)\n\n    [key.to_sym, value]\n  end\n\n  def transformers\n    {\n      'endTime' => ->(obj) { [:end_time, obj['endTime']] },\n      'error' => ->(obj) { [:error, GoogleInSpec::VertexAI::Property::TrainingPipelineError.new(obj['error'], to_s)] },\n      'displayName' => ->(obj) { [:display_name, obj['displayName']] },\n      'name' => ->(obj) { [:name, obj['name']] },\n      'inputDataConfig' => ->(obj) { [:input_data_config, GoogleInSpec::VertexAI::Property::TrainingPipelineInputDataConfig.new(obj['inputDataConfig'], to_s)] },\n      'parentModel' => ->(obj) { [:parent_model, obj['parentModel']] },\n      'updateTime' => ->(obj) { [:update_time, obj['updateTime']] },\n      'state' => ->(obj) { [:state, obj['state']] },\n      'labels' => ->(obj) { [:labels, GoogleInSpec::VertexAI::Property::TrainingPipelineLabels.new(obj['labels'], to_s)] },\n      'trainingTaskDefinition' => ->(obj) { [:training_task_definition, obj['trainingTaskDefinition']] },\n      'startTime' => ->(obj) { [:start_time, obj['startTime']] },\n      'createTime' => ->(obj) { [:create_time, obj['createTime']] },\n      'trainingTaskMetadata' => ->(obj) { [:training_task_metadata, obj['trainingTaskMetadata']] },\n      'trainingTaskInputs' => ->(obj) { [:training_task_inputs, obj['trainingTaskInputs']] },\n      'modelId' => ->(obj) { [:model_id, obj['modelId']] },\n      'encryptionSpec' => ->(obj) { [:encryption_spec, GoogleInSpec::VertexAI::Property::TrainingPipelineEncryptionSpec.new(obj['encryptionSpec'], to_s)] },\n      'modelToUpload' => ->(obj) { [:model_to_upload, GoogleInSpec::VertexAI::Property::TrainingPipelineModelToUpload.new(obj['modelToUpload'], to_s)] },\n    }\n  end\n\n  private\n\n  def product_url(_ = nil)\n    'https://{{region}}-aiplatform.googleapis.com/v1/'\n  end\n\n  def resource_base_url\n    '{{parent}}/trainingPipelines'\n  end\nend\n"
  },
  {
    "path": "sonar-project.properties",
    "content": "# SonarQube configuration file\n#\n# Sample Ruby Sonar file - https://docs.sonarsource.com/sonarqube-server/10.6/analyzing-source-code/languages/ruby/\n# properties defined in https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/analysis-parameters/\n#\n# view this repo in sonar: https://sonar.progress.com/dashboard?id=inspec_inspec-gcp_c2d41690-b668-4802-9695-0b72208e9220\n# Required metadata\nsonar.projectKey=inspec_inspec-gcp_c2d41690-b668-4802-9695-0b72208e9220\n\n# project name is 3 parts: \"Chef\" + \"<area/product>\" + \"<repo>\" with underscores between\n# <area/product> choices: Chef-Agents | Chef-Automate | Chef360 | Chef-Habitat | Chef-Infra-Server | Chef-Shared-Services\n# example project name: chef/chef-vault repo would be Chef_Chef-Infra-Client_chef-vault\nsonar.projectName=Chef-Inspec-GCP\n# sonar.projectVersion=1.0\n# sonar.projectDescription=\n\n# Language - https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/languages/overview/ go, ruby, rust\nsonar.language=ruby\nsonar.sources=lib\n# sonar.sources=lib <-- for Ruby, match this with the /spec directory for tests & SARIF output directory for test results/rcov\n# sonar.exclusions=**/*_test.go, **/*.js, **/*.sql, **/*.yml, **/*.yaml; may exclude **/vendor/** for Ruby\nsonar.exclusions=**/*.java,**/*.js,vendor/*\n\n# Unit tests\nsonar.tests=test\n# was spec/**/*.rb \n# sonar.test.inclusions=**/*_test.go **/*Test.java\n# Coverage report\nsonar.ruby.coverage.framework=RSpec\nsonar.ruby.coverage.reportPaths=coverage/coverage.json \n# ^^^ comma-delimited paths to Rubocop reports, SimpleCov, or RSpec plugin reports (coverage/coverage.json <-- default output for simpleCov)\nsonar.coverage.exclusions=lib/bundles/inspec-compliance/*,examples/**/*,test/**,lib/plugins/*/test/**/*,test/unit/**/*,test/unit/*,test/functional/*,test/fixtures/**/*,test/artifacts/**/*\\\n\n# sonar.ruby.rubocop.reportPaths=./rubocop-report.json -- import Ruby Rubocop\n# sonar.dependencyCheck.htmlReportPath=./dependency-check-report.html -- import OWASP dependency check report\n# sonar.externalIssuesReportPaths\tComma-delimited list of paths to generic issue reports. \n# sonar.sarifReportPaths\tComma-delimited list of paths to SARIF issue reports.\n\n# Additional settings\n# sonar.qualitygate.wait=false\n# sonar.qualitygate.timeout=300\n\n# skip C-language processor\nsonar.c.file.suffixes=-\nsonar.cpp.file.suffixes=-\nsonar.objc.file.suffixes=-"
  },
  {
    "path": "test/integration/build/gcp-mm.tf",
    "content": "variable \"ssl_policy\" {\n  type = any\n}\n\nvariable \"topic\" {\n  type = any\n}\n\nvariable \"subscription\" {\n  type = any\n}\n\nvariable \"managed_zone\" {\n\ttype = any\n}\n\nvariable \"record_set\" {\n\ttype = any\n}\n\nvariable \"instance_group_manager\" {\n  type = any\n}\n\nvariable \"autoscaler\" {\n  type = any\n}\n\nvariable \"target_pool\" {\n  type = any\n}\n\nvariable \"trigger\" {\n  type = any\n}\n\nvariable \"health_check\" {\n  type = any\n}\n\nvariable \"backend_service\" {\n  type = any\n}\n\nvariable \"http_health_check\" {\n  type = any\n}\n\nvariable \"https_health_check\" {\n  type = any\n}\n\nvariable \"instance_template\" {\n  type = any\n}\n\nvariable \"global_address\" {\n  type = any\n}\n\nvariable \"url_map\" {\n  type = any\n}\n\nvariable \"http_proxy\" {\n  type = any\n}\n\nvariable \"global_forwarding_rule\" {\n  type = any\n}\n\nvariable \"target_tcp_proxy\" {\n  type = any\n}\n\nvariable \"route\" {\n  type = any\n}\n\nvariable \"router\" {\n  type = any\n}\n\nvariable \"snapshot\" {\n  type = any\n}\n\nvariable \"https_proxy\" {\n  type = any\n}\n\nvariable \"ssl_certificate\" {\n  type = any\n}\n\nvariable \"dataset\" {\n  type = any\n}\n\nvariable \"bigquery_table\" {\n  type = any\n}\n\nvariable \"repository\" {\n  type = any\n}\n\nvariable \"folder\" {\n  type = any\n}\n\nvariable \"gcp_organization_id\" {\n  type = string\n  default = \"none\"\n}\n\nvariable \"cloudfunction\" {\n  type = any\n}\n\nvariable \"backend_bucket\" {\n  type = any\n}\n\nvariable \"gcp_cloud_function_region\" {}\n\nvariable \"regional_node_pool\" {\n  type = any\n}\n\nvariable \"region_backend_service_health_check\" {\n  type = any\n}\n\nvariable \"region_health_check\" {\n  type = any\n}\n\nvariable \"region_backend_service\" {\n  type = any\n}\n\nvariable \"org_sink\" {\n  type = any\n}\n\nvariable \"standardappversion\" {\n  type = any\n}\n\nvariable \"ml_model\" {\n  type = any\n}\n\nvariable \"dataproc_cluster\" {\n  type = any\n}\n\nvariable \"folder_exclusion\" {\n  type = any\n}\n\nvariable \"filestore_instance\" {\n  type = any\n}\n\nvariable \"folder_sink\" {\n  type = any\n}\n\nvariable \"runtimeconfig_config\" {\n  type = any\n}\n\nvariable \"runtimeconfig_variable\" {\n  type = any\n}\n\nvariable \"redis\" {\n  type = any\n}\n\nvariable \"network_endpoint_group\" {\n  type = any\n}\nvariable \"global_network_endpoint_group\" {\n  type = any\n}\n\nvariable \"node_template\" {\n  type = any\n}\n\nvariable \"node_group\" {\n  type = any\n}\n\nvariable \"router_nat\" {\n  type = any\n}\n\nvariable \"service\" {\n  type = any\n}\n\nvariable \"spannerinstance\" {\n  type = any\n}\n\nvariable \"spannerdatabase\" {\n  type = any\n}\n\nvariable \"scheduler_job\" {\n  type = any\n}\n\nvariable \"project_location_repository\" {\n  type = any\n}\n\nvariable \"cloud_composer_v1\" {\n  type = any\n}\n\nvariable \"compute_service_attachment_conf\" {\n  type = any\n}\n\n\nvariable \"apigee_organization_envgroup_attachment\" {\n  type = any\n}\n\nvariable \"organization_envgroup\" {\n  type = any\n}\nvariable \"vpn_gateway\" {\n  type = any\n}\nvariable \"region_network_endpoint_group\" {\n  type = any\n}\nvariable \"secrets_manager_v1\" {\n  type = any\n}\nvariable \"compute_machine_images\" {\n  type = any\n}\nvariable \"network_attachments\" {\n  type = any\n}\nvariable \"compute_target_vpn_gateway\" {\n  type = any\n}\nvariable \"bigtable_instance_cluster\" {\n  type = any\n}\nvariable \"dataproc_metastore_service\" {\n  type = any\n}\nvariable \"dataproc_metastore_federation\" {\n  type = any\n}\nvariable \"data_fusion_instance\" {\n  type = any\n}\nvariable \"cloud_run_jobs\" {\n  type = any\n}\nvariable \"dataproc_serverless_batches\" {\n  type = any\n}\nvariable \"monitoring_group\" {\n  type = any\n}\nresource \"google_compute_ssl_policy\" \"custom-ssl-policy\" {\n  name            = var.ssl_policy[\"name\"]\n  min_tls_version = var.ssl_policy[\"min_tls_version\"]\n  profile         = var.ssl_policy[\"profile\"]\n  custom_features = [var.ssl_policy[\"custom_feature\"], var.ssl_policy[\"custom_feature2\"]]\n  project         = var.gcp_project_id\n}\n\nresource \"google_pubsub_topic\" \"topic\" {\n  project = var.gcp_project_id\n  name    = var.topic[\"name\"]\n}\n\nresource \"google_pubsub_subscription\" \"default\" {\n  project              = var.gcp_project_id\n  name                 = var.subscription[\"name\"]\n  topic                = google_pubsub_topic.topic.name\n  ack_deadline_seconds = var.subscription[\"ack_deadline_seconds\"]\n}\n\nresource \"google_dns_managed_zone\" \"prod\" {\n  name        = var.managed_zone[\"name\"]\n  dns_name    = var.managed_zone[\"dns_name\"]\n  description = var.managed_zone[\"description\"]\n\n  labels = {\n    key = var.managed_zone[\"label_value\"]\n  }\n  project = var.gcp_project_id\n}\n\nresource \"google_dns_record_set\" \"a\" {\n  name = var.record_set[\"name\"]\n  managed_zone = google_dns_managed_zone.prod.name\n  type = var.record_set[\"type\"]\n  ttl  = var.record_set[\"ttl\"]\n\n  rrdatas = [var.record_set[\"rrdatas1\"], var.record_set[\"rrdatas2\"]]\n  project = var.gcp_project_id\n}\n\nresource \"google_compute_instance_group_manager\" \"gcp-inspec-igm\" {\n  project           = var.gcp_project_id\n  zone              = var.gcp_zone\n  name              = var.instance_group_manager[\"name\"]\n  version {\n    instance_template = google_compute_instance_template.default.self_link\n  }\n  base_instance_name        = var.instance_group_manager[\"base_instance_name\"]\n  target_pools = []\n  target_size  = 0\n  named_port {\n    name = var.instance_group_manager[\"named_port_name\"]\n    port = var.instance_group_manager[\"named_port_port\"]\n  }\n}\n\nresource \"google_compute_autoscaler\" \"gcp-inspec-autoscaler\" {\n  project = var.gcp_project_id\n  name    = var.autoscaler[\"name\"]\n  zone    = var.gcp_zone\n  target  = google_compute_instance_group_manager.gcp-inspec-igm.self_link\n\n  autoscaling_policy {\n    max_replicas    = var.autoscaler[\"max_replicas\"]\n    min_replicas    = var.autoscaler[\"min_replicas\"]\n    cooldown_period = var.autoscaler[\"cooldown_period\"]\n\n    cpu_utilization {\n      target = var.autoscaler[\"cpu_utilization_target\"]\n    }\n  }\n}\n\nresource \"google_compute_target_pool\" \"gcp-inspec-target-pool\" {\n  project = var.gcp_project_id\n  name = var.target_pool[\"name\"]\n  session_affinity = var.target_pool[\"session_affinity\"]\n\n  instances = [\n    \"${var.gcp_zone}/${var.gcp_ext_vm_name}\",\n  ]\n}\n\nresource \"google_cloudbuild_trigger\" \"gcp-inspec-cloudbuild-trigger\" {\n  project = var.gcp_project_id\n  trigger_template {\n    branch_name = var.trigger[\"trigger_template_branch\"]\n    project_id  = var.trigger[\"trigger_template_project\"]\n    repo_name   = var.trigger[\"trigger_template_repo\"]\n  }\n  filename = var.trigger[\"filename\"]\n}\n\nresource \"google_compute_health_check\" \"gcp-inspec-health-check\" {\n project = var.gcp_project_id\n name = var.health_check[\"name\"]\n\n timeout_sec = var.health_check[\"timeout_sec\"]\n check_interval_sec = var.health_check[\"check_interval_sec\"]\n\n tcp_health_check {\n   port = var.health_check[\"tcp_health_check_port\"]\n }\n}\n\nresource \"google_compute_region_health_check\" \"tcp-region-health-check\" {\n  project = var.gcp_project_id\n  name     = var.region_health_check[\"name\"]\n  region   = var.region_health_check[\"region\"]\n  timeout_sec        = 1\n  check_interval_sec = 1\n\n  tcp_health_check {\n    port = \"80\"\n  }\n}\n\nresource \"google_compute_backend_service\" \"gcp-inspec-backend-service\" {\n  project     = var.gcp_project_id\n  name        = var.backend_service[\"name\"]\n  description = var.backend_service[\"description\"]\n  port_name   = var.backend_service[\"port_name\"]\n  protocol    = var.backend_service[\"protocol\"]\n  timeout_sec = var.backend_service[\"timeout_sec\"]\n  enable_cdn  = var.backend_service[\"enable_cdn\"]\n\n  backend {\n    group = google_compute_instance_group_manager.gcp-inspec-igm.instance_group\n  }\n\n  health_checks = [google_compute_health_check.gcp-inspec-health-check.self_link]\n}\n\nresource \"google_compute_health_check\" \"gcp-inspec-region-backend-service-hc\" {\n project = var.gcp_project_id\n name = var.region_backend_service_health_check[\"name\"]\n\n timeout_sec = var.region_backend_service_health_check[\"timeout_sec\"]\n check_interval_sec = var.region_backend_service_health_check[\"check_interval_sec\"]\n\n tcp_health_check {\n   port = var.region_backend_service_health_check[\"tcp_health_check_port\"]\n }\n}\n\nresource \"google_compute_region_backend_service\" \"gcp-inspec-region-backend-service\" {\n  project     = var.gcp_project_id\n  region      = var.gcp_location\n  name        = var.region_backend_service[\"name\"]\n  description = var.region_backend_service[\"description\"]\n  protocol    = var.region_backend_service[\"protocol\"]\n  timeout_sec = var.region_backend_service[\"timeout_sec\"]\n\n  health_checks = [google_compute_health_check.gcp-inspec-region-backend-service-hc.self_link]\n}\n\nresource \"google_compute_http_health_check\" \"gcp-inspec-http-health-check\" {\n  project      = var.gcp_project_id\n  name         = var.http_health_check[\"name\"]\n  request_path = var.http_health_check[\"request_path\"]\n\n  timeout_sec        = var.http_health_check[\"timeout_sec\"]\n  check_interval_sec = var.http_health_check[\"check_interval_sec\"]\n}\n\nresource \"google_compute_https_health_check\" \"gcp-inspec-https-health-check\" {\n  project      = var.gcp_project_id\n  name         = var.https_health_check[\"name\"]\n  request_path = var.https_health_check[\"request_path\"]\n\n  timeout_sec         = var.https_health_check[\"timeout_sec\"]\n  check_interval_sec  = var.https_health_check[\"check_interval_sec\"]\n  unhealthy_threshold = var.https_health_check[\"unhealthy_threshold\"]\n}\n\nresource \"google_compute_instance_template\" \"gcp-inspec-instance-template\" {\n  project     = var.gcp_project_id\n  name        = var.instance_template[\"name\"]\n  description = var.instance_template[\"description\"]\n\n  tags = [var.instance_template[\"tag\"]]\n\n  instance_description = var.instance_template[\"instance_description\"]\n  machine_type         = var.instance_template[\"machine_type\"]\n  can_ip_forward       = var.instance_template[\"can_ip_forward\"]\n\n  scheduling {\n    automatic_restart   = var.instance_template[\"scheduling_automatic_restart\"]\n    on_host_maintenance = var.instance_template[\"scheduling_on_host_maintenance\"]\n  }\n\n  // Create a new boot disk from an image\n  disk {\n    source_image = var.instance_template[\"disk_source_image\"]\n    auto_delete  = var.instance_template[\"disk_auto_delete\"]\n    boot         = var.instance_template[\"disk_boot\"]\n  }\n\n  network_interface {\n    network = var.instance_template[\"network_interface_network\"]\n  }\n\n  service_account {\n    scopes = [var.instance_template[\"service_account_scope\"]]\n  }\n}\n\nresource \"google_compute_global_address\" \"gcp-inspec-global-address\" {\n  project = var.gcp_project_id\n  name = var.global_address[\"name\"]\n  ip_version = var.global_address[\"ip_version\"]\n}\n\nresource \"google_compute_url_map\" \"gcp-inspec-url-map\" {\n  project     = var.gcp_project_id\n  name        = var.url_map[\"name\"]\n  description = var.url_map[\"description\"]\n\n  default_service = google_compute_backend_service.gcp-inspec-backend-service.self_link\n\n  host_rule {\n    hosts        = [var.url_map[\"host_rule_host\"]]\n    path_matcher = var.url_map[\"path_matcher_name\"]\n  }\n\n  path_matcher {\n    name            = var.url_map[\"path_matcher_name\"]\n    default_service = google_compute_backend_service.gcp-inspec-backend-service.self_link\n\n    path_rule {\n      paths   = [var.url_map[\"path_rule_path\"]]\n      service = google_compute_backend_service.gcp-inspec-backend-service.self_link\n    }\n  }\n\n  test {\n    service = google_compute_backend_service.gcp-inspec-backend-service.self_link\n    host    = var.url_map[\"test_host\"]\n    path    = var.url_map[\"test_path\"]\n  }\n}\n\nresource \"google_compute_target_http_proxy\" \"gcp-inspec-http-proxy\" {\n  project     = var.gcp_project_id\n  name        = var.http_proxy[\"name\"]\n  url_map     = google_compute_url_map.gcp-inspec-url-map.self_link\n  description = var.http_proxy[\"description\"]\n}\n\nresource \"google_compute_global_forwarding_rule\" \"gcp-inspec-global-forwarding-rule\" {\n  project    = var.gcp_project_id\n  name       = var.global_forwarding_rule[\"name\"]\n  target     = google_compute_target_http_proxy.gcp-inspec-http-proxy.self_link\n  port_range = var.global_forwarding_rule[\"port_range\"]\n}\n\nresource \"google_compute_backend_service\" \"gcp-inspec-tcp-backend-service\" {\n  project       = var.gcp_project_id\n  name          = var.target_tcp_proxy[\"tcp_backend_service_name\"]\n  protocol      = \"TCP\"\n  timeout_sec   = 10\n\n  health_checks = [google_compute_health_check.gcp-inspec-health-check.self_link]\n}\n\nresource \"google_compute_target_tcp_proxy\" \"gcp-inspec-target-tcp-proxy\" {\n  project         = var.gcp_project_id\n  name            = var.target_tcp_proxy[\"name\"]\n  proxy_header    = var.target_tcp_proxy[\"proxy_header\"]\n  backend_service = google_compute_backend_service.gcp-inspec-tcp-backend-service.self_link\n}\n\nresource \"google_compute_route\" \"gcp-inspec-route\" {\n  project     = var.gcp_project_id\n  name        = var.route[\"name\"]\n  dest_range  = var.route[\"dest_range\"]\n  network     = google_compute_network.inspec-gcp-network.name\n  next_hop_ip = var.route[\"next_hop_ip\"]\n  priority    = var.route[\"priority\"]\n  # google_compute_route depends on next_hop_ip belonging to a subnetwork\n  # of the named network in this block. Since inspec-gcp-network does not\n  # automatically create subnetworks, we need to create a dependency so\n  # the route is not created before the subnetwork\n  depends_on  = [google_compute_subnetwork.inspec-gcp-subnetwork]\n}\n\nresource \"google_compute_router\" \"gcp-inspec-router\" {\n  project = var.gcp_project_id\n  name    = var.router[\"name\"]\n  network = google_compute_network.inspec-gcp-network.name\n  bgp {\n    asn               = var.router[\"bgp_asn\"]\n    advertise_mode    = var.router[\"bgp_advertise_mode\"]\n    advertised_groups = [var.router[\"bgp_advertised_group\"]]\n    advertised_ip_ranges {\n      range = var.router[\"bgp_advertised_ip_range1\"]\n    }\n    advertised_ip_ranges {\n      range = var.router[\"bgp_advertised_ip_range2\"]\n    }\n  }\n}\n\nresource \"google_compute_disk\" \"snapshot-disk\" {\n  project = var.gcp_project_id\n  name  = var.snapshot[\"disk_name\"]\n  type  = var.snapshot[\"disk_type\"]\n  zone  = var.gcp_zone\n  image = var.snapshot[\"disk_image\"]\n  labels = {\n    environment = \"generic_compute_disk_label\"\n  }\n}\n\nresource \"google_compute_snapshot\" \"gcp-inspec-snapshot\" {\n  project = var.gcp_project_id\n  name = var.snapshot[\"name\"]\n  source_disk = google_compute_disk.snapshot-disk.name\n  zone = var.gcp_zone\n}\n\nresource \"google_compute_ssl_certificate\" \"gcp-inspec-ssl-certificate\" {\n  project     = var.gcp_project_id\n  name        = var.ssl_certificate[\"name\"]\n  private_key = var.ssl_certificate[\"private_key\"]\n  certificate = var.ssl_certificate[\"certificate\"]\n  description = var.ssl_certificate[\"description\"]\n}\n\nresource \"google_compute_target_https_proxy\" \"gcp-inspec-https-proxy\" {\n  project     = var.gcp_project_id\n  name        = var.https_proxy[\"name\"]\n  url_map     = google_compute_url_map.gcp-inspec-url-map.self_link\n  description = var.https_proxy[\"description\"]\n  ssl_certificates = [google_compute_ssl_certificate.gcp-inspec-ssl-certificate.self_link]\n}\n\nresource \"google_bigquery_dataset\" \"gcp-inspec-dataset\" {\n  project                     = var.gcp_project_id\n  dataset_id                  = var.dataset[\"dataset_id\"]\n  friendly_name               = var.dataset[\"friendly_name\"]\n  description                 = var.dataset[\"description\"]\n  location                    = var.dataset[\"location\"]\n  default_table_expiration_ms = var.dataset[\"default_table_expiration_ms\"]\n\n  access {\n    role          = var.dataset[\"access_writer_role\"]\n    special_group = var.dataset[\"access_writer_special_group\"]\n  }\n\n  access {\n    role          = \"OWNER\"\n    special_group = \"projectOwners\"\n  }\n}\n\nresource \"google_bigquery_table\" \"gcp-inspec-bigquery-table\" {\n  project    = var.gcp_project_id\n  dataset_id = google_bigquery_dataset.gcp-inspec-dataset.dataset_id\n  table_id   = var.bigquery_table[\"table_id\"]\n\n  time_partitioning {\n    type = var.bigquery_table[\"time_partitioning_type\"]\n  }\n\n  description = var.bigquery_table[\"description\"]\n  expiration_time = var.bigquery_table[\"expiration_time\"]\n}\n\nresource \"google_sourcerepo_repository\" \"gcp-inspec-sourcerepo-repository\" {\n  project = var.gcp_project_id\n  name = var.repository[\"name\"]\n}\n\nresource \"google_folder\" \"inspec-gcp-folder\" {\n  count = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  display_name = var.folder[\"display_name\"]\n  parent       = \"organizations/${var.gcp_organization_id}\"\n}\n\nresource \"google_storage_bucket_object\" \"archive\" {\n  name   = \"index.js.zip\"\n  bucket = google_storage_bucket.generic-storage-bucket.name\n  source = \"../configuration/index.js.zip\"\n}\n\nresource \"google_cloudfunctions_function\" \"function\" {\n  project               = var.gcp_project_id\n  region                = var.gcp_cloud_function_region\n  name                  = var.cloudfunction[\"name\"]\n  description           = var.cloudfunction[\"description\"]\n  available_memory_mb   = var.cloudfunction[\"available_memory_mb\"]\n  source_archive_bucket = google_storage_bucket.generic-storage-bucket.name\n  source_archive_object = google_storage_bucket_object.archive.name\n  trigger_http          = var.cloudfunction[\"trigger_http\"]\n  timeout               = var.cloudfunction[\"timeout\"]\n  entry_point           = var.cloudfunction[\"entry_point\"]\n  runtime               = \"nodejs8\"\n\n  environment_variables = {\n    MY_ENV_VAR = var.cloudfunction[\"env_var_value\"]\n  }\n}\n\nresource \"google_compute_backend_bucket\" \"image_backend\" {\n  project     = var.gcp_project_id\n  name        = var.backend_bucket[\"name\"]\n  description = var.backend_bucket[\"description\"]\n  bucket_name = google_storage_bucket.generic-storage-bucket.name\n  enable_cdn  = var.backend_bucket[\"enable_cdn\"]\n}\n\nresource \"google_container_node_pool\" \"inspec-gcp-node-pool\" {\n  project    = var.gcp_project_id\n  name       = var.regional_node_pool[\"name\"]\n  location   = google_container_cluster.primary.location\n  cluster    = google_container_cluster.primary.name\n  node_count = var.regional_node_pool[\"node_count\"]\n}\n\nresource \"google_logging_organization_sink\" \"my-sink\" {\n  count       = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  name        = var.org_sink.name\n  org_id      = var.gcp_organization_id\n\n  # Can export to pubsub, cloud storage, or bigquery\n  destination = \"storage.googleapis.com/${google_storage_bucket.generic-storage-bucket.name}\"\n\n  # Log all WARN or higher severity messages relating to instances\n  filter      = var.org_sink.filter\n}\n\nvariable \"project_sink\" {\n  type = any\n}\n\nresource \"google_logging_project_sink\" \"project-logging-sink\" {\n  count = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  project = var.gcp_project_id\n\n  name = var.project_sink.name\n  destination = \"storage.googleapis.com/${google_storage_bucket.project-logging-bucket[0].name}\"\n\n  filter = var.project_sink.filter\n\n  unique_writer_identity = true\n}\n\nresource \"google_storage_bucket\" \"bucket\" {\n  name          = \"inspec-gcp-static-${var.gcp_project_id}\"\n  project       = var.gcp_project_id\n  location      = var.gcp_location\n  force_destroy = true\n\n  labels = {\n    \"key\" = \"value\"\n  }\n\n  retention_policy {\n    retention_period = 1000\n  }\n}\n\nresource \"google_storage_bucket_object\" \"object\" {\n  name   = \"hello-world.zip\"\n  bucket = google_storage_bucket.bucket.name\n  source = \"../configuration/hello-world.zip\"\n}\n\nresource \"google_app_engine_standard_app_version\" \"default\" {\n  count = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  project         = var.gcp_project_id\n  version_id      = var.standardappversion[\"version_id\"]\n  service         = var.standardappversion[\"service\"]\n  runtime         = var.standardappversion[\"runtime\"]\n  noop_on_destroy = true\n  entrypoint {\n    shell         = var.standardappversion[\"entrypoint\"]\n  }\n\n  deployment {\n    zip {\n      source_url = \"https://storage.googleapis.com/${google_storage_bucket.bucket.name}/hello-world.zip\"\n    }\n  }\n\n  env_variables = {\n    port          = var.standardappversion[\"port\"]\n  }\n}\n\nresource \"google_ml_engine_model\" \"inspec-gcp-model\" {\n  project                           = var.gcp_project_id\n  name                              = var.ml_model[\"name\"]\n  description                       = var.ml_model[\"description\"]\n  regions                           = [var.ml_model[\"region\"]]\n  online_prediction_logging         = var.ml_model[\"online_prediction_logging\"]\n  online_prediction_console_logging = var.ml_model[\"online_prediction_console_logging\"]\n}\n\nresource \"google_compute_firewall\" \"dataproc\" {\n  project = var.gcp_project_id\n  name    = \"dataproc-firewall\"\n  network = google_compute_network.dataproc.name\n\n  source_ranges = [\"10.128.0.0/9\"]\n  allow {\n    protocol = \"icmp\"\n  }\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"0-65535\"]\n  }\n  allow {\n    protocol = \"udp\"\n    ports    = [\"0-65535\"]\n  }\n}\n\nresource \"google_compute_network\" \"dataproc\" {\n  project = var.gcp_project_id\n  name    = \"dataproc-network\"\n}\n\nresource \"google_dataproc_cluster\" \"mycluster\" {\n  project = var.gcp_project_id\n  region  = var.gcp_location\n  name    = var.dataproc_cluster[\"name\"]\n\n  labels = {\n    \"${var.dataproc_cluster[\"label_key\"]}\" = var.dataproc_cluster[\"label_value\"]\n  }\n\n  cluster_config {\n    master_config {\n      num_instances = var.dataproc_cluster[\"config\"][\"master_config\"][\"num_instances\"]\n      machine_type  = var.dataproc_cluster[\"config\"][\"master_config\"][\"machine_type\"]\n      disk_config {\n        boot_disk_type    = var.dataproc_cluster[\"config\"][\"master_config\"][\"boot_disk_type\"]\n        boot_disk_size_gb = var.dataproc_cluster[\"config\"][\"master_config\"][\"boot_disk_size_gb\"]\n      }\n    }\n\n    worker_config {\n      num_instances    = var.dataproc_cluster[\"config\"][\"worker_config\"][\"num_instances\"]\n      machine_type     = var.dataproc_cluster[\"config\"][\"worker_config\"][\"machine_type\"]\n      disk_config {\n        boot_disk_size_gb = var.dataproc_cluster[\"config\"][\"worker_config\"][\"boot_disk_size_gb\"]\n        num_local_ssds    = var.dataproc_cluster[\"config\"][\"worker_config\"][\"num_local_ssds\"]\n      }\n    }\n\n    # Override or set some custom properties\n    software_config {\n      override_properties = {\n        \"${var.dataproc_cluster[\"config\"][\"software_config\"][\"prop_key\"]}\" = var.dataproc_cluster[\"config\"][\"software_config\"][\"prop_value\"]\n      }\n    }\n\n    gce_cluster_config {\n      network = google_compute_network.dataproc.self_link\n      tags    = [var.dataproc_cluster[\"config\"][\"gce_cluster_config\"][\"tag\"]]\n    }\n  }\n}\n\nresource \"google_logging_folder_exclusion\" \"my-exclusion\" {\n  count       = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  name        = var.folder_exclusion[\"name\"]\n  folder      = google_folder.inspec-gcp-folder.0.name\n\n  description = var.folder_exclusion[\"description\"]\n\n  filter      = var.folder_exclusion[\"filter\"]\n}\n\nvariable \"project_exclusion\" {\n  type = any\n}\n\nresource \"google_logging_project_exclusion\" \"project-exclusion\" {\n  count       = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  name        = var.project_exclusion[\"name\"]\n  project     = var.gcp_project_id\n\n  description = var.project_exclusion[\"description\"]\n\n  filter      = var.project_exclusion[\"filter\"]\n}\n\nresource \"google_filestore_instance\" \"instance\" {\n  project = var.gcp_project_id\n  name    = var.filestore_instance[\"name\"]\n  zone    = var.filestore_instance[\"zone\"]\n  tier    = var.filestore_instance[\"tier\"]\n\n  file_shares {\n    capacity_gb = var.filestore_instance[\"fileshare_capacity_gb\"]\n    name        = var.filestore_instance[\"fileshare_name\"]\n  }\n\n  networks {\n    network = var.filestore_instance[\"network_name\"]\n    modes   = [var.filestore_instance[\"network_mode\"]]\n  }\n}\n\nresource \"google_logging_folder_sink\" \"folder-sink\" {\n  count       = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  name        = var.folder_sink.name\n  folder      = google_folder.inspec-gcp-folder.0.name\n\n  destination = \"storage.googleapis.com/${google_storage_bucket.generic-storage-bucket.name}\"\n\n  filter      = var.folder_sink.filter\n}\n\nresource \"google_runtimeconfig_config\" \"inspec-runtime-config\" {\n  project = var.gcp_project_id\n  name = var.runtimeconfig_config[\"name\"]\n  description = var.runtimeconfig_config[\"description\"]\n}\n\nresource \"google_runtimeconfig_variable\" \"inspec-runtime-variable\" {\n  project = var.gcp_project_id\n  parent = google_runtimeconfig_config.inspec-runtime-config.name\n  name = var.runtimeconfig_variable[\"name\"]\n  text = var.runtimeconfig_variable[\"text\"]\n}\n\nresource \"google_redis_instance\" \"inspec-redis\" {\n  project        = var.gcp_project_id\n  name           = var.redis[\"name\"]\n  tier           = var.redis[\"tier\"]\n  memory_size_gb = var.redis[\"memory_size_gb\"]\n\n  location_id             = var.redis[\"location_id\"]\n  alternative_location_id = var.redis[\"alternative_location_id\"]\n\n  redis_version     = var.redis[\"redis_version\"]\n  display_name      = var.redis[\"display_name\"]\n  reserved_ip_range = var.redis[\"reserved_ip_range\"]\n\n  labels = {\n    \"${var.redis[\"label_key\"]}\" = var.redis[\"label_value\"]\n  }\n}\n\nresource \"google_compute_network_endpoint_group\" \"inspec-endpoint-group\" {\n  project      = var.gcp_project_id\n  name         = var.network_endpoint_group[\"name\"]\n  network      = google_compute_subnetwork.inspec-gcp-subnetwork.network\n  subnetwork   = google_compute_subnetwork.inspec-gcp-subnetwork.self_link\n  default_port = var.network_endpoint_group[\"default_port\"]\n  zone         = var.gcp_zone\n}\n\nresource \"google_compute_global_network_endpoint_group\" \"inspec-global-endpoint-group\" {\n  project      = var.gcp_project_id\n  name         = var.global_network_endpoint_group[\"name\"]\n  default_port = var.global_network_endpoint_group[\"default_port\"]\n  network_endpoint_type = var.global_network_endpoint_group[\"network_endpoint_type\"]\n}\n\ndata \"google_compute_node_types\" \"zone-node-type\" {\n  project = var.gcp_project_id\n  zone    = var.gcp_zone\n}\n\nresource \"google_compute_node_template\" \"inspec-template\" {\n  project = var.gcp_project_id\n  region = var.gcp_location\n\n  name = var.node_template[\"name\"]\n  node_type = data.google_compute_node_types.zone-node-type.names[0]\n\n  node_affinity_labels = {\n    \"${var.node_template[\"label_key\"]}\" = var.node_template[\"label_value\"]\n  }\n}\n\nresource \"google_compute_node_group\" \"inspec-node-group\" {\n  project = var.gcp_project_id\n  name = var.node_group[\"name\"]\n  zone = var.gcp_zone\n  description = var.node_group[\"description\"]\n\n  size = var.node_group[\"size\"]\n  node_template = google_compute_node_template.inspec-template.self_link\n}\n\nresource \"google_compute_router_nat\" \"inspec-nat\" {\n  project                            = var.gcp_project_id\n  name                               = var.router_nat[\"name\"]\n  router                             = google_compute_router.gcp-inspec-router.name\n  region                             = google_compute_router.gcp-inspec-router.region\n  nat_ip_allocate_option             = var.router_nat[\"nat_ip_allocate_option\"]\n  source_subnetwork_ip_ranges_to_nat = var.router_nat[\"source_subnetwork_ip_ranges_to_nat\"]\n  min_ports_per_vm                   = var.router_nat[\"min_ports_per_vm\"]\n\n  log_config {\n    enable = var.router_nat[\"log_config_enable\"]\n    filter = var.router_nat[\"log_config_filter\"]\n  }\n}\n\nresource \"google_project_service\" \"project\" {\n  project = var.gcp_project_id\n  service = var.service[\"name\"]\n}\n\nresource \"google_service_account\" \"spanner_service_account\" {\n  project = var.gcp_project_id\n  account_id   = \"${var.gcp_service_account_display_name}-sp\"\n  display_name = \"${var.gcp_service_account_display_name}-sp\"\n}\n\nresource \"google_service_account_key\" \"userkey\" {\n  service_account_id = google_service_account.spanner_service_account.name\n  public_key_type    = \"TYPE_X509_PEM_FILE\"\n}\n\nresource \"google_spanner_instance\" \"spanner_instance\" {\n  project      = var.gcp_project_id\n  config       = var.spannerinstance[\"config\"]\n  name         = var.spannerinstance[\"name\"]\n  display_name = var.spannerinstance[\"display_name\"]\n  num_nodes    = var.spannerinstance[\"num_nodes\"]\n  labels = {\n    \"${var.spannerinstance[\"label_key\"]}\" = var.spannerinstance[\"label_value\"]\n  }\n}\n\nresource \"google_spanner_instance_iam_binding\" \"instance\" {\n  project  = var.gcp_project_id\n  instance = google_spanner_instance.spanner_instance.name\n  role     = \"roles/editor\"\n\n  members = [\n    \"serviceAccount:${google_service_account.spanner_service_account.email}\",\n  ]\n}\n\nresource \"google_spanner_database\" \"database\" {\n  project      = var.gcp_project_id\n  instance     = google_spanner_instance.spanner_instance.name\n  name         = var.spannerdatabase[\"name\"]\n  ddl          = [var.spannerdatabase[\"ddl\"]]\n}\n\nresource \"google_cloud_scheduler_job\" \"job\" {\n  project  = var.gcp_project_id\n  region   = var.scheduler_job[\"region\"]\n  name     = var.scheduler_job[\"name\"]\n  description = var.scheduler_job[\"description\"]\n  schedule = var.scheduler_job[\"schedule\"]\n  time_zone = var.scheduler_job[\"time_zone\"]\n\n  http_target {\n    http_method = var.scheduler_job[\"http_method\"]\n    uri = var.scheduler_job[\"http_target_uri\"]\n  }\n}\n\nvariable \"service_perimeter\" {\n  type = any\n}\n\nresource \"google_access_context_manager_service_perimeter\" \"service-perimeter\" {\n  count  = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  parent = \"accessPolicies/${google_access_context_manager_access_policy.access-policy.0.name}\"\n  name   = \"accessPolicies/${google_access_context_manager_access_policy.access-policy.0.name}/servicePerimeters/${var.service_perimeter[\"name\"]}\"\n  title  = var.service_perimeter[\"title\"]\n  status {\n    restricted_services = [var.service_perimeter[\"restricted_service\"]]\n  }\n}\n\nresource \"google_access_context_manager_access_policy\" \"access-policy\" {\n  count  = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  parent = \"organizations/${var.gcp_organization_id}\"\n  title  = var.service_perimeter[\"policy_title\"]\n}\n\nresource \"google_access_context_manager_access_level\" \"access-level\" {\n  count  = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  parent = \"accessPolicies/${google_access_context_manager_access_policy.access-policy.0.name}\"\n  name   = \"accessPolicies/${google_access_context_manager_access_policy.access-policy.0.name}/accessLevels/os_lock\"\n  title  = \"os_lock\"\n  basic {\n    conditions {\n      device_policy {\n        require_screen_lock = true\n      }\n      regions = [\n    \"CH\",\n    \"IT\",\n    \"US\",\n      ]\n    }\n  }\n}\n\nvariable \"firewall\" {\n  type = any\n}\n\nresource \"google_compute_firewall\" \"mm-firewall\" {\n  project  = var.gcp_project_id\n  name = var.firewall[\"name\"]\n  enable_logging = true\n  network = google_compute_network.inspec-gcp-network.name\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"80\", \"8080\", \"1000-2000\"]\n  }\n\n  source_tags = [var.firewall[\"source_tag\"]]\n}\n\nvariable \"address\" {\n  type = any\n}\n\nresource \"google_compute_address\" \"internal_with_subnet_and_address\" {\n  project      = var.gcp_project_id\n  name         = var.address[\"name\"]\n  subnetwork   = google_compute_subnetwork.inspec-gcp-subnetwork.self_link\n  address_type = var.address[\"address_type\"]\n  address      = var.address[\"address\"]\n  region       = var.gcp_location\n}\n\nvariable \"instance_group\" {\n  type = any\n}\n\nresource \"google_compute_instance_group\" \"inspec-instance-group\" {\n  project     = var.gcp_project_id\n  zone        = var.gcp_zone\n  name        = var.instance_group[\"name\"]\n  description = var.instance_group[\"description\"]\n\n  named_port {\n    name = var.instance_group[\"named_port_name\"]\n    port = var.instance_group[\"named_port_port\"]\n  }\n}\n\nvariable \"instance\" {\n  type = any\n}\n\nresource \"google_compute_instance\" \"inspec-instance\" {\n  project      = var.gcp_project_id\n  zone         = var.gcp_zone\n  name         = var.instance[\"name\"]\n  machine_type = var.instance[\"machine_type\"]\n\n  tags = [var.instance[\"tag_1\"], var.instance[\"tag_2\"]]\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-9\"\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n\n    access_config {\n      // Ephemeral IP\n    }\n  }\n\n  metadata = {\n    \"${var.instance[\"metadata_key\"]}\" = var.instance[\"metadata_value\"]\n  }\n\n  metadata_startup_script = var.instance[\"startup_script\"]\n\n  service_account {\n    scopes = [var.instance[\"sa_scope\"]]\n  }\n}\n\nvariable \"network\" {\n  type = any\n}\n\nresource \"google_compute_network\" \"inspec-network\" {\n  project      = var.gcp_project_id\n  name         = var.network[\"name\"]\n  routing_mode = var.network[\"routing_mode\"]\n}\n\nvariable \"subnetwork\" {\n  type = any\n}\n\nresource \"google_compute_subnetwork\" \"subnet-with-logging\" {\n  project       = var.gcp_project_id\n  region        = var.gcp_location\n  name          = var.subnetwork[\"name\"]\n  ip_cidr_range = var.subnetwork[\"ip_cidr_range\"]\n  network       = google_compute_network.inspec-network.self_link\n\n  log_config {\n    aggregation_interval = var.subnetwork[\"log_interval\"]\n    flow_sampling        = var.subnetwork[\"log_sampling\"]\n    metadata             = var.subnetwork[\"log_metadata\"]\n  }\n}\n\nvariable \"rigm\" {\n  type = any\n}\n\nvariable \"sql_connect\" {\n  type = any\n}\n\nresource \"google_compute_region_instance_group_manager\" \"inspec-rigm\" {\n  project                    = var.gcp_project_id\n  region                     = var.gcp_location\n  name                       = var.rigm[\"name\"]\n\n  base_instance_name         = var.rigm[\"base_instance_name\"]\n\n  version {\n    instance_template = google_compute_instance_template.gcp-inspec-instance-template.self_link\n  }\n\n  target_pools = [google_compute_target_pool.gcp-inspec-target-pool.self_link]\n  target_size  = var.rigm[\"target_size\"]\n\n  named_port {\n    name = var.rigm[\"named_port_name\"]\n    port = var.rigm[\"named_port_port\"]\n  }\n\n  auto_healing_policies {\n    health_check      = google_compute_health_check.gcp-inspec-health-check.self_link\n    initial_delay_sec = var.rigm[\"healing_delay\"]\n  }\n}\n\nvariable \"vpn_tunnel\" {\n  type = any\n}\n\nresource \"google_compute_vpn_tunnel\" \"tunnel1\" {\n  project       = var.gcp_project_id\n  name          = var.vpn_tunnel[\"name\"]\n  peer_ip       = var.vpn_tunnel[\"peer_ip\"]\n  shared_secret = var.vpn_tunnel[\"shared_secret\"]\n\n  remote_traffic_selector = [\"0.0.0.0/0\"]\n  local_traffic_selector  = [\"0.0.0.0/0\"]\n  target_vpn_gateway = google_compute_vpn_gateway.inspec-gcp-vpn-gateway.self_link\n\n  depends_on = [\n    google_compute_forwarding_rule.inspec-gcp-fr-esp,\n    google_compute_forwarding_rule.inspec-gcp-fr-udp500,\n    google_compute_forwarding_rule.inspec-gcp-fr-udp4500,\n  ]\n}\n\nvariable \"alert_policy\" {\n  type = any\n}\n\nresource \"google_monitoring_alert_policy\" \"alert_policy\" {\n  project      = var.gcp_project_id\n  display_name = var.alert_policy[\"display_name\"]\n  combiner     = var.alert_policy[\"combiner\"]\n  conditions {\n    display_name = var.alert_policy[\"condition_display_name\"]\n    condition_threshold {\n      filter     = var.alert_policy[\"condition_filter\"]\n      duration   = var.alert_policy[\"condition_duration\"]\n      comparison = var.alert_policy[\"condition_comparison\"]\n      aggregations {\n        alignment_period   = \"60s\"\n        per_series_aligner = \"ALIGN_RATE\"\n      }\n    }\n  }\n}\n\nvariable \"dns_managed_zone\" {\n  type = any\n}\n\nvariable \"gcp_dns_zone_name\" {}\n\nresource \"google_dns_managed_zone\" \"example-zone\" {\n  project     = var.gcp_project_id\n  name        = var.dns_managed_zone[\"name\"]\n  dns_name    = \"${var.gcp_dns_zone_name}\"\n  description = var.dns_managed_zone[\"description\"]\n  dnssec_config {\n    state = var.dns_managed_zone[\"dnssec_config_state\"]\n    default_key_specs {\n      algorithm = \"rsasha256\"\n      key_type = \"zoneSigning\"\n      key_length = 2048\n    }\n    default_key_specs {\n      algorithm = \"rsasha512\"\n      key_type = \"keySigning\"\n      key_length = 2048\n    }\n  }\n}\n\nvariable \"logging_metric\" {\n  type = any\n}\n\nresource \"google_logging_metric\" \"logging_metric\" {\n  project = var.gcp_project_id\n  name    = var.logging_metric[\"name\"]\n  filter  = var.logging_metric[\"filter\"]\n  metric_descriptor {\n    metric_kind = var.logging_metric[\"metric_kind\"]\n    value_type  = var.logging_metric[\"value_type\"]\n  }\n}\n\nvariable \"compute_image\" {\n  type = any\n}\n\nresource \"google_compute_image\" \"example\" {\n  project = var.gcp_project_id\n  name    = var.compute_image[\"name\"]\n\n  raw_disk {\n    source = var.compute_image[\"source\"]\n  }\n}\n\nvariable \"gcp_organization_iam_custom_role_id\" {}\n\nresource \"google_organization_iam_custom_role\" \"generic_org_iam_custom_role\" {\n  count       = \"${var.gcp_organization_id == \"\" ? 0 : var.gcp_enable_privileged_resources}\"\n  org_id      = var.gcp_organization_id\n  role_id     = var.gcp_organization_iam_custom_role_id\n  title       = \"GCP Inspec Generic Organization IAM Custom Role\"\n  description = \"Custom role allowing to list IAM roles only\"\n  permissions = [\"iam.roles.list\"]\n}\n\nvariable \"security_policy\" {\n  type = any\n}\n\nresource \"google_compute_security_policy\" \"policy\" {\n  project = var.gcp_project_id\n  name = var.security_policy[\"name\"]\n\n  rule {\n    action   = var.security_policy[\"action\"]\n    priority = var.security_policy[\"priority\"]\n    match {\n      versioned_expr = \"SRC_IPS_V1\"\n      config {\n        src_ip_ranges = [var.security_policy[\"ip_range\"]]\n      }\n    }\n    description = var.security_policy[\"description\"]\n  }\n\n  rule {\n    action   = \"allow\"\n    priority = \"2147483647\"\n    match {\n      versioned_expr = \"SRC_IPS_V1\"\n      config {\n        src_ip_ranges = [\"*\"]\n      }\n    }\n    description = \"default rule\"\n  }\n}\n\nvariable \"memcache_instance\" {\n  type = any\n}\n\nresource \"google_compute_network\" \"memcache_network\" {\n  provider = google-beta\n  project = var.gcp_project_id\n  name = \"inspec-gcp-memcache\"\n}\n\nresource \"google_compute_global_address\" \"service_range\" {\n  provider = google-beta\n  project = var.gcp_project_id\n  name          = \"inspec-gcp-memcache\"\n  purpose       = \"VPC_PEERING\"\n  address_type  = \"INTERNAL\"\n  prefix_length = 16\n  network       = google_compute_network.memcache_network.id\n}\n\nresource \"google_service_networking_connection\" \"private_service_connection\" {\n  provider = google-beta\n  network                 = google_compute_network.memcache_network.id\n  service                 = \"servicenetworking.googleapis.com\"\n  reserved_peering_ranges = [google_compute_global_address.service_range.name]\n}\n\nresource \"google_memcache_instance\" \"instance\" {\n  provider = google-beta\n  name = var.memcache_instance[\"name\"]\n  project = var.gcp_project_id\n  region = var.gcp_location\n  authorized_network = google_service_networking_connection.private_service_connection.network\n\n  node_config {\n    cpu_count      = 1\n    memory_size_mb = 1024\n  }\n  node_count = 1\n}\n\nresource \"google_compute_router\" \"gcr\" {\n  project = var.gcp_project_id\n  name    = \"router\"\n  network = \"test\"\n  bgp {\n    asn = 16550\n  }\n}\nresource \"google_compute_external_vpn_gateway\" \"external_gateway\" {\n  name            = \"external-gateway\"\n  redundancy_type = \"SINGLE_IP_INTERNALLY_REDUNDANT\"\n  description     = \"An externally managed VPN gateway\"\n  project         = var.gcp_project_id\n  interface {\n    id         = 0\n    ip_address = \"8.8.8.8\"\n  }\n}\nresource \"google_compute_interconnect_attachment\" \"on_prem\" {\n  name                     = \"on-prem-attachment\"\n  edge_availability_domain = \"AVAILABILITY_DOMAIN_1\"\n  type                     = \"PARTNER\"\n  router                   = google_compute_router.gcp-inspec-router.id\n  mtu                      = 1500\n}\n\nresource \"google_sql_ssl_cert\" \"client_cert\" {\n  project = var.gcp_project_id\n  common_name = var.sql_connect[\"common_name\"]\n  instance    = var.gcp_db_instance_name\n}\n\n\nresource \"google_data_loss_prevention_stored_info_type\" \"basic\" {\n  parent = \"projects/my-project-name\"\n  description = \"Description\"\n  display_name = \"Displayname\"\n\n  regex {\n    pattern = \"patient\"\n    group_indexes = [2]\n  }\n}\n\nresource \"google_data_loss_prevention_inspect_template\" \"basic\" {\n  parent = \"projects/my-project-name\"\n  description = \"My description\"\n  display_name = \"display_name\"\n\n  inspect_config {\n    info_types {\n      name = \"EMAIL_ADDRESS\"\n    }\n    info_types {\n      name = \"PERSON_NAME\"\n    }\n    info_types {\n      name = \"LAST_NAME\"\n    }\n    info_types {\n      name = \"DOMAIN_NAME\"\n    }\n    info_types {\n      name = \"PHONE_NUMBER\"\n    }\n    info_types {\n      name = \"FIRST_NAME\"\n    }\n\n    min_likelihood = \"UNLIKELY\"\n    rule_set {\n      info_types {\n        name = \"EMAIL_ADDRESS\"\n      }\n      rules {\n        exclusion_rule {\n          regex {\n            pattern = \".+@example.com\"\n          }\n          matching_type = \"MATCHING_TYPE_FULL_MATCH\"\n        }\n      }\n    }\n    rule_set {\n      info_types {\n        name = \"EMAIL_ADDRESS\"\n      }\n      info_types {\n        name = \"DOMAIN_NAME\"\n      }\n      info_types {\n        name = \"PHONE_NUMBER\"\n      }\n      info_types {\n        name = \"PERSON_NAME\"\n      }\n      info_types {\n        name = \"FIRST_NAME\"\n      }\n      rules {\n        exclusion_rule {\n          dictionary {\n            word_list {\n              words = [\"TEST\"]\n            }\n          }\n          matching_type = \"MATCHING_TYPE_PARTIAL_MATCH\"\n        }\n      }\n    }\n\n    rule_set {\n      info_types {\n        name = \"PERSON_NAME\"\n      }\n      rules {\n        hotword_rule {\n          hotword_regex {\n            pattern = \"patient\"\n          }\n          proximity {\n            window_before = 50\n          }\n          likelihood_adjustment {\n            fixed_likelihood = \"VERY_LIKELY\"\n          }\n        }\n      }\n    }\n\n    limits {\n      max_findings_per_item    = 10\n      max_findings_per_request = 50\n      max_findings_per_info_type {\n        max_findings = \"75\"\n        info_type {\n          name = \"PERSON_NAME\"\n        }\n      }\n      max_findings_per_info_type {\n        max_findings = \"80\"\n        info_type {\n          name = \"LAST_NAME\"\n        }\n      }\n    }\n  }\n}\nvariable \"compute_image_family_view_name\" {\n  default = \"test\"\n}\nvariable \"compute_image_family_image_name\" {\n  default = \"image-1\"\n}\nvariable \"compute_image_family_source_disk\" {\n  default = \"projects/ppradhan/zones/us-central1-a/disks/inspec-image-1\"\n}\n\nresource \"google_compute_image\" \"image_family_view\" {\n  project = var.gcp_project_id\n  name    = var.compute_image_family_image_name\n  source_disk = var.compute_image_family_source_disk\n  family = var.compute_image_family_view_name\n}\n\nresource \"google_storage_bucket\" \"bucket_delete_unique_221_11111\" {\n  name     = \"vertex-bucket_delete\"\n  location = \"us-central1\"\n  uniform_bucket_level_access = true\n  project = \"ppradhan\"\n}\n\n# The sample data comes from the following link:\n# https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#specify-namespaces-tokens\nresource \"google_storage_bucket_object\" \"data\" {\n  name   = \"contents/data.json\"\n  bucket = google_storage_bucket.bucket_delete_unique_221_11111.name\n  content = <<EOF\n{\"id\": \"42\", \"embedding\": [0.5, 1.0], \"restricts\": [{\"namespace\": \"class\", \"allow\": [\"cat\", \"pet\"]},{\"namespace\": \"category\", \"allow\": [\"feline\"]}]}\n{\"id\": \"43\", \"embedding\": [0.6, 1.0], \"restricts\": [{\"namespace\": \"class\", \"allow\": [\"dog\", \"pet\"]},{\"namespace\": \"category\", \"allow\": [\"canine\"]}]}\nEOF\n}\nresource \"google_vertex_ai_index\" \"index\" {\n  labels = {\n    foo = \"bar\"\n  }\n  region   = \"us-central1\"\n  display_name = \"test-index\"\n  description = \"index for test\"\n  project = \"ppradhan\"\n  metadata {\n    contents_delta_uri = \"gs://${google_storage_bucket.bucket_delete_unique_221_11111.name}/contents\"\n    config {\n      dimensions = 2\n      shard_size = \"SHARD_SIZE_LARGE\"\n      distance_measure_type = \"COSINE_DISTANCE\"\n      feature_norm_type = \"UNIT_L2_NORM\"\n      algorithm_config {\n        brute_force_config {}\n      }\n    }\n  }\n  index_update_method = \"STREAM_UPDATE\"\n}\nresource \"google_compute_ha_vpn_gateway\" \"ha_vpn_gateway\" {\n  project = var.vpn_gateway.project\n  region  = var.vpn_gateway.region\n  name    = var.vpn_gateway.name\n  network = google_compute_network.network1.id\n}\nresource \"google_compute_network\" \"network1\" {\n  project = var.vpn_gateway.project\n  name                    = \"network1\"\n  auto_create_subnetworks = false\n}\n\nresource \"google_artifact_registry_repository\" \"example\" {\n  project = var.project_location_repository.project_id\n  repository_id = var.project_location_repository.display_name\n  location      = var.project_location_repository.location\n  format        = var.project_location_repository.format\n}\n\nresource \"google_composer_v1_environment\" \"test\" {\n  name   = var.cloud_composer_v1[\"name\"]\n  region = var.cloud_composer_v1[\"region\"]\n  config {\n    software_config {\n      image_version = var.cloud_composer_v1[\"image_version\"]\n    }\n  }\n}\n\nresource \"google_compute_service_attachment\" \"psc_ilb_service_attachment\" {\n  name        = var.compute_service_attachment_conf[\"compute_service_attachment_name\"]\n  region      = var.compute_service_attachment_conf[\"region\"]\n  description = var.compute_service_attachment_conf[\"description\"]\n\n  enable_proxy_protocol    = var.compute_service_attachment_conf[\"enable_proxy_protocol\"]\n  connection_preference    = var.compute_service_attachment_conf[\"connection_preference\"]\n  nat_subnets              = [google_compute_subnetwork.psc_ilb_nat.id]\n  target_service           = google_compute_forwarding_rule.psc_ilb_target_service.id\n}\n\nresource \"google_compute_address\" \"psc_ilb_consumer_address\" {\n  name   = var.compute_service_attachment_conf[\"psc_ilb_consumer_address_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  subnetwork   = var.compute_service_attachment_conf[\"subnetwork_id\"]\n  address_type = var.compute_service_attachment_conf[\"address_type\"]\n}\n\nresource \"google_compute_forwarding_rule\" \"psc_ilb_consumer\" {\n  name   = var.compute_service_attachment_conf[\"psc_ilb_consumer_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  target                = google_compute_service_attachment.psc_ilb_service_attachment.id\n  load_balancing_scheme = \"\" # need to override EXTERNAL default when target is a service attachment\n  network               = var.compute_service_attachment_conf[\"network_id\"]\n  ip_address            = google_compute_address.psc_ilb_consumer_address.id\n}\n\nresource \"google_compute_forwarding_rule\" \"psc_ilb_target_service\" {\n  name   = var.compute_service_attachment_conf[\"psc_ilb_target_service_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  load_balancing_scheme = var.compute_service_attachment_conf[\"load_balancing_scheme\"]\n  backend_service       = google_compute_region_backend_service.producer_service_backend.id\n  all_ports             = var.compute_service_attachment_conf[\"all_ports\"]\n  network               = google_compute_network.psc_ilb_network.name\n  subnetwork            = google_compute_subnetwork.psc_ilb_producer_subnetwork.name\n}\n\nresource \"google_compute_region_backend_service\" \"producer_service_backend\" {\n  name   = var.compute_service_attachment_conf[\"producer_service_backend_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  health_checks = [google_compute_health_check.producer_service_health_check.id]\n}\n\nresource \"google_compute_health_check\" \"producer_service_health_check\" {\n  name = var.compute_service_attachment_conf[\"producer_service_health_check_name\"]\n\n  check_interval_sec = 1\n  timeout_sec        = 1\n  tcp_health_check {\n    port = var.compute_service_attachment_conf[\"producer_service_health_check_port\"]\n  }\n}\n\nresource \"google_compute_network\" \"psc_ilb_network\" {\n  name = var.compute_service_attachment_conf[\"psc_ilb_network_name\"]\n  auto_create_subnetworks = var.compute_service_attachment_conf[\"auto_create_subnetworks\"]\n}\n\nresource \"google_compute_subnetwork\" \"psc_ilb_producer_subnetwork\" {\n  name   = var.compute_service_attachment_conf[\"psc_ilb_producer_subnetwork_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  network       = google_compute_network.psc_ilb_network.id\n  ip_cidr_range = var.compute_service_attachment_conf[\"subnetwork_ip_cidr_range\"]\n}\n\nresource \"google_compute_subnetwork\" \"psc_ilb_nat\" {\n  name   = var.compute_service_attachment_conf[\"psc_ilb_nat_name\"]\n  region = var.compute_service_attachment_conf[\"region\"]\n\n  network       = google_compute_network.psc_ilb_network.id\n  purpose       =  var.compute_service_attachment_conf[\"purpose\"]\n  ip_cidr_range = var.compute_service_attachment_conf[\"nat_ip_cidr_range\"]\n}\n\nresource \"google_apigee_envgroup\" \"env_grp\" {\n  name      = var.organization_envgroup.name\n  hostnames  = var.organization_envgroup.hostnames\n  org_id    = var.organization_envgroup.project\n}\nresource \"google_apigee_envgroup_attachment\" \"engroup_attachment\" {\n  envgroup_id  = var.apigee_organization_envgroup_attachment.envgroup_id\n  environment  = var.apigee_organization_envgroup_attachment.environment\n}\nresource \"google_apigee_instance\" \"apigee_instance\" {\n  name     = var.apigee_instance_attachment.instance\n  location = var.apigee_instance_attachment.location\n  org_id   = var.gcp_project_name\n}\nresource \"google_apigee_environment\" \"apigee_env\" {\n  org_id   = var.gcp_project_name\n  name         = var.apigee_instance_attachment.environment\n  description  = var.apigee_instance_attachment.description\n  display_name = var.apigee_instance_attachment.environment\n}\nresource \"google_apigee_instance_attachment\" \"iapigee_instance_attachment\" {\n  instance_id  = google_apigee_instance.apigee_instance.id\n  environment  = google_apigee_environment.apigee_env.name\n}\nresource \"google_compute_region_network_endpoint_group\" \"region_network_endpoint_group\" {\n  name                  = var.region_network_endpoint_group.name\n  network_endpoint_type = var.region_network_endpoint_group.network_endpoint_type\n  region                = var.region_network_endpoint_group.region\n  psc_target_service    = var.region_network_endpoint_group.target_service\n}\n\nresource \"google_secret_manager_secret\" \"test-secret\" {\n  secret_id = var.secrets_manager_v1[\"secret_id\"]\n\n  replication {\n    # auto {}\n  }\n}\n\nvariable \"crypto_key_version\" {\n  type = any\n}\n\nresource \"google_kms_key_ring\" \"keyring\" {\n  name     = var.crypto_key_version.key_ring\n  location = var.crypto_key_version.region\n}\n\nresource \"google_kms_crypto_key\" \"cryptokey\" {\n  name            = var.crypto_key_version.crypto_key\n  key_ring        = google_kms_key_ring.keyring.id\n  rotation_period = \"100000s\"\n}\n\nresource \"google_kms_crypto_key_version\" \"example-key\" {\n  crypto_key = google_kms_crypto_key.cryptokey.id\n}\n\nresource \"google_compute_instance\" \"inspec\" {\n  name         = var.compute_machine_images.instance\n  machine_type = \"e2-medium\"\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\"\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n  }\n}\n\nresource \"google_compute_machine_image\" \"image\" {\n  name            = var.compute_machine_images.name\n  source_instance = google_compute_instance.inspec.self_link\n}\n\nvariable \"compute_node_template\" {\n  type = any\n}\n\nresource \"google_compute_node_template\" \"tmpl\" {\n  name      = var.compute_node_template[\"name\"]\n  region    = var.compute_node_template[\"region\"]\n  node_type = var.compute_node_template[\"node_type\"]\n}\n\nresource \"google_compute_network_attachment\" \"default\" {\n    name   = var.network_attachments.name\n    region = var.network_attachments.region\n    subnetworks = [google_compute_subnetwork.default.id]\n    connection_preference = \"ACCEPT_AUTOMATIC\"\n}\n\nresource \"google_compute_region_url_map\" \"regionurlmap\" {\n  region = var.compute_region_url_map.region\n\n  name        = var.compute_region_url_map.name\n  description = var.compute_region_url_map.description\n\n  default_service = google_compute_region_backend_service.home.id\n\n  host_rule {\n    hosts        = [\"mysite.com\"]\n    path_matcher = \"allpaths\"\n  }\n\n  path_matcher {\n    name            = \"allpaths\"\n    default_service = google_compute_region_backend_service.home.id\n\n    path_rule {\n      paths   = [\"/home\"]\n      service = google_compute_region_backend_service.home.id\n    }\n\n    path_rule {\n      paths   = [\"/login\"]\n      service = google_compute_region_backend_service.login.id\n    }\n  }\n\n  test {\n    service = google_compute_region_backend_service.home.id\n    host    = \"hi.com\"\n    path    = \"/home\"\n  }\n}\n\nresource \"google_compute_region_backend_service\" \"login\" {\n  region = var.compute_region_url_map.region\n\n  name        = \"login\"\n  protocol    = \"HTTP\"\n  load_balancing_scheme = \"INTERNAL_MANAGED\"\n  timeout_sec = 10\n\n  health_checks = [google_compute_region_health_check.default.id]\n}\n\nresource \"google_compute_region_backend_service\" \"home\" {\n  region = var.compute_region_url_map.region\n\n  name        = \"home\"\n  protocol    = \"HTTP\"\n  load_balancing_scheme = \"INTERNAL_MANAGED\"\n  timeout_sec = 10\n\n  health_checks = [google_compute_region_health_check.default.id]\n}\n\nresource \"google_compute_region_health_check\" \"default\" {\n  region = var.compute_region_url_map.region\n\n  name               = \"health-check\"\n  check_interval_sec = 1\n  timeout_sec        = 1\n  http_health_check {\n    port         = 80\n    request_path = \"/\"\n  }\n}\n\nresource \"google_compute_target_instance\" \"default\" {\n  name     = var.compute_target_instance.name\n  instance = google_compute_instance.target-vm.id\n}\n\ndata \"google_compute_image\" \"vmimage\" {\n  family  = var.compute_target_instance.image_family\n  project = var.compute_target_instance.image_project\n}\n\nresource \"google_compute_instance\" \"target-vm\" {\n  name         = var.compute_target_instance.target_vm_name\n  machine_type = var.compute_target_instance.machine_type\n  zone         = var.compute_target_instance.zone  # Make sure this matches the provider-level zone\n\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.vmimage.self_link\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n  }\n}\n\nresource \"google_compute_network\" \"inspec-network\" {\n  project = var.gcp_project_id\n  name    =  var.compute_packet_mirroring.network\n  auto_create_subnetworks = \"false\"\n}\n\nresource \"google_compute_subnetwork\" \"inspec-test-subnetwork\" {\n  project = var.gcp_project_id\n  ip_cidr_range = \"10.2.0.0/29\" # i.e. 8 total & 6 usable IPs\n  name =  var.gcp_subnetwork_name\n  region = var.compute_packet_mirroring.region\n  network = google_compute_network.inspec-network.self_link\n}\n\nresource \"google_compute_instance_group\" \"inspec-instance-group\" {\n  name        = var.compute_packet_mirroring.name\n  project = var.gcp_project_id\n  description = \"InSpec test instance group\"\n  zone        = \"us-central1-a\"\n  network     = google_compute_network.inspec-network.self_link\n}\nresource \"google_compute_forwarding_rule\" \"inspec-ilb\" {\n  depends_on = [google_compute_subnetwork.default]\n  name       = var.compute_packet_mirroring.name\n  is_mirroring_collector = true\n  ip_protocol            = \"TCP\"\n  load_balancing_scheme  = \"INTERNAL\"\n  backend_service        = google_compute_region_backend_service.default.id\n  all_ports              = true\n  network                = google_compute_network.default.id\n  subnetwork             = google_compute_subnetwork.default.id\n  network_tier           = \"PREMIUM\"\n}\n\nresource \"google_compute_packet_mirroring\" \"packet_mirroring\" {\n  name              = var.compute_packet_mirroring.name\n  region            = \"us-central1\"  # Change to your desired region\n  description       = \"Packet Mirroring for analysis\"\n  project = var.gcp_project_id\n\n  network {\n      url = google_compute_network.inspec-network.id\n    }\n  collector_ilb {\n    url = google_compute_instance_group.inspec-instance-group.id\n  }\n  mirrored_resources {\n    tags = [\"foo\"]\n  }\n}\n\nresource \"google_compute_interconnect_attachment\" \"on_prem\" {\n  name                     = var.compute_interconnect_attachment.name\n  edge_availability_domain = var.compute_interconnect_attachment.edge_availability_domain\n  type                     = var.compute_interconnect_attachment.type\n  router                   = google_compute_router.foobar.id\n  mtu                      = var.compute_interconnect_attachment.mtu\n}\n\nresource \"google_compute_router\" \"foobar\" {\n  name    = var.compute_interconnect_attachment.router_name\n  network = google_compute_network.foobar.name\n  bgp {\n    asn = var.compute_interconnect_attachment.bgp_asn\n  }\n}\n\nresource \"google_compute_network\" \"foobar\" {\n  name                    = var.compute_interconnect_attachment.network_name\n  auto_create_subnetworks = false\n}\n\nresource \"google_compute_region_ssl_policy\" \"basic-ssl-policy\" {\n  name    = var.compute_region_ssl_policy.name\n  profile = var.compute_region_ssl_policy.profile\n  region  = var.compute_region_ssl_policy.region\n}\nresource \"google_compute_vpn_gateway\" \"target_gateway\" {\n  name    = var.compute_target_vpn_gateway.name\n  network = google_compute_network.network1.id\n}\n\nresource \"google_compute_network\" \"inspec-network\" {\n  name = var.compute_target_vpn_gateway.network\n}\n\nresource \"google_compute_address\" \"vpn_static_ip\" {\n  name = var.compute_target_vpn_gateway.static_ip\n}\n\nresource \"google_compute_forwarding_rule\" \"fr_esp\" {\n  name        = \"fr-esp\"\n  ip_protocol = \"ESP\"\n  ip_address  = google_compute_address.vpn_static_ip.address\n  target      = google_compute_vpn_gateway.target_gateway.id\n}\n\nresource \"google_compute_forwarding_rule\" \"fr_udp500\" {\n  name        = \"fr-udp500\"\n  ip_protocol = \"UDP\"\n  port_range  = \"500\"\n  ip_address  = google_compute_address.vpn_static_ip.address\n  target      = google_compute_vpn_gateway.target_gateway.id\n}\n\nresource \"google_compute_forwarding_rule\" \"fr_udp4500\" {\n  name        = \"fr-udp4500\"\n  ip_protocol = \"UDP\"\n  port_range  = \"4500\"\n  ip_address  = google_compute_address.vpn_static_ip.address\n  target      = google_compute_vpn_gateway.target_gateway.id\n}\n\nresource \"google_compute_vpn_tunnel\" \"tunnel1\" {\n  name          =  var.compute_target_vpn_gateway.tunnel\n  peer_ip       = \"15.0.0.120\"\n  shared_secret = \"a secret message\"\n\n  target_vpn_gateway = google_compute_vpn_gateway.target_gateway.id\n\n  depends_on = [\n    google_compute_forwarding_rule.fr_esp,\n    google_compute_forwarding_rule.fr_udp500,\n    google_compute_forwarding_rule.fr_udp4500,\n  ]\n}\n\nresource \"google_compute_route\" \"route1\" {\n  name       = \"route1\"\n  network    = google_compute_network.network1.name\n  dest_range = \"15.0.0.0/24\"\n  priority   = 1000\n\n  next_hop_vpn_tunnel = google_compute_vpn_tunnel.tunnel1.id\n}\n\nresource \"google_compute_region_commitment\" \"foobar\" {\n  name = var.compute_region_commitment.name\n  plan = var.compute_region_commitment.plan\n  resources {\n      type = \"VCPU\"\n      amount = \"4\"\n  }\n  resources {\n      type = \"MEMORY\"\n      amount = \"9\"\n  }\n}\n\nresource \"google_compute_target_grpc_proxy\" \"default\" {\n  name    = var.compute_target_grpc_proxy.name\n  url_map = google_compute_url_map.urlmap.id\n  validate_for_proxyless = true\n}\n\n\nresource \"google_compute_url_map\" \"urlmap\" {\n  name        = var.compute_target_grpc_proxy.url_map_name\n  description = var.compute_target_grpc_proxy.description\n  default_service = google_compute_backend_service.home.id\n  host_rule {\n    hosts        = [\"mysite.com\"]\n    path_matcher = \"allpaths\"\n  }\n  path_matcher {\n    name = \"allpaths\"\n    default_service = google_compute_backend_service.home.id\n    route_rules {\n      priority = 1\n      header_action {\n        request_headers_to_remove = [\"RemoveMe2\"]\n        request_headers_to_add {\n          header_name = \"AddSomethingElse\"\n          header_value = \"MyOtherValue\"\n          replace = true\n        }\n        response_headers_to_remove = [\"RemoveMe3\"]\n        response_headers_to_add {\n          header_name = \"AddMe\"\n          header_value = \"MyValue\"\n          replace = false\n        }\n      }\n      match_rules {\n        full_path_match = \"a full path\"\n        header_matches {\n          header_name = \"someheader\"\n          exact_match = \"match this exactly\"\n          invert_match = true\n        }\n        ignore_case = true\n        metadata_filters {\n          filter_match_criteria = \"MATCH_ANY\"\n          filter_labels {\n            name = \"PLANET\"\n            value = \"MARS\"\n          }\n        }\n        query_parameter_matches {\n          name = \"a query parameter\"\n          present_match = true\n        }\n      }\n      url_redirect {\n        host_redirect = \"A host\"\n        https_redirect = false\n        path_redirect = \"some/path\"\n        redirect_response_code = \"TEMPORARY_REDIRECT\"\n        strip_query = true\n      }\n    }\n  }\n  test {\n    service = google_compute_backend_service.home.id\n    host    = \"hi.com\"\n    path    = \"/home\"\n  }\n}\nresource \"google_compute_backend_service\" \"home\" {\n  name        = var.compute_target_grpc_proxy.backend_service_name\n  port_name   = var.compute_target_grpc_proxy.port_name\n  protocol    = var.compute_target_grpc_proxy.protocol\n  timeout_sec = var.compute_target_grpc_proxy.timeout_sec\n  health_checks = [google_compute_health_check.default.id]\n  load_balancing_scheme = \"INTERNAL_SELF_MANAGED\"\n}\nresource \"google_compute_health_check\" \"default\" {\n  name               = var.compute_target_grpc_proxy.health_check_name\n  timeout_sec        = 1\n  check_interval_sec = 1\n  grpc_health_check {\n    port_name          = \"health-check-port\"\n    port_specification = \"USE_NAMED_PORT\"\n    grpc_service_name  = \"testservice\"\n  }\n}\n\nresource \"google_compute_target_ssl_proxy\" \"default\" {\n  name             = var.compute_target_ssl_proxy.name\n  backend_service  = google_compute_backend_service.default.id\n  ssl_certificates = [google_compute_ssl_certificate.default.id]\n}\n\nresource \"google_compute_ssl_certificate\" \"default\" {\n  name        = var.compute_target_ssl_proxy.ssl_certificate_name\n  private_key = file(\"./private-key.pem\") # Path to the private key file. Update this to the path of your private key file\n  certificate = file(\"./certificate.pem\") # Path to the certificate file. Update this to the path of your certificate file\n}\n\nresource \"google_compute_backend_service\" \"default\" {\n  name          = var.compute_target_ssl_proxy.backend_service_name\n  protocol      = var.compute_target_ssl_proxy.protocol\n  health_checks = [google_compute_health_check.default.id]\n}\n\nresource \"google_compute_health_check\" \"default\" {\n  name               = var.compute_target_ssl_proxy.health_check_name\n  check_interval_sec = 1\n  timeout_sec        = 1\n  tcp_health_check {\n    port = \"443\"\n  }\n}\n\nresource \"google_compute_reservation\" \"gce_reservation\" {\n  name = \"gce-reservation\"\n  zone = \"us-central1-a\"\n\n  specific_reservation {\n    count = 1\n    instance_properties {\n      min_cpu_platform = \"Intel Cascade Lake\"\n      machine_type     = \"n2-standard-2\"\n    }\n  }\n}\nresource \"google_compute_region_security_policy\" \"region-sec-policy-basic\" {\n  provider    = google-beta\n\n  name        = \"my-sec-policy-basic\"\n  description = \"basic region security policy\"\n  type        = \"CLOUD_ARMOR\"\n}\nresource \"google_bigtable_instance\" \"inspec-test\" {\n  name = var.bigtable_instance_cluster.name\n\n  cluster {\n    cluster_id   = var.bigtable_instance_cluster.cluster\n    num_nodes    = 1\n    storage_type = var.bigtable_instance_cluster.storage_type\n  }\n\n  labels = {\n    my-label = var.bigtable_instance_cluster.name\n  }\n}\n\nresource \"google_dataproc_metastore_service\" \"inspec-test\" {\n  project = var.gcp_project_id\n  service_id = var.dataproc_metastore_service.name\n  location   = var.dataproc_metastore_service.location\n  tier       = var.dataproc_metastore_service.tier\n\n\n  hive_metastore_config {\n    version           = var.dataproc_metastore_service.version\n    # endpoint_protocol = \"GRPC\"\n  }\n}\nresource \"google_dataproc_metastore_federation\" \"inspec-federation\" {\n  project = var.gcp_project_id\n  location      = var.dataproc_metastore_federation.location\n  federation_id = var.dataproc_metastore_federation.federation_id\n  version       = var.dataproc_metastore_federation.version\n\n  backend_metastores {\n    rank           = \"1\"\n    name           = google_dataproc_metastore_service.inspec-test.id\n    metastore_type = var.dataproc_metastore_service.metastore_type\n  }\n}\n\nresource \"google_data_fusion_instance\" \"data_fusion_instance\" {\n  project = var.gcp_project_id\n  name   = var.data_fusion_instance.name\n  region = var.data_fusion_instance.location\n  type   = var.data_fusion_instance.type\n}\n\nresource \"google_cloud_run_v2_job\" \"default\" {\n  name     = var.cloud_run_jobs.name\n  location = var.cloud_run_jobs.location\n  deletion_protection = var.cloud_run_jobs.deletion_protection\n  project = var.gcp_project_id\n\n  template {\n    template {\n      containers {\n        image = var.cloud_run_jobs.image\n      }\n    }\n  }\n}\nresource \"google_dataproc_batch\" \"inspec_batch_spark\" {\n\n    batch_id      = var.dataproc_serverless_batches.name\n    location      = var.dataproc_serverless_batches.location\n    labels        = {\"app\": \"inspec\"}\n    project = var.gcp_project_id\n    runtime_config {\n      properties    = { \"spark.dynamicAllocation.enabled\": \"false\", \"spark.executor.instances\": \"2\" }\n    }\n\n    environment_config {\n      execution_config {\n        subnetwork_uri = \"default\"\n        ttl            = \"3600s\"\n        network_tags   = [\"tag1\"]\n      }\n    }\n\n    spark_batch {\n      main_class    = var.dataproc_serverless_batches.main_class\n      args          = [var.dataproc_serverless_batches.args]\n      jar_file_uris = [var.dataproc_serverless_batches.path]\n    }\n}\nresource \"google_monitoring_group\" \"inspec-test-group\" {\n  project = var.gcp_project_id\n  display_name = var.monitoring_group.name\n  filter = var.monitoring_group.filter\n}\n"
  },
  {
    "path": "test/integration/build/gcp.tf",
    "content": "terraform {\n  required_version = \"~> 1.5.2\"\n}\n\n## GCP Terraform Templates For Inspec Testing\n##\n## Starts off with 'generic' resource descriptions, mostly taken from here:\n## https://www.terraform.io/docs/providers/google/\n## Then moves onto a more 'realistic' example adapted from\n## https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/tree/master/examples/simple\n#\n#\n## Configure variables\n\nvariable \"gcp_project_name\" {}\nvariable \"gcp_project_id\" {}\nvariable \"gcp_project_number\" {}\n\nvariable \"gcp_location\" {\n  default = \"europe-west2\"\n}\n\nvariable \"gcp_zone\" {\n  default = \"europe-west2-a\"\n}\n\nvariable \"gcp_int_vm_name\" {}\n\nvariable \"gcp_int_vm_size\" {\n  default = \"f1-micro\"\n}\n\nvariable \"gcp_int_vm_image\" {\n  default = \"ubuntu-os-cloud/ubuntu-1604-lts\"\n}\n\nvariable \"gcp_ext_vm_name\" {}\nvariable \"gcp_ext_vm_size\" {}\nvariable \"gcp_ext_vm_image\" {}\nvariable \"gcp_ext_compute_address_name\" {}\nvariable \"gcp_windows_int_vm_name\" {}\nvariable \"gcp_windows_int_vm_size\" {}\nvariable \"gcp_windows_int_vm_image\" {}\nvariable \"gcp_service_account_display_name\" {}\nvariable \"gcp_project_iam_custom_role_id\" {}\n\nvariable \"gcp_compute_disk_name\" {}\nvariable \"gcp_compute_disk_type\" {}\nvariable \"gcp_compute_disk_image\" {}\n\nvariable \"gcp_ext_vm_data_disk_address_name\" {}\nvariable \"gcp_ext_vm_data_disk_name\" {}\nvariable \"gcp_ext_vm_data_disk_size\" {}\nvariable \"gcp_ext_vm_data_disk_image\" {}\n\nvariable \"gcp_kube_cluster_name\" {}\nvariable \"gcp_kube_cluster_zone\" {}\nvariable \"gcp_kube_cluster_size\" {}\nvariable \"gcp_kube_cluster_zone_extra1\" {}\nvariable \"gcp_kube_cluster_zone_extra2\" {}\nvariable \"gcp_kube_cluster_master_user\" {}\nvariable \"gcp_kube_cluster_master_pass\" {}\n\nvariable \"gcp_kms_key_ring_policy_name\" {}\nvariable \"gcp_kms_key_ring_binding_member_name\" {}\nvariable \"gcp_kms_crypto_key_name_policy\" {}\nvariable \"gcp_kms_crypto_key_name_binding\" {}\n\nvariable \"gcp_storage_bucket_name\" {}\nvariable \"gcp_storage_bucket_acl\" {}\nvariable \"gcp_storage_bucket_binding\" {}\nvariable \"gcp_storage_bucket_member\" {}\nvariable \"gcp_storage_bucket_policy\" {}\nvariable \"gcp_storage_bucket_object\" {}\nvariable \"gcp_storage_bucket_object_name\" {}\n\nvariable \"gcp_logging_vm_name\" {}\nvariable \"gcp_logging_bucket_name\" {}\nvariable \"gcp_logging_project_sink_name\" {}\nvariable \"gcp_logging_project_exclusion_name\" {}\n\nvariable \"gcp_network_name\" {}\nvariable \"gcp_subnetwork_name\" {}\nvariable \"gcp_vpn_gateway_name\" {}\nvariable \"gcp_vpn_tunnel_name\" {}\nvariable \"gcp_fr_esp_name\" {}\nvariable \"gcp_fr_udp_name\" {}\nvariable \"gcp_address_name\" {}\nvariable \"gcp_vpn_address_name\" {}\n\nvariable \"gcp_db_instance_name\" {}\nvariable \"gcp_db_name\" {}\nvariable \"gcp_db_type\" {}\nvariable \"gcp_db_size\" {}\nvariable \"gcp_db_user_name\" {}\nvariable \"gcp_db_user_password\" {}\n\nvariable \"gcp_enable_privileged_resources\" {}\n\nprovider \"google\" {\n  region = var.gcp_location\n  version = \"~> 3.90.0\"\n}\n\nprovider \"google-beta\" {\n  region = var.gcp_location\n  version = \"~> 3.90.0\"\n}\n#\nresource \"google_service_account\" \"generic_service_account_object_viewer\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  account_id   = var.gcp_service_account_display_name\n  display_name = var.gcp_service_account_display_name\n}\n\nresource \"google_compute_instance\" \"generic_internal_vm_instance\" {\n  project = var.gcp_project_id\n  name         = var.gcp_int_vm_name\n  machine_type = var.gcp_int_vm_size\n  zone         = var.gcp_zone\n\n  boot_disk {\n    initialize_params {\n      image = var.gcp_int_vm_image\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n  }\n}\n\nresource \"google_compute_address\" \"generic_external_vm_address\" {\n  project = var.gcp_project_id\n  name = var.gcp_ext_compute_address_name\n  region = var.gcp_location\n}\n\nresource \"google_compute_instance\" \"generic_external_vm_instance\" {\n  project = var.gcp_project_id\n  name         = var.gcp_ext_vm_name\n  machine_type = var.gcp_ext_vm_size\n  zone         = var.gcp_zone\n\n  boot_disk {\n    initialize_params {\n      image = var.gcp_ext_vm_image\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n    access_config {\n      // Ephemeral IP\n      nat_ip = google_compute_address.generic_external_vm_address.address\n    }\n  }\n}\n\nresource \"google_compute_instance\" \"generic_windows_internal_vm_instance\" {\n  project = var.gcp_project_id\n  name         = var.gcp_windows_int_vm_name\n  machine_type = var.gcp_windows_int_vm_size\n  zone         = var.gcp_zone\n\n  boot_disk {\n    initialize_params {\n      image = var.gcp_windows_int_vm_image\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n  }\n}\n\nresource \"google_project_iam_custom_role\" \"generic_project_iam_custom_role\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  role_id     = var.gcp_project_iam_custom_role_id\n  title       = \"GCP Inspec Generic Project IAM Custom Role\"\n  description = \"Custom role allowing to list IAM roles only\"\n  permissions = [\"iam.roles.list\"]\n}\n\nresource \"google_compute_disk\" \"generic_compute_disk\" {\n  project = var.gcp_project_id\n  name  = var.gcp_compute_disk_name\n  type  = var.gcp_compute_disk_type\n  zone  = var.gcp_zone\n  image = var.gcp_compute_disk_image\n  labels = {\n    environment = \"generic_compute_disk_label\"\n  }\n}\n\nresource \"google_compute_address\" \"generic_external_vm_address_data_disk\" {\n  project = var.gcp_project_id\n  name = var.gcp_ext_vm_data_disk_address_name\n  region = var.gcp_location\n}\n\nresource \"google_compute_instance\" \"generic_external_vm_instance_data_disk\" {\n  project = var.gcp_project_id\n  name         = var.gcp_ext_vm_data_disk_name\n  machine_type = var.gcp_ext_vm_data_disk_size\n  zone         = var.gcp_zone\n\n  boot_disk {\n    initialize_params {\n      image = var.gcp_ext_vm_data_disk_image\n    }\n  }\n\n  attached_disk {\n    source = var.gcp_compute_disk_name\n    mode = \"READ_WRITE\"\n    device_name = var.gcp_compute_disk_name\n  }\n\n  network_interface {\n    network = \"default\"\n    access_config {\n      // Ephemeral IP\n      nat_ip = google_compute_address.generic_external_vm_address_data_disk.address\n    }\n  }\n}\n\n##############################################################\n# The adapted google lb example starts from this point onwards\n##############################################################\n\n#Internal Load Balancer Example\n#\n#This example creates 3 instance groups. The first group uses the internal load balancer to proxy access to\n#services running in instance groups 2 and 3 which exist in separate zones. A regional TCP load balancer is also\n#used to forward external traffic to the instances in group 1.\n\n# adapted from https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/blob/master/examples/simple/main.tf\n\nvariable gcp_lb_region {\n  default = \"europe-west2\"\n}\n\nvariable gcp_lb_network {\n  default = \"default\"\n}\n\nvariable gcp_lb_zone {\n  default = \"europe-west2-a\"\n}\n\nvariable gcp_lb_zone_mig2 {\n  default = \"europe-west2-b\"\n}\n\nvariable gcp_lb_zone_mig3 {\n  default = \"europe-west2-c\"\n}\n\nvariable gcp_lb_fr_name {\n  default = \"group1-lb\"\n}\n\nvariable gcp_lb_ilb_name {\n  default = \"group1-ilb\"\n}\n\n# adapted from https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/blob/master/examples/simple/mig.tf\n\nvariable gcp_lb_mig1_name {\n  default = \"group1\"\n}\n\nvariable gcp_lb_mig2_name {\n  default = \"group2\"\n}\n\nvariable gcp_lb_mig3_name {\n  default = \"group3\"\n}\n\ndata \"template_file\" \"group2-startup-script\" {\n  template = \"${file(\"${format(\"%s/templates/gceme.sh.tpl\", path.module)}\")}\"\n\n  vars = {\n    PROXY_PATH = \"\"\n  }\n}\n\ndata \"template_file\" \"group3-startup-script\" {\n  template = \"${file(\"${format(\"%s/templates/gceme.sh.tpl\", path.module)}\")}\"\n\n  vars = {\n    PROXY_PATH = \"\"\n  }\n}\n\nresource \"google_compute_instance_template\" \"default\" {\n  project      = var.gcp_project_id\n  name         = \"app-itpl\"\n  machine_type = \"f1-micro\"\n  network_interface {\n    network = \"default\"\n  }\n  disk {\n    source_image = \"debian-cloud/debian-9\"\n    auto_delete  = true\n    boot         = true\n  }\n}\n\nresource \"google_compute_region_instance_group_manager\" \"appserver\" {\n  project           = var.gcp_project_id\n  name              = \"app-rigm\"\n  version {\n    instance_template = google_compute_instance_template.default.self_link\n  }\n  base_instance_name        = \"app\"\n  region                    = var.gcp_lb_region\n  distribution_policy_zones = [var.gcp_lb_zone]\n  target_pools = []\n  target_size  = 0\n  named_port {\n    name = \"custom\"\n    port = 80\n  }\n}\n\n# after a successful apply, open URL of load balancer in browser:\n# > EXTERNAL_IP=$(terraform output -module gce-lb-fr | grep external_ip | cut -d = -f2 | xargs echo -n)\n# > open http://${EXTERNAL_IP}\n\n##############################################################\n# End of the google lb example adapted template.\n##############################################################\n\n##############################################################\n# Start of the GKE cluster example\n##############################################################\n\nresource \"google_container_cluster\" \"primary\" {\n  project = var.gcp_project_id\n  provider = google-beta\n  name               = var.gcp_kube_cluster_name\n  location           = var.gcp_kube_cluster_zone\n  initial_node_count = var.gcp_kube_cluster_size\n\n  node_locations = [\n    var.gcp_kube_cluster_zone_extra1,\n    var.gcp_kube_cluster_zone_extra2,\n  ]\n\n  master_auth {\n    username = var.gcp_kube_cluster_master_user\n    password = var.gcp_kube_cluster_master_pass\n\n    client_certificate_config {\n      issue_client_certificate = false\n    }\n  }\n\n  maintenance_policy {\n    daily_maintenance_window {\n      start_time = \"23:00\"\n    }\n  }\n\n  node_config {\n    oauth_scopes = [\n      \"https://www.googleapis.com/auth/compute\",\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    ]\n  }\n\n  release_channel {\n    channel = \"RAPID\"\n  }\n}\n\n# The following outputs allow authentication and connectivity to the GKE Cluster.\noutput \"client_certificate\" {\n  value = google_container_cluster.primary.master_auth.0.client_certificate\n}\n\noutput \"client_key\" {\n  value = google_container_cluster.primary.master_auth.0.client_key\n}\n\noutput \"cluster_ca_certificate\" {\n  value = google_container_cluster.primary.master_auth.0.cluster_ca_certificate\n}\n\n# Future work - as a more realistic example, could stand up another cluster and\n# extend with the GKE NAT Gateway template:\n# https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/gke-nat-gateway\n# requires the master node IP and tag name which could be tough to get hold of\n\n##############################################################\n# End of the GKE cluster example\n##############################################################\n\n# Start GCP KMS resources\n# This reuses service account email address that was created earlier to test IAM policies/binding/memberships\n\n#Note: google_kms_key_ring_iam_policy cannot be used in conjunction with google_kms_key_ring_iam_binding and google_kms_key_ring_iam_member or they will fight over what your policy should be.\n\nresource \"google_kms_key_ring\" \"gcp_kms_key_ring_policy\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_kms_key_ring_policy_name\n  location = var.gcp_location\n}\n\n\n#Note: google_kms_key_ring_iam_binding resources can be used in conjunction with google_kms_key_ring_iam_member resources only if they do not grant privilege to the same role.\n\nresource \"google_kms_key_ring\" \"gcp_kms_key_ring_binding_member\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_kms_key_ring_binding_member_name\n  location = var.gcp_location\n}\n\n# Use the first key ring to attach an IAM policy\n\ndata \"google_iam_policy\" \"gcp_inspec_admin_key_ring\" {\n  count = var.gcp_enable_privileged_resources\n  binding {\n    role = \"roles/editor\"\n\n    members = [\n      \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\",\n    ]\n  }\n}\n\nresource \"google_kms_key_ring_iam_policy\" \"key_ring_policy\" {\n  count = var.gcp_enable_privileged_resources\n  key_ring_id = google_kms_key_ring.gcp_kms_key_ring_policy[0].id\n  policy_data = data.google_iam_policy.gcp_inspec_admin_key_ring[0].policy_data\n}\n\n# Use the second key ring to attach an IAM binding plus IAM member affecting different roles\n\nresource \"google_kms_key_ring_iam_binding\" \"key_ring_binding\" {\n  count = var.gcp_enable_privileged_resources\n  key_ring_id = google_kms_key_ring.gcp_kms_key_ring_binding_member[0].id\n  role        = \"roles/editor\"\n\n  members = [\n    \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\",\n  ]\n}\n\nresource \"google_kms_key_ring_iam_member\" \"key_ring_iam_member\" {\n  count = var.gcp_enable_privileged_resources\n  key_ring_id = google_kms_key_ring.gcp_kms_key_ring_binding_member[0].id\n  role        = \"roles/owner\"\n  member      = \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\"\n}\n\nresource \"google_kms_crypto_key\" \"crypto_key_policy\" {\n  count = var.gcp_enable_privileged_resources\n  name            = var.gcp_kms_crypto_key_name_policy\n  key_ring        = google_kms_key_ring.gcp_kms_key_ring_policy[0].id\n  rotation_period = \"100000s\"\n}\n\nresource \"google_kms_crypto_key\" \"crypto_key_binding\" {\n  count = var.gcp_enable_privileged_resources\n  name            = var.gcp_kms_crypto_key_name_binding\n  key_ring        = google_kms_key_ring.gcp_kms_key_ring_binding_member[0].id\n  rotation_period = \"100000s\"\n}\n\nresource \"google_kms_crypto_key_iam_member\" \"crypto_key_iam_member\" {\n  count = var.gcp_enable_privileged_resources\n  crypto_key_id = google_kms_crypto_key.crypto_key_policy[0].id\n  role          = \"roles/editor\"\n  member      = \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\"\n}\n\nresource \"google_kms_crypto_key_iam_binding\" \"crypto_key_iam_binding\" {\n  count = var.gcp_enable_privileged_resources\n  crypto_key_id = google_kms_crypto_key.crypto_key_binding[0].id\n  role          = \"roles/editor\"\n\n  members = [\n    \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\",\n  ]\n}\n\n\n# End GCP KMS resources\n\n# Start storage bucket resources\n\nresource \"google_storage_bucket\" \"generic-storage-bucket\" {\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_name\n  location = var.gcp_location\n}\n\n# let's add a default ACL on the previous bucket\nresource \"google_storage_default_object_acl\" \"bucket-default-acl\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.generic-storage-bucket.name\n  role_entity = [\n    \"OWNER:user-${google_service_account.generic_service_account_object_viewer[0].email}\",\n    \"OWNER:project-owners-${var.gcp_project_number}\",\n  ]\n}\n\n# now test adding an ACL to a bucket\n\nresource \"google_storage_bucket\" \"bucket-with-acl\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_acl\n  location = var.gcp_location\n}\n\n# make use of project convenience values as described here -  https://cloud.google.com/storage/docs/access-control/lists\nresource \"google_storage_bucket_acl\" \"bucket-acl\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.bucket-with-acl[0].name\n\n  role_entity = [\n    \"OWNER:user-${google_service_account.generic_service_account_object_viewer[0].email}\",\n    \"OWNER:project-owners-${var.gcp_project_number}\",\n  ]\n}\n\n# Note: google_storage_bucket_iam_binding resources can be used in conjunction with google_storage_bucket_iam_member resources only if they do not grant privilege to the same role.\n# for simplicity here, create a bucket for iam binding and member cases\n\nresource \"google_storage_bucket\" \"bucket-with-iam-binding\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_binding\n  location = var.gcp_location\n}\n\nresource \"google_storage_bucket_iam_binding\" \"bucket-iam-binding\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.bucket-with-iam-binding[0].name\n  role = \"roles/storage.objectViewer\"\n\n  members = [\n    \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\",\n  ]\n}\n\nresource \"google_storage_bucket\" \"bucket-with-iam-member\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_member\n  location = var.gcp_location\n}\n\nresource \"google_storage_bucket_iam_member\" \"bucket-iam-member\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.bucket-with-iam-member[0].name\n  role = \"roles/storage.objectViewer\"\n  member = \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\"\n}\n\n# now for the IAM policy case\n\nresource \"google_storage_bucket\" \"bucket-with-iam-policy\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_policy\n  location = var.gcp_location\n}\n\ndata \"google_iam_policy\" \"bucket-iam-policy\" {\n  count = var.gcp_enable_privileged_resources\n  binding {\n    role = \"roles/storage.admin\"\n\n    members = [ \"serviceAccount:${google_service_account.generic_service_account_object_viewer[0].email}\" ]\n  }\n}\n\nresource \"google_storage_bucket_iam_policy\" \"bucket-iam-policy-add\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.bucket-with-iam-policy[0].name\n  policy_data = data.google_iam_policy.bucket-iam-policy[0].policy_data\n}\n\n# finally let's create a bucket with object plus an object ACL\n\nresource \"google_storage_bucket\" \"bucket-with-object\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_storage_bucket_object\n  location = var.gcp_location\n}\n\nresource \"google_storage_bucket_object\" \"bucket-object\" {\n  count = var.gcp_enable_privileged_resources\n  name   = var.gcp_storage_bucket_object_name\n  bucket = google_storage_bucket.bucket-with-object[0].name\n  content = \"Bucket Object ${var.gcp_storage_bucket_object_name} for bucket ${var.gcp_storage_bucket_object} in ${var.gcp_project_id} with ACL.\"\n}\n\n#finally, add object ACL\n\nresource \"google_storage_object_acl\" \"bucket-object-acl\" {\n  count = var.gcp_enable_privileged_resources\n  bucket = google_storage_bucket.bucket-with-object[0].name\n  object = google_storage_bucket_object.bucket-object[0].name\n\n  role_entity = [\n    \"OWNER:project-owners-${var.gcp_project_number}\",\n    \"OWNER:user-${google_service_account.generic_service_account_object_viewer[0].email}\",\n  ]\n}\n\n# try the last scenario of adding an IAM policy to an object\n\n# note at the time of writing, terraform isn't supporting the IAM policy applied to storage object case\n# https://www.terraform.io/docs/providers/google/r/storage_bucket_object.html\n\n# will revisit based on outcome of https://github.com/terraform-providers/terraform-provider-google/issues/1871\n\n//resource \"google_storage_bucket_object\" \"bucket-object-attach-policy\" {\n//  count = var.gcp_enable_privileged_resources\n//  name   = \"${var.gcp_storage_bucket_object_name}-iam\"\n//  bucket = google_storage_bucket.bucket-with-object.name\n//  content = \"Bucket Object ${var.gcp_storage_bucket_object_name} for bucket ${var.gcp_storage_bucket_object} in ${var.gcp_project_id} with IAM policy.\"\n//}\n//\n//data \"google_iam_policy\" \"object-iam-policy\" {\n//  count = var.gcp_enable_privileged_resources\n//  binding {\n//    role = \"roles/storage.admin\"\n//\n//    members = [ \"serviceAccount:${google_service_account.generic_service_account_object_viewer.email}\" ]\n//  }\n//}\n//\n//# would expect this to be something like below:\n//resource \"google_storage_object_iam_policy\" \"object-iam-policy-add\" {\n//  count = var.gcp_enable_privileged_resources\n//  bucket = google_storage_bucket.bucket-with-object.name\n//  object = google_storage_bucket_object.bucket-object-attach-policy.name\n//  policy_data = data.google_iam_policy.object-iam-policy.policy_data\n//}\n\n\n# END storage bucket resources\n\n\n# Start logging resources - initially for projects\n\n\nresource \"google_compute_instance\" \"vm-with-project-logging\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name         = var.gcp_logging_vm_name\n  machine_type = var.gcp_int_vm_size\n  zone         = var.gcp_zone\n\n  boot_disk {\n    initialize_params {\n      image = var.gcp_int_vm_image\n    }\n  }\n\n  network_interface {\n    network = \"default\"\n    access_config {}\n  }\n}\n\nresource \"google_storage_bucket\" \"project-logging-bucket\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name     = var.gcp_logging_bucket_name\n  location = var.gcp_location\n}\n\nresource \"google_logging_project_sink\" \"project-logging-instance-sink\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name = var.gcp_logging_project_sink_name\n  destination = \"storage.googleapis.com/${google_storage_bucket.project-logging-bucket[0].name}\"\n  filter = \"resource.type = gce_instance AND resource.labels.instance_id = \\\"${google_compute_instance.vm-with-project-logging[0].instance_id}\\\"\"\n\n  unique_writer_identity = true\n}\n\nresource \"google_project_iam_binding\" \"project-log-writer-iam-binding\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  role = \"roles/storage.objectCreator\"\n\n  members = [\n    google_logging_project_sink.project-logging-instance-sink[0].writer_identity,\n  ]\n}\n\nresource \"google_logging_project_exclusion\" \"project-logging-exclusion\" {\n  count = var.gcp_enable_privileged_resources\n  project = var.gcp_project_id\n  name = var.gcp_logging_project_exclusion_name\n\n  description = \"Exclude GCE instance debug logs\"\n\n  # Exclude all DEBUG or lower severity messages relating to instances\n  filter = \"resource.type = gce_instance AND severity <= DEBUG\"\n}\n\n\n# End logging resources\n\n# Start network resources\n\nresource \"google_compute_network\" \"inspec-gcp-network\" {\n  project = var.gcp_project_id\n  name                    =  var.gcp_network_name\n  auto_create_subnetworks = \"false\"\n}\n\nresource \"google_compute_subnetwork\" \"inspec-gcp-subnetwork\" {\n  project = var.gcp_project_id\n  ip_cidr_range = \"10.2.0.0/29\" # i.e. 8 total & 6 usable IPs\n  name =  var.gcp_subnetwork_name\n  region = var.gcp_location\n  network = google_compute_network.inspec-gcp-network.self_link\n}\n\nresource \"google_compute_vpn_gateway\" \"inspec-gcp-vpn-gateway\" {\n  name = var.gcp_vpn_gateway_name\n  project = var.gcp_project_id\n  region = var.gcp_location\n  network = google_compute_network.inspec-gcp-network.self_link\n}\n\nresource \"google_compute_address\" \"inspec-gcp-address\" {\n  name = var.gcp_address_name\n  project = var.gcp_project_id\n  region = var.gcp_location\n}\n\nresource \"google_compute_address\" \"inspec-gcp-vpn-address\" {\n  name = var.gcp_vpn_address_name\n  project = var.gcp_project_id\n  region = var.gcp_location\n}\n\nresource \"google_compute_forwarding_rule\" \"inspec-gcp-fr-esp\" {\n  name  = var.gcp_fr_esp_name\n  project = var.gcp_project_id\n  region = var.gcp_location\n\n  ip_protocol = \"ESP\"\n  ip_address = google_compute_address.inspec-gcp-vpn-address.address\n  target = google_compute_vpn_gateway.inspec-gcp-vpn-gateway.self_link\n}\n\nresource \"google_compute_forwarding_rule\" \"inspec-gcp-fr-udp500\" {\n  name    = \"${var.gcp_fr_udp_name}-500\"\n  project = var.gcp_project_id\n  region  = var.gcp_location\n\n  ip_protocol = \"UDP\"\n  port_range  = \"500-500\"\n  ip_address  = google_compute_address.inspec-gcp-vpn-address.address\n  target      = google_compute_vpn_gateway.inspec-gcp-vpn-gateway.self_link\n}\n\nresource \"google_compute_forwarding_rule\" \"inspec-gcp-fr-udp4500\" {\n  name  = \"${var.gcp_fr_udp_name}-4500\"\n  project = var.gcp_project_id\n  region = var.gcp_location\n\n  ip_protocol = \"UDP\"\n  port_range = \"4500-4500\"\n  ip_address = google_compute_address.inspec-gcp-vpn-address.address\n  target = google_compute_vpn_gateway.inspec-gcp-vpn-gateway.self_link\n}\n\nresource \"google_compute_vpn_tunnel\" \"inspec-gcp-vpn-tunnel\" {\n  name = var.gcp_vpn_tunnel_name\n  project = var.gcp_project_id\n  region = var.gcp_location\n  peer_ip = google_compute_address.inspec-gcp-address.address\n  shared_secret = \"generic_secret\"\n  target_vpn_gateway = google_compute_vpn_gateway.inspec-gcp-vpn-gateway.self_link\n  remote_traffic_selector = [\"0.0.0.0/0\"]\n  local_traffic_selector  = [\"0.0.0.0/0\"]\n\n  depends_on = [\n    google_compute_forwarding_rule.inspec-gcp-fr-esp,\n    google_compute_forwarding_rule.inspec-gcp-fr-udp500,\n    google_compute_forwarding_rule.inspec-gcp-fr-udp4500,\n  ]\n}\n\n# End network resources\n\n# Start Google SQL resources\n\nresource \"google_sql_database_instance\" \"cloud-sql-db-instance\" {\n  project = var.gcp_project_id\n  name = var.gcp_db_instance_name\n  database_version = var.gcp_db_type\n  region = var.gcp_location\n\n  settings {\n    # Second-generation instance tiers are based on the machine\n    # type. See argument reference below.\n    tier = var.gcp_db_size\n  }\n}\n\nresource \"google_sql_database\" \"cloud-sql-db-name\" {\n  project = var.gcp_project_id\n  name      = var.gcp_db_name\n  instance  = google_sql_database_instance.cloud-sql-db-instance.name\n  charset   = \"utf8\"\n  collation = \"utf8_general_ci\"\n}\n\nresource \"google_sql_user\" \"cloud-sql-db-user\" {\n  project = var.gcp_project_id\n  name     = var.gcp_db_user_name\n  instance = google_sql_database_instance.cloud-sql-db-instance.name\n  password = var.gcp_db_user_password\n  host = \"example.com\"\n}\n\n# End Google SQL resources\n\n# Resources that used to be created via terraform modules that no longer work\nresource \"google_compute_firewall\" \"health-check-firewall\" {\n  project = var.gcp_project_id\n  name    = \"vm-hc-inspec-gcp\"\n  network = google_compute_network.inspec-gcp-network.name\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"80\"]\n  }\n\n  source_ranges = [\"130.211.0.0/22\", \"35.191.0.0/16\"]\n}\n\nresource \"google_compute_firewall\" \"default-ssh\" {\n  project = var.gcp_project_id\n  name    = \"vm-ssh-inspec-gcp\"\n  network = google_compute_network.inspec-gcp-network.name\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"22\"]\n  }\n\n  source_ranges = [\"0.0.0.0/0\"]\n  target_tags   = [\"allow-ssh\"]\n}\n\nresource \"google_compute_firewall\" \"inspec-gcp-tag-test-fw\" {\n  project = var.gcp_project_id\n  name    = \"inspec-gcp-tag-test-fw\"\n  network = google_compute_network.inspec-gcp-network.name\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"80\"]\n  }\n\n  source_ranges = [\"0.0.0.0/0\"]\n  target_tags   = [\"allow-gcp-inspec-app-mig2\",\"allow-gcp-inspec-app-mig3\"]\n  source_tags   = [\"allow-gcp-inspec-app-mig1\"]\n}\n\nresource \"google_compute_region_disk\" \"regiondisk\" {\n  project = var.gcp_project_id\n  name  = \"${var.gcp_compute_disk_name}-regional\"\n  type = var.gcp_compute_disk_type\n  region  = var.gcp_location\n  replica_zones = [var.gcp_kube_cluster_zone, var.gcp_kube_cluster_zone_extra1]\n}\n"
  },
  {
    "path": "test/integration/build/templates/gceme.sh.tpl",
    "content": "#!/bin/bash -xe\n\n# adapted from https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/blob/master/examples/simple/gceme.sh.tpl\n\napt-get update\napt-get install -y apache2 php5\n\ncat > /var/www/html/index.php <<'EOF'\n<?php\nfunction metadata_value($value) {\n$opts = [\n\"http\" => [\n\"method\" => \"GET\",\n\"header\" => \"Metadata-Flavor: Google\"\n]\n];\n$context = stream_context_create($opts);\n$content = file_get_contents(\"http://metadata/computeMetadata/v1/$value\", false, $context);\nreturn $content;\n}\n?>\n<!doctype html>\n<html>\n<head>\n<!-- Compiled and minified CSS -->\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/css/materialize.min.css\">\n<!-- Compiled and minified JavaScript -->\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/js/materialize.min.js\"></script>\n<title>Frontend Web Server</title>\n</head>\n<body>\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col s2\">&nbsp;</div>\n<div class=\"col s8\">\n<div class=\"card blue\">\n<div class=\"card-content white-text\">\n<div class=\"card-title\">Backend that serviced this request</div>\n</div>\n<div class=\"card-content white\">\n<table class=\"bordered\">\n<tbody>\n<tr>\n<td>Name</td>\n<td><?php printf(metadata_value(\"instance/name\")) ?></td>\n</tr>\n<tr>\n<td>ID</td>\n<td><?php printf(metadata_value(\"instance/id\")) ?></td>\n</tr>\n<tr>\n<td>Hostname</td>\n<td><?php printf(metadata_value(\"instance/hostname\")) ?></td>\n</tr>\n<tr>\n<td>Zone</td>\n<td><?php printf(metadata_value(\"instance/zone\")) ?></td>\n</tr>\n<tr>\n<td>Machine Type</td>\n<td><?php printf(metadata_value(\"instance/machine-type\")) ?></td>\n</tr>\n<tr>\n<td>Project</td>\n<td><?php printf(metadata_value(\"project/project-id\")) ?></td>\n</tr>\n<tr>\n<td>Internal IP</td>\n<td><?php printf(metadata_value(\"instance/network-interfaces/0/ip\")) ?></td>\n</tr>\n<tr>\n<td>External IP</td>\n<td><?php printf(metadata_value(\"instance/network-interfaces/0/access-configs/0/external-ip\")) ?></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"card blue\">\n<div class=\"card-content white-text\">\n<div class=\"card-title\">Proxy that handled this request</div>\n</div>\n<div class=\"card-content white\">\n<table class=\"bordered\">\n<tbody>\n<tr>\n<td>Address</td>\n<td><?php printf($_SERVER[\"HTTP_HOST\"]); ?></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n</div>\n<div class=\"col s2\">&nbsp;</div>\n</div>\n</div>\n</html>\nEOF\nsudo mv /var/www/html/index.html /var/www/html/index.html.old\n\n[[ -n \"${PROXY_PATH}\" ]] && mkdir -p /var/www/html/${PROXY_PATH} && cp /var/www/html/index.php /var/www/html/${PROXY_PATH}/index.php\n\nsystemctl enable apache2\nsystemctl restart apache2"
  },
  {
    "path": "test/integration/build/templates/nginx_upstream.sh.tpl",
    "content": "#!/bin/bash -xe\n\n# adapted from https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/blob/master/examples/simple/nginx_upstream.sh.tpl\n\napt-get update\napt-get install -y nginx\n\ncat - > /etc/nginx/sites-available/upstream <<EOF\nserver {\n    listen 80;\n    location / {\n        proxy_pass http://${UPSTREAM};\n    }\n}\nEOF\n\nunlink /etc/nginx/sites-enabled/default\nln -sf /etc/nginx/sites-available/upstream /etc/nginx/sites-enabled/upstream\n\nsystemctl enable nginx\nsystemctl reload nginx"
  },
  {
    "path": "test/integration/configuration/gcp_inspec_config.rb",
    "content": "# Configuration helper for GCP & Inspec\n# - Terraform expects a JSON variable file\n# - Inspec expects a YAML attribute file\n# This allows to store all transient parameters in one place.\n# If any of the @config keys are exported as environment variables in uppercase, these take precedence.\nrequire 'json'\nrequire 'yaml'\nrequire 'erb'\n\nmodule GCPInspecConfig\n  class Config\n\n    # helper method for adding random strings\n    def add_random_string(length = 25)\n      \"#{(0...length).map { (65 + rand(26)).chr }.join.downcase}\"\n    end\n\n    def initialize(seed = nil)\n      if seed != nil\n        srand(seed.to_i)\n      end\n      @config = {\n        # Generic GCP resource parameters\n        :gcp_organization_id => '827482578277',\n        :gcp_project_name => \"ppradhan\",\n        :gcp_project_id => \"ppradhan\",\n        :gcp_project_number => \"165434197229\",\n        # Determine the storage account name and the admin password\n        :gcp_location => \"europe-west2\",\n        :gcp_zone => \"europe-west2-a\",\n        # Cloud functions are only available in certain regions\n        :gcp_cloud_function_region => \"us-central1\",\n        :gcp_int_vm_name => \"gcp-inspec-int-linux-vm\",\n        :gcp_int_vm_size => \"f1-micro\",\n        :gcp_int_vm_image => \"ubuntu-os-cloud/ubuntu-1604-lts\",\n        :gcp_ext_vm_name => \"gcp-inspec-ext-linux-vm\",\n        :gcp_ext_vm_size => \"f1-micro\",\n        :gcp_ext_vm_image => \"ubuntu-os-cloud/ubuntu-1604-lts\",\n        :gcp_ext_compute_address_name => \"gcp-inspec-generic-ext-compute-address\",\n        :gcp_windows_int_vm_image => \"windows-cloud/windows-server-2016-dc-core-v20180313\",\n        :gcp_windows_int_vm_name => \"gcp-inspec-int-windows-vm\",\n        # Recommended to upgrade to a minimum of g1-small\n        :gcp_windows_int_vm_size => \"g1-small\",\n        :gcp_service_account_display_name => \"gcp-inspec-service-account\",\n        # We need to randomize the name of this role to avoid e.g.\n        #    Error 400: You can't create a role with role_id (gcp_inspec_project_custom_role_id) where there is an existing role with that role_id in a deleted state.\n        :gcp_project_iam_custom_role_id => \"gcp_inspec_custom_role_id_#{add_random_string}\",\n        :gcp_compute_disk_name => \"gcp-inspec-disk-#{add_random_string}\",\n        :gcp_compute_disk_type => \"pd-standard\",\n        :gcp_compute_disk_image => \"ubuntu-os-cloud/ubuntu-1604-lts\",\n        :gcp_ext_vm_data_disk_address_name => \"gcp-inspec-generic-ext-compute-data-disk-address\",\n        :gcp_ext_vm_data_disk_name => \"gcp-inspec-generic-ext-linux-vm-data-disk\",\n        :gcp_ext_vm_data_disk_size => \"f1-micro\",\n        :gcp_ext_vm_data_disk_image => \"ubuntu-os-cloud/ubuntu-1604-lts\",\n        :gcp_storage_bucket_name => \"gcp-inspec-storage-bucket-#{add_random_string}\",\n        :gcp_storage_bucket_acl => \"gcp-inspec-storage-bucket-acl-#{add_random_string}\",\n        :gcp_storage_bucket_binding => \"gcp-inspec-storage-bucket-iam-binding-#{add_random_string}\",\n        :gcp_storage_bucket_member => \"gcp-inspec-storage-bucket-iam-member-#{add_random_string}\",\n        :gcp_storage_bucket_policy => \"gcp-inspec-storage-bucket-iam-policy-#{add_random_string}\",\n        :gcp_storage_bucket_object => \"gcp-inspec-storage-bucket-object-#{add_random_string}\",\n        :gcp_storage_bucket_object_name => \"bucket-object-#{add_random_string}\",\n        # Google Load Balanced App example parameters\n        :gcp_lb_network => \"default\",\n        :gcp_lb_region => \"europe-west2\",\n        :gcp_lb_zone => \"europe-west2-a\",\n        :gcp_lb_zone_mig2 => \"europe-west2-b\",\n        :gcp_lb_zone_mig3 => \"europe-west2-c\",\n        :gcp_lb_fr_name => \"gcp-inspec-app-lb-fr-mig1\",\n        :gcp_lb_ilb_name => \"gcp-inspec-app-lb-internal\",\n        :gcp_lb_mig1_name => \"gcp-inspec-app-mig1\",\n        :gcp_lb_mig2_name => \"gcp-inspec-app-mig2\",\n        :gcp_lb_mig3_name => \"gcp-inspec-app-mig3\",\n        # GKE example parameters\n        :gcp_kube_cluster_name => \"gcp-inspec-kube-cluster\",\n        :gcp_kube_cluster_zone => \"europe-west2-a\",\n        :gcp_kube_cluster_size => 1,\n        :gcp_kube_cluster_zone_extra1 => \"europe-west2-b\",\n        :gcp_kube_cluster_zone_extra2 => \"europe-west2-c\",\n        :gcp_kube_cluster_master_user => \"gcp-inspec-kube-admin\",\n        :gcp_kube_cluster_master_pass => ((\"a\"..\"z\").to_a + (\"A\"..\"Z\").to_a + (\"0\"..\"9\").to_a + %w{! @ # $ % & / ( ) + ? *}).sample(20).join,\n        :gcp_kube_nodepool_name => \"default-pool\",\n        :gcp_kms_key_ring_policy_name => \"gcp-inspec-kms-key-ring-#{add_random_string}\",\n        :gcp_kms_key_ring_binding_member_name => \"gcp-inspec-kms-key-ring-#{add_random_string}\",\n        :gcp_kms_crypto_key_name_policy => \"gcp-inspec-kms-crypto-key-policy-#{add_random_string}\",\n        :gcp_kms_crypto_key_name_binding => \"gcp-inspec-kms-crypto-key-binding-#{add_random_string}\",\n        :gcp_logging_vm_name => \"gcp-inspec-logging-vm\",\n        :gcp_logging_bucket_name => \"gcp-inspec-logging-#{add_random_string}\",\n        :gcp_logging_project_sink_name => \"gcp-inspec-logging-project-#{add_random_string}\",\n        :gcp_logging_project_exclusion_name => \"gcp-inspec-project-exclusion-#{add_random_string}\",\n        :gcp_network_name => \"gcp-inspec-network\",\n        :gcp_subnetwork_name => \"gcp-inspec-subnetwork\",\n        :gcp_vpn_gateway_name => \"gcp-inspec-gateway\",\n        :gcp_vpn_tunnel_name => \"gcp-inspec-tunnel\",\n        :gcp_fr_esp_name => \"gcp-inspec-fr-esp\",\n        :gcp_fr_udp_name => \"gcp-inspec-fr-udp\",\n        :gcp_address_name => \"gcp-inspec-address\",\n        :gcp_vpn_address_name => \"gcp-inspec-vpn-address\",\n        :gcp_db_instance_name => \"gcp-inspec-db-#{add_random_string}\",\n        :gcp_db_name => \"inspecgcp\",\n        :gcp_db_type => \"MYSQL_5_7\",\n        :gcp_db_size => \"db-f1-micro\",\n        :gcp_db_user_name => \"inspecgcpuser\",\n        :gcp_db_user_password => ((\"a\"..\"z\").to_a + (\"A\"..\"Z\").to_a + (\"0\"..\"9\").to_a + %w{! @ # $ % & / ( ) + ? *}).sample(20).join,\n        :gcp_dns_zone_name => \"dnszone-#{add_random_string}.com.\",\n        :gcp_organization_iam_custom_role_id => \"org_role_#{add_random_string}\",\n        # Some resources require elevated privileges to create and therefore test against.  The below flag is used to controls\n        # both the terraform resource creation and the inspec test execution for those resources.  Default behaviour is for this to\n        # be disabled meaning a user needs no special GCP privileges to run the integration test pack.\n        #\n        # Note, would prefer to use boolean true or false here but will revisit for a future version of tf, see here for more detail: https://www.terraform.io/docs/configuration/variables.html\n        :gcp_enable_privileged_resources => 1,\n        # Some controls make use of the gcloud command and grep to discover live data to then test against.\n        # Only test execution is affected by this flag, resource creation via terraform is unaffected.\n        # Default behaviour is for this to be disabled, enable by changing the below flag.\n        :gcp_enable_gcloud_calls => 0\n      }\n      @config.each { |k, v| @config[k] = ENV[k.to_s.upcase] || v }\n    end\n\n    def config\n      @config\n    end\n\n    def load_mm_vars\n      loaded = YAML.load_file(File.join(File.dirname(__FILE__), 'mm-attributes.yml'))\n      @config = loaded.merge(@config)\n    end\n\n    # Create JSON for terraform\n    def store_json(file_name = \"gcp-inspec.tfvars.json\")\n      load_mm_vars\n      # These variables are used in InSpec controls but not terraform. Including them causes large warning messages about unused vars\n      unused_vars = [:gcp_enable_gcloud_calls, :gcp_kube_nodepool_name]\n      cfg = @config.clone\n      unused_vars.each do |unused_var|\n        cfg.delete(unused_var)\n      end\n      File.open(File.join(File.dirname(__FILE__), '..', 'build', file_name), \"w\") do |f|\n        f.write(cfg.to_json)\n      end\n    end\n\n    # Create YAML for inspec\n    def store_yaml(file_name = \"gcp-inspec-attributes.yaml\")\n      load_mm_vars\n      File.open(File.join(File.dirname(__FILE__), '..', 'build', file_name), \"w\") do |f|\n        f.write(@config.to_yaml)\n      end\n    end\n\n  end\nend"
  },
  {
    "path": "test/integration/configuration/mm-attributes.yml",
    "content": "ssl_policy:\n  name: 'inspec-gcp-ssl-policy'\n  min_tls_version: 'TLS_1_2'\n  profile: 'CUSTOM'\n  custom_feature: 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384'\n  custom_feature2: 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384'\n\ntopic:\n  name: 'inspec-gcp-topic'\n\nsubscription:\n  name: 'inspec-gcp-subscription'\n  ack_deadline_seconds: 20\n\nmanaged_zone:\n  name: 'inspec-gcp-managed-zone'\n  dns_name: 'my.domain.com.'\n  description: 'A test DNS zone'\n  label_key: key\n  label_value: 'value'\n\nrecord_set:\n  name: 'backend.my.domain.com.'\n  type: 'A'\n  ttl: 300\n  rrdatas1: '8.8.8.8'\n  rrdatas2: '8.8.4.4'\n\ninstance_group_manager:\n  name: 'inspec-gcp-igm'\n  base_instance_name: 'igm'\n  named_port_name: 'port'\n  named_port_port: 80\n\nautoscaler:\n  name: 'inspec-gcp-autoscaler'\n  max_replicas: 5\n  min_replicas: 1\n  cooldown_period: 60\n  cpu_utilization_target: 0.5\n\ntarget_pool:\n  name: 'inspec-gcp-target-pool'\n  session_affinity: CLIENT_IP\n\ntrigger:\n  trigger_template_project: trigger-project\n  trigger_template_branch: trigger-branch\n  trigger_template_repo: trigger-repo\n  filename: cloudbuild.yaml\n\nhealth_check:\n  name: inspec-gcp-health-check\n  timeout_sec: 10\n  check_interval_sec: 10\n  tcp_health_check_port: 80\n\nregion_health_check:\n  name: inspec-gcp-region-health-check\n  region: us-central1\n  timeout_sec: 10\n  check_interval_sec: 10\n  tcp_health_check_port: 80\n\nbackend_service:\n  name: inspec-gcp-backend-service\n  description: A description\n  port_name: http\n  protocol: HTTP\n  timeout_sec: 10\n  enable_cdn: true\n\nregion_backend_service_health_check:\n  name: inspec-gcp-region-health-check\n  timeout_sec: 15\n  check_interval_sec: 15\n  tcp_health_check_port: 81\n\nregion_backend_service:\n  name: inspec-gcp-region-backend-service\n  description: A regional description\n  protocol: TCP\n  timeout_sec: 15\n\nhttp_health_check:\n  name: inspec-gcp-http-health-check\n  request_path: /health_check\n  timeout_sec: 20\n  check_interval_sec: 20\n\nhttps_health_check:\n  name: inspec-gcp-https-health-check\n  request_path: /https_health_check\n  timeout_sec: 15\n  check_interval_sec: 15\n  unhealthy_threshold: 3\n\ninstance_template:\n  name: inspec-gcp-instance-template\n  description: A description of the instance template\n  instance_description: A description of the instance itself\n  machine_type: f1-micro\n  tag: foo\n  can_ip_forward: false\n  scheduling_automatic_restart: true\n  scheduling_on_host_maintenance: MIGRATE\n  disk_source_image: debian-cloud/debian-9\n  disk_auto_delete: true\n  disk_boot: true\n  network_interface_network: default\n  service_account_scope: storage-ro\n\nglobal_address:\n  name: inspec-gcp-global-address\n  ip_version: IPV6\n\nurl_map:\n  name: inspec-gcp-url-map\n  description: URL map description\n  host_rule_host: site.com\n  path_matcher_name: allpaths\n  path_rule_path: /home\n  test_host: test.com\n  test_path: /home\n\nhttp_proxy:\n  name: inspec-gcp-http-proxy\n  description: A HTTP proxy\n\nglobal_forwarding_rule:\n  name: inspec-gcp-global-forwarding-rule\n  port_range: 80-80\n\ntarget_tcp_proxy:\n  name: inspec-gcp-target-tcp-proxy\n  proxy_header: NONE\n  tcp_backend_service_name: gcp-inspec-tcp-backend-service\n\nroute:\n  name: inspec-gcp-route\n  dest_range: 15.0.0.0/24\n  next_hop_ip: 10.2.0.1\n  priority: 100\n\nrouter:\n  name: inspec-gcp-router\n  bgp_asn: 64514\n  bgp_advertise_mode: CUSTOM\n  bgp_advertised_group: \"ALL_SUBNETS\"\n  bgp_advertised_ip_range1: \"1.2.3.4\"\n  bgp_advertised_ip_range2: \"6.7.0.0/16\"\n\nsnapshot:\n  name: inspec-gcp-disk-snapshot\n  disk_name: inspec-snapshot-disk\n  disk_type: pd-standard\n  disk_image: debian-cloud/debian-10-buster-v20191014\n\nhttps_proxy:\n  name: inspec-gcp-https-proxy\n  description: A HTTPS target proxy\n\nssl_certificate:\n  name: inspec-gcp-ssl-certificate\n  description: A fake ssl certificate (DO NOT USE)\n  certificate: |\n    -----BEGIN CERTIFICATE-----\n    MIICqjCCAk+gAwIBAgIJAIuJ+0352Kq4MAoGCCqGSM49BAMCMIGwMQswCQYDVQQG\n    EwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjERMA8GA1UEBwwIS2lya2xhbmQxFTAT\n    BgNVBAoMDEdvb2dsZSwgSW5jLjEeMBwGA1UECwwVR29vZ2xlIENsb3VkIFBsYXRm\n    b3JtMR8wHQYDVQQDDBZ3d3cubXktc2VjdXJlLXNpdGUuY29tMSEwHwYJKoZIhvcN\n    AQkBFhJuZWxzb25hQGdvb2dsZS5jb20wHhcNMTcwNjI4MDQ1NjI2WhcNMjcwNjI2\n    MDQ1NjI2WjCBsDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xETAP\n    BgNVBAcMCEtpcmtsYW5kMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xHjAcBgNVBAsM\n    FUdvb2dsZSBDbG91ZCBQbGF0Zm9ybTEfMB0GA1UEAwwWd3d3Lm15LXNlY3VyZS1z\n    aXRlLmNvbTEhMB8GCSqGSIb3DQEJARYSbmVsc29uYUBnb29nbGUuY29tMFkwEwYH\n    KoZIzj0CAQYIKoZIzj0DAQcDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ\n    4mzkzTv0dXyB750fOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwaNQME4wHQYDVR0O\n    BBYEFKIQC3A2SDpxcdfn0YLKineDNq/BMB8GA1UdIwQYMBaAFKIQC3A2SDpxcdfn\n    0YLKineDNq/BMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhALs4vy+O\n    M3jcqgA4fSW/oKw6UJxp+M6a+nGMX+UJR3YgAiEAvvl39QRVAiv84hdoCuyON0lJ\n    zqGNhIPGq2ULqXKK8BY=\n    -----END CERTIFICATE-----\n  private_key: |\n    -----BEGIN EC PRIVATE KEY-----\n    MHcCAQEEIObtRo8tkUqoMjeHhsOh2ouPpXCgBcP+EDxZCB/tws15oAoGCCqGSM49\n    AwEHoUQDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ4mzkzTv0dXyB750f\n    OGN02HtkpBOZzzvUARTR10JQoSe2/5PIwQ==\n    -----END EC PRIVATE KEY-----\n\ndataset:\n  dataset_id: inspec_gcp_dataset\n  friendly_name: A BigQuery dataset test\n  description: Test BigQuery dataset description\n  location: EU\n  default_table_expiration_ms: 3600000\n  access_writer_role: WRITER\n  access_writer_special_group: projectWriters\n\nbigquery_table:\n  table_id: inspec_gcp_bigquery_table\n  description: A BigQuery table\n  expiration_time: 1738882264000\n  time_partitioning_type: DAY\n\nrepository:\n  name: inspec-gcp-repository\n\nfolder:\n  display_name: inspec-gcp-folder\n\ncloudfunction:\n  name: inspec-gcp-function\n  description: A description of the function\n  available_memory_mb: 128\n  trigger_http: true\n  timeout: 60\n  entry_point: hello\n  env_var_value: val1\n\nbackend_bucket:\n  name: inspec-gcp-backend-bucket\n  description: Backend bucket example\n  enable_cdn: true\n\nregional_node_pool:\n  name: inspec-gcp-regional-node-pool\n  cluster_name: inspec-gcp-regional-node-pool-cluster\n  node_count: 1\n  initial_node_count: 1\n\norg_sink:\n  name: inspec-gcp-org-sink\n  filter: resource.type = gce_instance\n\nstandardappversion:\n  version_id: v2\n  service: default\n  runtime: nodejs10\n  entrypoint: \"node ./app.js\"\n  port: \"8080\"\n\nml_model:\n  name: ml_model\n  region: us-central1\n  description: My awesome ML model\n  online_prediction_logging: true\n  online_prediction_console_logging: true\n\ndataproc_cluster:\n  name: inspec-dataproc-cluster\n  label_key: label\n  label_value: value\n  config:\n    master_config:\n      num_instances: 1\n      machine_type: n1-standard-1\n      boot_disk_type: pd-ssd\n      boot_disk_size_gb: 15\n    worker_config:\n      num_instances: 2\n      machine_type: n1-standard-1\n      boot_disk_size_gb: 20\n      num_local_ssds: 1\n    preemptible_worker_config:\n      num_instances: 0\n    software_config:\n      prop_key: \"dataproc:dataproc.allow.zero.workers\"\n      prop_value: \"true\"\n    gce_cluster_config:\n      tag: foo\n\nfolder_exclusion:\n  name: inspec-folder-exclusion\n  description: My folder exclusion description\n  filter: \"resource.type = gce_instance AND severity <= DEBUG\"\n\nfilestore_instance:\n  name: inspecgcp\n  zone: us-central1-b\n  tier: PREMIUM\n  fileshare_capacity_gb: 2660\n  fileshare_name: inspecgcp\n  network_name: default\n  network_mode: MODE_IPV4\n\nfolder_sink:\n  name: inspec-gcp-folder-sink\n  filter: resource.type = gce_instance AND severity >= ERROR\n\nruntimeconfig_config:\n  name: inspec-gcp-runtime-config\n  description: My runtime configurations\n\nruntimeconfig_variable:\n  name: prod-variables/hostname\n  text: example.com\n\nredis:\n  name: my-redis-cache\n  tier: STANDARD_HA\n  memory_size_gb: 1\n  region: us-central1\n  location_id: us-central1-a\n  alternative_location_id: us-central1-f\n  redis_version: REDIS_3_2\n  display_name: InSpec test instance\n  reserved_ip_range: \"192.168.0.0/29\"\n  label_key: key\n  label_value: value\n\nnetwork_endpoint_group:\n  name: inspec-gcp-endpoint-group\n  default_port: 90\n\nglobal_network_endpoint_group:\n  name: inspec-gcp-global-endpoint-group\n  network_endpoint_type: INTERNET_IP_PORT\n  default_port: 90\n\nnode_template:\n  name: inspec-node-template\n  label_key: key\n  label_value: value\n\nnode_group:\n  name: inspec-node-group\n  description: A description of the node group\n  size: 0\n\nrouter_nat:\n  name: inspec-router-nat\n  nat_ip_allocate_option: AUTO_ONLY\n  source_subnetwork_ip_ranges_to_nat: ALL_SUBNETWORKS_ALL_IP_RANGES\n  min_ports_per_vm: 2\n  log_config_enable: true\n  log_config_filter: ERRORS_ONLY\n\nservice:\n  name: maps-android-backend.googleapis.com\n\nspannerinstance:\n  config: regional-us-east1\n  name: spinstance\n  display_name: inspectest\n  num_nodes: 1\n  label_key: env\n  label_value: test\n\nspannerdatabase:\n  name: spdatabase\n  instance: spinstance\n  ddl: \"CREATE TABLE test (test STRING(MAX),) PRIMARY KEY (test)\"\n\nscheduler_job:\n  # region must match where the apengine instance is deployed\n  region: us-central1\n  name: job-name\n  description: A description\n  schedule: \"*/8 * * * *\"\n  time_zone: America/New_York\n  http_method: POST\n  http_target_uri: https://example.com/ping\n\nservice_perimeter:\n  name: restrict_all\n  title: restrict_all\n  restricted_service: storage.googleapis.com\n  policy_title: policytitle\n\nfirewall:\n  name: inspec-gcp-firewall\n  source_tag: some-tag\n\naddress:\n  name: inspec-gcp-global-address\n  address_type: INTERNAL\n  address: \"10.2.0.3\"\n\ninstance_group:\n  name: inspec-instance-group\n  description: My instance group for testing\n  named_port_name: https\n  named_port_port: 8080\n\ninstance:\n  name: inspec-instance\n  machine_type: n1-standard-1\n  tag_1: foo\n  tag_2: bar\n  metadata_key: '123'\n  metadata_value: asdf\n  sa_scope: https://www.googleapis.com/auth/compute.readonly\n  startup_script: \"echo hi > /test.txt\"\n\nnetwork:\n  name: inspec-network\n  routing_mode: REGIONAL\n\nsubnetwork:\n  name: inspec-subnet\n  ip_cidr_range: \"10.2.0.0/16\"\n  log_interval: INTERVAL_10_MIN\n  log_sampling: .5\n  log_metadata: INCLUDE_ALL_METADATA\n\nrigm:\n  name: inspec-rigm\n  base_instance_name: rigm1\n  target_size: 1\n  named_port_name: https\n  named_port_port: 8888\n  healing_delay: 300\n\nvpn_tunnel:\n  name: inspec-vpn-tunnel\n  peer_ip: \"15.0.0.120\"\n  shared_secret: super secret\n\nproject_sink:\n  name: inspec-gcp-org-sink\n  filter: resource.type = gce_instance AND severity = DEBUG\n\nproject_exclusion:\n  name: inspec-project-exclusion\n  description: My project exclusion description\n  filter: resource.type = gce_instance AND severity <= DEBUG\n\nalert_policy:\n  display_name: Display\n  combiner: OR\n  condition_display_name: condition\n  condition_filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"\n  condition_duration: 60s\n  condition_comparison: COMPARISON_GT\n\ndns_managed_zone:\n  # managed zone dns_name must be randomly generated, so it happens in the other script\n  name: example-zone\n  description: example description\n  dnssec_config_state: 'on'\n\nlogging_metric:\n  name: some/metric\n  filter: 'resource.type=gae_app AND severity>=ERROR'\n  metric_kind: DELTA\n  value_type: INT64\n\ncompute_image:\n  name: inspec-image\n  source: https://storage.googleapis.com/bosh-gce-raw-stemcells/bosh-stemcell-97.98-google-kvm-ubuntu-xenial-go_agent-raw-1557960142.tar.gz\n\nsecurity_policy:\n  name: sec-policy\n  action: deny(403)\n  priority: \"1000\"\n  ip_range: \"9.9.9.0/24\"\n  description: my description\n\nmemcache_instance:\n  name: mem-instance\n\naccelerator_type:\n  name: accelerator_id\n\nglobal_operation:\n  name: operation-1635274037755-5cf45e8217d56-c081cd9a-c3ea7346\n  operationType: \"compute.externalVpnGateways.insert\"\n\ninterconnect_location:\n  name: akl-zone1-1353\n  facility_provider_facility_id: 'Auckland - Albany'\n  facility_provider: Vocus\n\nimage_family_views:\n  zone: us-central1-c\n  name: image-1\n  source_type: RAW\n  status: READY\n  archive_size_bytes: 539099200\n  disk_size_gb: 3\n  family: test\n\nlicense_code:\n  name: akl-zone1-1353\n\nregion_instance_group:\n  name: instance-group-2\n  region: us-central1\n  size: 1\n  named_port_name: 'port'\n  named_port_port: 80\n\ncontainer_engine_versions:\n  valid_master_version: '1.21.5-gke.1802'\n  valid_node_version: '1.21.5-gke.1802'\n\nsql_database_flag:\n  name : audit_log\n  type : STRING\n  applies_to: MYSQL_5_6\n  allowed_string_values: ON\n  requires_restart: true\n\nregion_operation:\n  name: operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5\n  region: us-central1\n  operation_type: \"compute.instanceGroupManagers.insert\"\n  status: DONE\n  progress: 100\n\nsql_connect:\n  region: us-central1\n  database_version: POSTGRES_13\n  backend_type: SECOND_GEN\n  cert_serial_number: 0\n  common_name: \"Test-10001\"\n  sha1_fingerprint: \"80c5c611c0a591db967c7dda3467e23127288fed\"\n  instance: test-pg\n\nzone_operation:\n  name: operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69\n  zone: us-central1-a\n  operation_type: \"compute.instanceGroupManagers.insert\"\n  status: DONE\n  progress: 100\n\npublic_delegated_prefix:\n  name: test\n\nsql_operation:\n  name: e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5\n  status: DONE\n  progress: 100\n\ndlp:\n  name: \"i-inspec-gcp-dlp\"\n  location: \"us-east-2\"\n  type: \"INSPECT_JOB\"\n  state: \"ACTIVE\"\n  inspectDetails:\n    requestedOptions:\n      snapshotInspectTemplate: \"\"\n      jobConfig:\n        storageConfig:\n          hybridOptions:\n            description: \"test\"\n            tableOptions: \"\"\n  job_attribute_name: \"job_attribute-1\"\n  job_trigger_status: \"HEALTHY\"\n  job_trigger_name: \"name1\"\n  job_trigger_display_name: \"dp\"\n  job_trigger_description: \"description\"\n  description: \"Description\"\n  display_name: \"Displayname\"\n  deidentify_templates:\n    name: \"dlp-template-inspec\"\n    location: \"europe-west2\"\n    type: \"Infotype\"\n\nproject_location_repository:\n  name : \"projects/ppradhan/locations/us-central1/repositories/test-repository-1\"\n  parent : \"projects/ppradhan/locations/us-central1\"\n  display_name: \"test-repository-1\"\n  location: \"us-central1\"\n  format: \"DOCKER\"\n  project_id: \"ppradhan\"\n\ncloud_composer_v1:\n  name : \"example-composer-env\"\n  region : \"us-central1\"\n  image_version : \"composer-1.20.12-airflow-2.4.3\"\n\ncompute_service_attachment_conf:\n  compute_service_attachment_name: \"my-psc-ilb\"\n  description: \"my-psc-ilb is a private service connection for the internal load balancer\"\n  region: \"us-central1\"\n  enable_proxy_protocol: true\n  connection_preference: \"ACCEPT_AUTOMATIC\"\n  psc_ilb_consumer_address_name: \"my-psc-ilb-consumer-address\"\n  subnetwork_id: \"default\"\n  address_type: \"INTERNAL\"\n  psc_ilb_consumer_name: \"my-psc-ilb-consumer-forwarding-rule\"\n  network_id: \"default\"\n  psc_ilb_target_service_name: \"producer-forwarding-rule\"\n  load_balancing_scheme: \"INTERNAL\"\n  all_ports: true\n  producer_service_backend_name: \"producer-backend-service\"\n  producer_service_health_check_name: \"producer-health-check\"\n  producer_service_health_check_port: \"80\"\n  psc_ilb_network_name: \"psc-ilb-network\"\n  auto_create_subnetworks: false\n  psc_ilb_producer_subnetwork_name: \"psc-ilb-producer-subnetwork\"\n  subnetwork_ip_cidr_range: \"10.0.0.0/16\"\n  psc_ilb_nat_name: \"psc-ilb-nat\"\n  purpose: \"PRIVATE_SERVICE_CONNECT\"\n  nat_ip_cidr_range: \"10.1.0.0/16\"\n\norganization_envgroup:\n  project: \"organizations/ppradhan\"\n  name : \"test-env-group\"\n  hostnames: [\"34.95.97.227.nip.io\"]\n  parent : \"organizations/ppradhan/envgroups\"\n  state : \"ACTIVE\"\n  created_at : \"1698227493454\"\n\napigee_organization_envgroup_attachment:\n  envgroup_id: \"organizations/ppradhan/envgroups/test-env-group\"\n  environment: \"test-env\"\n\nvpn_gateway:\n  project : \"ppradhan\"\n  region : \"us-central1\"\n  vpn_gateway : \"4406948336461056012\"\n  kind : \"value_kind\"\n  id : \"value_id\"\n  creation_timestamp : \"value_creationtimestamp\"\n  name : \"inspec-vpn-gateway\"\n  description : \"Inspec Test HA VPN Gateway\"\n  network : \"gcp-inspec-network\"\n  self_link : \"value_selflink\"\n  label_fingerprint : \"value_labelfingerprint\"\n  stack_type : \"IPV4_ONLY\"\n\nregion_network_endpoint_group:\n  name: \"inspec\"\n  region: \"us-central1\"\n  network_endpoint_type: \"PRIVATE_SERVICE_CONNECT\"\n  target_service: \"us-central1-logging.googleapis.com\"\n\napigee_organization_apis:\n  name : \"firstproxy\"\n  parent : \"organizations/ppradhan\"\n  api_proxy_type : \"PROGRAMMABLE\"\n\nsecrets_manager_v1:\n  secret_id: \"inspec-gcp-secret\"\n\ncrypto_key_version:\n  key_ring: \"gcp-inspec-kms-key-ring\"\n  crypto_key: \"gcp-inspec-kms-crypto-key-policy\"\n  region: \"us-central-1\"\n\ncompute_machine_images:\n  name: \"image-1\"\n  instance: \"inspec-test-instance\"\n\ncompute_node_template:\n  name: \"terraform-test-tmpl\"\n  region: \"us-central1\"\n  node_type: \"c2-node-60-240\"\n\nnetwork_attachments:\n  name: \"inspec-test\"\n  region: \"us-central1\"\n  network: \"inspec-network\"\n\ncompute_target_instance:\n  name: \"example-target\"\n  image_family: \"debian-11\"\n  image_project: \"debian-cloud\"\n  zone: \"asia-east1-a\"\n  machine_type: \"e2-medium\"\n  target_vm_name: \"target-vm\"\n\ncompute_interconnect_attachment:\n  name: \"on-prem-attachment\"\n  edge_availability_domain: \"AVAILABILITY_DOMAIN_1\"\n  type: \"PARTNER\"\n  router_name: \"router-1-ic-attachment\"\n  mtu: 1500\n  network_name: \"network-1-ic-attachment\"\n  bgp_asn: 16550\n\ncompute_packet_mirroring:\n  name: inspec-mirroring\n  region: \"us-central1\"\n  network: \"inspec-network\"\n\ncompute_region_url_map:\n  region: us-central1\n  name: example-regionurlmap\n  description: a description\n\ncompute_region_ssl_policy:\n  name: \"basic-ssl-policy\"\n  profile: \"MODERN\"\n  region: \"us-central1\"\n\ncompute_target_vpn_gateway:\n  name: \"vpn-1\"\n  network: \"inspec-network\"\n  region: \"us-central1\"\n  static_ip: \"vpn-static-ip\"\n  tunnel: \"tunnel1\"\n\ncompute_region_commitment:\n  name: \"my-region-commitment\"\n  plan: \"THIRTY_SIX_MONTH\"\n\ncompute_target_grpc_proxy:\n  name: \"inspec-test-proxy\"\n  validate_for_proxyless: true\n  url_map_name: \"urlmap\"\n  description: \"a description\"\n  backend_service_name: \"backend\"\n  port_name: \"grpc\"\n  protocol: \"GRPC\"\n  timeout_sec: 10\n  health_check_name: \"healthcheck\"\n\ncompute_target_ssl_proxy:\n  name: \"test-proxy\"\n  ssl_certificate_name: \"default-cert\"\n  protocol: \"SSL\"\n  health_check_name: \"health-check\"\n  backend_service_name: \"backend-service\"\n\nbigtable_instance_cluster:\n  name: \"inspec-test\"\n  cluster: \"inspec-test-c1\"\n  storage_type: \"SSD\"\n\ndataproc_metastore_service:\n  name: \"metastore-srv\"\n  location: \"us-central1\"\n  tier: \"DEVELOPER\"\n  version: \"3.1.2\"\n  metastore_type: \"DATAPROC_METASTORE\"\n\ndataproc_metastore_federation:\n  federation_id: \"inspec-federation\"\n  location: \"us-central1\"\n\napigee_instance_attachment:\n  name : \"inspec-test-instance-attachment\"\n  location: \"us-central\"\n  instance : \"inspec-test-instance\"\n  environment: \"inspec-test-environment\"\n  description: \"InSpec Apigee Instances\"\n  parent : \"organizations/ppradhan\"\n  api_proxy_type : \"PROGRAMMABLE\"\n\ndata_fusion_instance:\n  name: \"inspec-instance\"\n  location: \"us-central1\"\n  type: \"DEVELOPER\"\n\ncloud_run_jobs:\n  name: \"inspec-tutorial1-20230915-182543\"\n  location: \"us-central1\"\n  deletion_protection: \"false\"\n  image: \"us-central1-docker.pkg.dev/ppradhan/nas/balasubs_tutorial1_20230915_182543:latest\"\n\ndataproc_serverless_batches:\n  name: \"inspec-test-batch-0052\"\n  location: \"us-central1\"\n  main_class: \"org.apache.spark.examples.SparkPi\"\n  args: \"10\"\n  path: \"file:///usr/lib/spark/examples/jars/spark-examples.jar\"\n\nmonitoring_group:\n  name: \"inspec-test-group\"\n  filter: \"resource.metadata.name = has_substring(\\\"inspec\\\")\"\n"
  },
  {
    "path": "test/integration/verify/controls/container_cluster.rb",
    "content": "title 'GKE Container Cluster Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: '', description: 'The GKE cluster name.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: '', description: 'The GKE cluster zone.')\ngcp_kube_cluster_master_user = input(:gcp_kube_cluster_master_user, value: '', description: 'The GKE cluster master user.')\ngcp_kube_cluster_master_pass = input(:gcp_kube_cluster_master_pass, value: '', description: 'The GKE cluster master password.')\ngcp_kube_cluster_zone_extra1 = input(:gcp_kube_cluster_zone_extra1, value: '', description: 'The GKE cluster secondary zone.')\ngcp_kube_cluster_zone_extra2 = input(:gcp_kube_cluster_zone_extra2, value: '', description: 'The GKE cluster tertiary zone.')\n\n\ncontrol 'gcp-gke-container-cluster-1.0' do\n\n  impact 1.0\n  title 'Ensure GKE Container Cluster was built correctly'\n\n  describe google_container_cluster(project: gcp_project_id, location: gcp_kube_cluster_zone, name: gcp_kube_cluster_name) do\n    it { should exist }\n    its('name') { should eq gcp_kube_cluster_name }\n    its('location') { should match gcp_kube_cluster_zone }\n\n    # the cluster should not be tainted\n    its('tainted?') { should be false }\n\n    # the cluster should not be untrusted\n    its('untrusted?') { should be false }\n\n    # the cluster should be in running state\n    its('status') { should eq 'RUNNING' }\n\n    # locations should match those requested\n    its('locations.sort'){should cmp [ gcp_kube_cluster_zone, gcp_kube_cluster_zone_extra1, gcp_kube_cluster_zone_extra2 ].sort}\n\n    # importantly for the cluster, check the kube master user/password\n    its('master_auth.username'){ should eq gcp_kube_cluster_master_user}\n    its('master_auth.password'){ should eq gcp_kube_cluster_master_pass}\n\n    # no special network settings currently applied\n    its('network'){should eq \"default\"}\n    its('subnetwork'){should eq \"default\"}\n\n    # check node configuration settings\n    its('node_config.disk_size_gb'){should eq 100}\n    its('node_config.image_type'){should eq \"COS\"}\n    its('node_config.machine_type'){should eq \"n1-standard-1\"}\n\n    # check ipv4 cidr size\n    its('node_ipv4_cidr_size'){should eq 24}\n\n    # check there are two node pools in the cluster\n    its('node_pools.count'){should eq 2}\n\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/container_clusters.rb",
    "content": "title 'Retrieve  all GCP Container Clusters for a project and zone'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: '', description: 'The GKE cluster name.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: '', description: 'The GKE cluster zone.')\n\ncontrol 'gcp-container-clusters-1.0' do\n\n  impact 1.0\n  title 'Ensure container clusters have the correct properties in bulk.'\n\n  describe google_container_clusters(project: gcp_project_id, location: gcp_kube_cluster_zone) do\n    it { should exist }\n    its('count') { should be <= 10}\n    its('cluster_names') { should include gcp_kube_cluster_name }\n    its('cluster_statuses') { should include \"RUNNING\" }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/container_nodepool.rb",
    "content": "title 'GKE Container Node Pool Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: '', description: 'The GKE cluster name.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: '', description: 'The GKE cluster zone.')\ngcp_kube_cluster_size = input(:gcp_kube_cluster_size, value: '', description: 'The GKE cluster initial size.')\ngcp_kube_nodepool_name = input(:gcp_kube_nodepool_name, value:'', description: 'The GKE cluster node pool name.')\n\ncontrol 'gcp-gke-container-node-pool-1.0' do\n\n  impact 1.0\n  title 'Ensure GKE Container Node Pool was built correctly'\n\n  describe google_container_node_pool(project: gcp_project_id, location: gcp_kube_cluster_zone, cluster_name: gcp_kube_cluster_name, nodepool_name: gcp_kube_nodepool_name) do\n    it { should exist }\n    its('name') { should eq gcp_kube_nodepool_name }\n\n    # the cluster should not be tainted\n    its('tainted?') { should be false }\n\n    # the cluster should not be untrusted\n    its('untrusted?') { should be false }\n\n    # the cluster should be in running state\n    its('status') { should eq 'RUNNING' }\n\n    # check node pool configuration settings\n    its('config.disk_size_gb'){should eq 100}\n    its('config.image_type'){should eq \"COS\"}\n    its('config.machine_type'){should eq \"n1-standard-1\"}\n\n    # default initial node count should be set via the configuration file\n    its('initial_node_count'){should eq gcp_kube_cluster_size}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/container_nodepools.rb",
    "content": "title 'Retrieve  all GCP Container Cluster Node Pools for a project, cluster and zone'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: '', description: 'The GKE cluster name.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: '', description: 'The GKE cluster zone.')\ngcp_kube_nodepool_name = input(:gcp_kube_nodepool_name, value:'', description: 'The GKE cluster node pool name.')\n\ncontrol 'gcp-container-cluster-node-pools-1.0' do\n\n  impact 1.0\n  title 'Ensure container cluster node pools have the correct properties in bulk.'\n\n  describe google_container_node_pools(project: gcp_project_id, location: gcp_kube_cluster_zone, cluster_name: gcp_kube_cluster_name) do\n    it { should exist }\n    its('count') { should be <= 10}\n    its('node_pool_names') { should include gcp_kube_nodepool_name }\n    its('node_pool_statuses') { should include \"RUNNING\" }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/gcp_project.rb",
    "content": "title 'Project Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_project_name = input(:gcp_project_name, value: '', description: 'The GCP project name.')\ngcp_project_number = input(:gcp_project_number, value: '', description: 'The GCP project number.')\n\ncontrol 'gcp-project' do\n\n  impact 1.0\n  title 'Ensure that the project was created and has the correct settings '\n\n  describe google_project(project: gcp_project_id) do\n    it { should exist }\n    its('name') { should eq gcp_project_name }\n    its('project_number') { should eq gcp_project_number.to_i }\n    its('lifecycle_state') { should eq \"ACTIVE\" }\n  end\n\n  describe google_project(project: gcp_project_number.to_i) do\n    it { should exist }\n    its('name') { should eq gcp_project_name }\n    its('project_number') { should eq gcp_project_number.to_i }\n    its('lifecycle_state') { should eq \"ACTIVE\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/generic_external_vm.rb",
    "content": "title 'External Virtual Machine Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\ngcp_ext_vm_name = input(:gcp_ext_vm_name, value: '', description: 'The GCP VM name.')\ngcp_ext_vm_size = input(:gcp_ext_vm_size, value: '', description: 'The GCP VM machine type or size.')\n#gcp_int_vm_image = input(:gcp_ext_vm_image, value: '', description: 'The GCP VM image.')\n\ncontrol 'gcp-generic-vm-linux-external-1.0' do\n\n  impact 1.0\n  title 'Ensure External VM was built and has the correct properties'\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: gcp_ext_vm_name) do\n    it { should exist }\n    its('name') { should eq gcp_ext_vm_name }\n    its('zone') { should match gcp_zone }\n\n    # the machine should not be tainted\n    its('tainted?') { should be false }\n\n    # the machine should not be untrusted\n    its('untrusted?') { should be false }\n\n    its('machine_size') { should eq gcp_ext_vm_size}\n    # can't easily get the os family from running instance...\n    #its('source_image') { should eq  gcp_int_vm_image}\n\n    # we get Skylake and Broadwell for example\n    its('cpu_platform') { should match \"Intel\" }\n\n    its('status') { should eq 'RUNNING' }\n\n    # see if the disk is present with the correct name\n    its('disk_count'){should eq 1}\n    # see the internal vm controls for more on the below\n    #its('disks_source') { should eq gcp_ext_vm_name }\n    #it { should disks_source_name_equal(0,gcp_ext_vm_name) }\n    its('first_disks_source_name') { should eq gcp_ext_vm_name }\n    its('first_disks_first_license') { should match \"ubuntu\"}\n\n    # confirm there is only one network interface attached\n    its('network_interfaces_count'){should eq 1}\n\n    # uniquely for the external VM, ensure we have a public IP address\n    its('first_network_interface_nat_ip_exists'){ should be true }\n    its('first_network_interface_name'){ should eq \"external-nat\" }\n    its('first_network_interface_type'){ should eq \"one_to_one_nat\" }\n\n    its('labels_keys') { should_not include 'label_does_not_exist' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/generic_external_vm_data_disk.rb",
    "content": "title 'External Virtual Machine Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\ngcp_ext_vm_data_disk_name = input(:gcp_ext_vm_data_disk_name, value: '', description: 'The GCP VM name.')\ngcp_ext_vm_data_disk_size = input(:gcp_ext_vm_size, value: '', description: 'The GCP VM machine type or size.')\ngcp_compute_disk_name = input(:gcp_compute_disk_name, value: '', description: 'The GCP VM attached disk name.')\n\ncontrol 'gcp-generic-vm-linux-external-data-disk-1.0' do\n\n  impact 1.0\n  title 'Ensure External VM was built with attached data disk and has the correct properties'\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: gcp_ext_vm_data_disk_name) do\n    it { should exist }\n    its('name') { should eq gcp_ext_vm_data_disk_name }\n    its('zone') { should match gcp_zone }\n\n    # the machine should not be tainted\n    its('tainted?') { should be false }\n\n    # the machine should not be untrusted\n    its('untrusted?') { should be false }\n\n    its('machine_size') { should eq gcp_ext_vm_data_disk_size}\n    # can't easily get the os family from running instance...\n    #its('source_image') { should eq  gcp_int_vm_image}\n\n    # we get Skylake and Broadwell for example\n    its('cpu_platform') { should match \"Intel\" }\n\n    its('status') { should eq 'RUNNING' }\n\n    # see if the disks are present and correct\n    its('disk_count'){should eq 2}\n    its('first_disks_source_name') { should eq gcp_ext_vm_data_disk_name }\n    its('first_disks_first_license') { should match \"ubuntu\"}\n    # properties specific to the VM with attached disk\n    its('second_disks_device_name') { should eq gcp_compute_disk_name }\n    its('second_disks_source_name') { should eq gcp_compute_disk_name }\n    its('second_disks_first_license') { should match \"ubuntu\"}\n\n    # confirm there is only one network interface attached\n    its('network_interfaces_count'){should eq 1}\n\n    # uniquely for the external VM, ensure we have a public IP address\n    its('first_network_interface_nat_ip_exists'){ should be true }\n    its('first_network_interface_name'){ should eq \"external-nat\" }\n    its('first_network_interface_type'){ should eq \"one_to_one_nat\" }\n    its('labels_keys') { should_not include 'non_existing_label' }\n\n  end\n\nend\n"
  },
  {
    "path": "test/integration/verify/controls/generic_iam_role.rb",
    "content": "title 'IAM Role Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_project_iam_custom_role_id = input(:gcp_project_iam_custom_role_id, value: '', description: 'The GCP IAM custom role identifier.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources,value:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-generic-iam-role' do\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure that the IAM role is correctly set up'\n\n  describe google_project_iam_custom_role(project: gcp_project_id, name: gcp_project_iam_custom_role_id ) do\n    # stage of a role in the launch lifecycle, should be GA (can be ALPHA, BETA, or GA)\n    its('stage') { should eq \"GA\" }\n    its('name') { should match gcp_project_iam_custom_role_id }\n    its('included_permissions') { should eq [\"iam.roles.list\"] }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/generic_image_family.rb",
    "content": "title 'Image Family'\n\ngcp_int_vm_image = input(:gcp_ext_vm_image, value: '', description: 'The GCP VM image.')\n\ncontrol 'gcp-generic-image-family-1.0' do\n\n  impact 1.0\n  title 'Ensure that the image is correct'\n\n  describe google_compute_image(project: gcp_int_vm_image.split('/').first, name: gcp_int_vm_image.split('/').last ) do\n\n    its('name') { should match \"ubuntu\" }\n    its('family') { should match \"ubuntu\" }\n    # the image should be available for use\n    its('status') { should eq \"READY\" }\n\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/generic_internal_vm.rb",
    "content": "title 'Internal Virtual Machine Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\ngcp_int_vm_name = input(:gcp_int_vm_name, value: '', description: 'The GCP VM name.')\ngcp_int_vm_size = input(:gcp_int_vm_size, value: '', description: 'The GCP VM size.')\n#gcp_int_vm_image = input(:gcp_int_vm_image, value: '', description: 'The GCP VM image.')\n\ncontrol 'gcp-generic-vm-linux-internal-1.0' do\n\n  impact 1.0\n  title 'Ensure Internal VM was built and has the correct properties'\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: gcp_int_vm_name) do\n    it { should exist }\n    its('name') { should eq gcp_int_vm_name }\n    its('zone') { should match gcp_zone }\n\n    # the machine should not be tainted\n    its('tainted?') { should be false }\n\n    # the machine should not be untrusted\n    its('untrusted?') { should be false }\n\n    its('machine_type') { should match  gcp_int_vm_size}\n    # can't easily get the os family from running instance...\n    #its('source_image') { should eq  gcp_int_vm_image}\n\n    # we get Skylake and Broadwell for example\n    its('cpu_platform') { should match \"Intel\" }\n    its('status') { should eq 'RUNNING' }\n\n    # see if the disk is present with the correct name\n    its('disk_count'){should eq 1}\n\n    # confirm there is only one network interface attached\n    #     it { should have_network_tag('test') }\n    # qn here on how best to pass arguments??\n    #\n#    its('disks_source(0)') { should eq gcp_int_vm_name }\n#    it { should disks_source_name_equal(0,gcp_int_vm_name) }\n    its('first_disks_source_name') { should eq gcp_int_vm_name }\n    its('first_disks_first_license') { should match \"ubuntu\"}\n\n  end\n\nend\n"
  },
  {
    "path": "test/integration/verify/controls/generic_public_ip_address.rb",
    "content": "title 'Public IP Address Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: '', description: 'The GCP region being used.')\ngcp_ext_compute_address_name = input(:gcp_ext_compute_address_name,value: '',description:'The GCP compute address.')\ngcp_ext_vm_name = input(:gcp_ext_vm_name, value: '', description: 'The GCP generic external VM name.')\n\ncontrol 'gcp-generic-public-ip-address-1.0' do\n\n  impact 1.0\n  title 'Ensure that the Public IP Address has been configured correctly'\n\n  describe google_compute_address(project: gcp_project_id, location: gcp_location, name: gcp_ext_compute_address_name) do\n\n    its('name') { should eq gcp_ext_compute_address_name }\n\n    # the actual ip address should exist\n    its('address_ip_exists')  { should be true }\n\n    # the address should not be tainted\n    its('tainted?') { should be false }\n\n    # the address should not be untrusted\n    its('untrusted?') { should be false }\n\n    its('region') { should match gcp_location}\n\n    # we attached this to the external generic vm so the status should be \"in_use\"\n    its('status') { should eq \"IN_USE\" }\n\n    #in this case the generic external VM should be listed as the only user\n    its('user_count') { should eq 1 }\n    its('user_resource_name') { should eq gcp_ext_vm_name}\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/generic_windows_internal_vm.rb",
    "content": "title 'Internal Windows Virtual Machine Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\ngcp_windows_int_vm_name = input(:gcp_windows_int_vm_name, value: '', description: 'The GCP VM name.')\ngcp_windows_int_vm_size = input(:gcp_windows_int_vm_size, value: '', description: 'The GCP VM size.')\n#gcp_windows_int_vm_image = input(:gcp_int_vm_size, value: '', description: 'The GCP VM size.')\n\ncontrol 'gcp-generic-vm-windows-internal-1.0' do\n\n  impact 1.0\n  title 'Ensure Windows Internal VM was built and has the correct properties'\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: gcp_windows_int_vm_name) do\n    it { should exist }\n    its('name') { should eq gcp_windows_int_vm_name }\n    its('zone') { should match gcp_zone }\n\n    # the machine should not be tainted\n    its('tainted?') { should be false }\n\n    # the machine should not be untrusted\n    its('untrusted?') { should be false }\n\n    its('machine_size') { should eq gcp_windows_int_vm_size}\n    # can't easily get the os family from running instance...\n    #its('source_image') { should eq  gcp_int_vm_image}\n\n    # we get Skylake and Broadwell for example\n    its('cpu_platform') { should match \"Intel\" }\n    its('status') { should eq 'RUNNING' }\n\n    # see if the disk is present with the correct name\n    its('disk_count'){should eq 1}\n    its('first_disks_source_name') { should eq gcp_windows_int_vm_name }\n    its('first_disks_first_license') { should match \"windows\"}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_access_level.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_access_level resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\n\ncontrol 'google_access_context_manager_access_level-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_access_level resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  policy_name = google_access_context_manager_access_policies(org_id: gcp_organization_id).names.first\n\n  describe google_access_context_manager_access_level(parent: policy_name, name: \"ip_subnet\") do\n    it { should exist }\n    its('title') { should cmp \"ip_subnet\" }\n    its('basic.conditions.size') { should cmp 1 }\n    its('basic.conditions.first.ip_subnetworks') { should include \"192.0.2.0/24\" }\n  end\n\n  describe google_access_context_manager_access_level(parent: policy_name, name: \"none\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_access_levels.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_access_levels resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\n\ncontrol 'google_access_context_manager_access_levels-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_access_levels resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  policy_name = google_access_context_manager_access_policies(org_id: gcp_organization_id).names.first\n\n  describe google_access_context_manager_access_levels(parent: policy_name) do\n    its('names') { should include \"ip_subnet\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_access_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_access_policies resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\ncontrol 'google_access_context_manager_access_policies-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_access_policies resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_access_context_manager_access_policies(org_id: gcp_organization_id) do\n    its('count') { should be >= 1 }\n    its('titles') { should include service_perimeter['policy_title'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_access_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_access_policy resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\ncontrol 'google_access_context_manager_access_policy-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_access_policy resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe.one do\n    google_access_context_manager_access_policies(org_id: gcp_organization_id).names.each do |policy_name|\n      describe google_access_context_manager_access_policy(name: policy_name) do\n        it { should exist }\n        its('title') { should cmp service_perimeter['policy_title'] }\n        its('parent') { should match gcp_organization_id }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_service_perimeter.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_service_perimeter resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\ncontrol 'google_access_context_manager_service_perimeter-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_service_perimeter resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe.one do\n    google_access_context_manager_access_policies(org_id: gcp_organization_id).names.each do |policy_name|\n      describe google_access_context_manager_service_perimeter(policy_name: policy_name, name: service_perimeter['name']) do\n        it { should exist }\n        its('title') { should cmp service_perimeter['title'] }\n        its('status.restricted_services') { should include service_perimeter['restricted_service'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_access_context_manager_service_perimeters.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_access_context_manager_service_perimeters resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: 'gcp_organization_id', description: 'The identifier of the organization that is the parent of the perimeter')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\nservice_perimeter = input('service_perimeter', value: {\n  \"name\": \"restrict_all\",\n  \"title\": \"restrict_all\",\n  \"restricted_service\": \"storage.googleapis.com\",\n  \"policy_title\": \"policytitle\"\n}, description: 'Service perimeter definition')\ncontrol 'google_access_context_manager_service_perimeters-1.0' do\n  impact 1.0\n  title 'google_access_context_manager_service_perimeters resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe.one do\n    google_access_context_manager_access_policies(org_id: gcp_organization_id).names.each do |policy_name|\n      describe google_access_context_manager_service_perimeters(policy_name: policy_name) do\n        its('names') { should include service_perimeter['name'] }\n        its('titles') { should include service_perimeter['title'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_endpoint_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_endpoint_attachment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  endpoint_attachment = input('endpoint_attachment', value: {\n  \"name\": \"organizations/ppradhan/endpointAttachments/inspec-test-attachment\",\n  \"parent\": \"organizations/ppradhan\",\n  \"host\": \"7.0.0.2\",\n  \"connection_state\": \"ACCEPTED\",\n  \"service_attachment\": \"projects/ppradhan/regions/us-central1/serviceAttachments/my-psc-ilb\",\n  \"location\": \"us-central1\",\n  \"state\": \"ACTIVE\"\n}, description: 'endpoint_attachment description')\ncontrol 'google_apigee_endpoint_attachment-1.0' do\n  impact 1.0\n  title 'google_apigee_endpoint_attachment resource test'\n\n  describe google_apigee_endpoint_attachment(name: endpoint_attachment['name']) do\n  \tit { should exist }\n  \tits('host') { should cmp endpoint_attachment['host'] }\n  \tits('connection_state') { should cmp endpoint_attachment['connection_state'] }\n  \tits('service_attachment') { should cmp endpoint_attachment['service_attachment'] }\n  \tits('location') { should cmp endpoint_attachment['location'] }\n  \tits('name') { should cmp endpoint_attachment['name'] }\n  \tits('state') { should cmp endpoint_attachment['state'] }\n\n  end\n\n  describe google_apigee_endpoint_attachment(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_endpoint_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_endpoint_attachments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  endpoint_attachment = input('endpoint_attachment', value: {\n  \"name\": \"organizations/ppradhan/endpointAttachments/inspec-test-attachment\",\n  \"parent\": \"organizations/ppradhan\",\n  \"host\": \"7.0.0.2\",\n  \"connection_state\": \"ACCEPTED\",\n  \"service_attachment\": \"projects/ppradhan/regions/us-central1/serviceAttachments/my-psc-ilb\",\n  \"location\": \"us-central1\",\n  \"state\": \"ACTIVE\"\n}, description: 'endpoint_attachment description')\ncontrol 'google_apigee_endpoint_attachments-1.0' do\n  impact 1.0\n  title 'google_apigee_endpoint_attachments resource test'\n\n    describe google_apigee_endpoint_attachments() do\n      it { should exist }\n      its('hosts') { should include endpoint_attachment['host'] }\n      its('connection_states') { should include endpoint_attachment['connection_state'] }\n      its('service_attachments') { should include endpoint_attachment['service_attachment'] }\n      its('locations') { should include endpoint_attachment['location'] }\n      its('names') { should include endpoint_attachment['name'] }\n      its('states') { should include endpoint_attachment['state'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization resource.'\n\norganization = input('organization', value: {\n  \"name\": \"ppradhan\",\n  \"parent\": \"organizations/ppradhan\",\n  \"runtime_type\": \"CLOUD\",\n  \"authorized_network\": \"default\",\n  \"project_id\": \"ppradhan\",\n  \"subscription_type\": \"PAID\",\n  \"created_at\": \"1698225643253\",\n  \"state\": \"ACTIVE\",\n  \"analytics_region\": \"us-west1\"\n}, description: 'organization description')\n\ncontrol 'google_apigee_organization-1.0' do\n  impact 1.0\n  title 'google_apigee_organization resource test'\n\n  describe google_apigee_organization(name: organization['parent']) do\n  \tit { should exist }\n  \tits('runtime_type') { should cmp organization['runtime_type'] }\n  \tits('authorized_network') { should cmp organization['authorized_network'] }\n  \tits('project_id') { should cmp organization['project_id'] }\n  \tits('subscription_type') { should cmp organization['subscription_type'] }\n  \tits('created_at') { should cmp organization['created_at'] }\n  \tits('state') { should cmp organization['state'] }\n  \tits('name') { should cmp organization['name'] }\n  \tits('analytics_region') { should cmp organization['analytics_region'] }\n  end\n\n  describe google_apigee_organization(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_api.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_api resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_api = input('organization_api', value: {\n  \"name\": \"firstproxy\",\n  \"parent\": \"organizations/ppradhan\",\n  \"latest_revision_id\": \"value_latestrevisionid\",\n  \"api_proxy_type\": \"PROGRAMMABLE\"\n}, description: 'organization_api description')\ncontrol 'google_apigee_organization_api-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_api resource test'\n\n  describe google_apigee_organization_api(parent: organization_api['parent'],name: organization_api['name']) do\n  \tit { should exist }\n  \tits('latest_revision_id') { should cmp organization_api['latest_revision_id'] }\n  \tits('api_proxy_type') { should cmp organization_api['api_proxy_type'] }\n  \tits('name') { should cmp organization_api['name'] }\n  end\n\n  describe google_apigee_organization_api(parent: organization_api['parent'],name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_apis.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_apis resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_api = input('organization_api', value: {\n  \"name\": \"firstproxy\",\n  \"parent\": \"organizations/ppradhan\",\n  \"latest_revision_id\": \"value_latestrevisionid\",\n  \"api_proxy_type\": \"PROGRAMMABLE\"\n}, description: 'organization_api description')\ncontrol 'google_apigee_organization_apis-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_apis resource test'\n\n    describe google_apigee_organization_apis(parent: organization_api['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_envgroup.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_envgroup resource.'\n\norganization_envgroup = input('organization_envgroup', value: {\n  \"name\": \"test-env-group\",\n  \"parent\": \"organizations/ppradhan/envgroups\",\n  \"hostname\": \"34.95.97.227.nip.io\",\n  \"state\": \"ACTIVE\",\n  \"created_at\": \"1698227493454\"\n}, description: 'organization_envgroup description')\ncontrol 'google_apigee_organization_envgroup-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_envgroup resource test'\n\n  describe google_apigee_organization_envgroup(name: \"#{organization_envgroup['parent']}/#{organization_envgroup['name']}\") do\n  \tit { should exist }\n  \tits('name') { should cmp organization_envgroup['name'] }\n    its('hostnames') { should include organization_envgroup['hostname'] }\n  \tits('state') { should cmp organization_envgroup['state'] }\n  \tits('created_at') { should cmp organization_envgroup['created_at'] }\n  end\n\n  describe google_apigee_organization_envgroup(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_envgroup_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_envgroup_attachment resource.'\n\norganization_envgroup_attachment = input('organization_envgroup_attachment', value: {\n  \"name\": \"6741d6ad-1307-4f03-b02a-9fb4562c0ff3\",\n  \"parent\": \"organizations/ppradhan/envgroups/test-env-group/attachments\",\n  \"created_at\": \"1698227493793\",\n  \"environment\": \"test-env\",\n  \"environment_group_id\": \"test-env-group\"\n}, description: 'organization_envgroup_attachment description')\n\ncontrol 'google_apigee_organization_envgroup_attachment-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_envgroup_attachment resource test'\n\n  describe google_apigee_organization_envgroup_attachment(name: \"#{organization_envgroup_attachment['parent']}/#{organization_envgroup_attachment['name']}\") do\n  \tit { should exist }\n  \tits('created_at') { should cmp organization_envgroup_attachment['created_at'] }\n  \tits('environment') { should cmp organization_envgroup_attachment['environment'] }\n  \tits('environment_group_id') { should cmp organization_envgroup_attachment['environment_group_id'] }\n  \tits('name') { should cmp organization_envgroup_attachment['name'] }\n  end\n\n  describe google_apigee_organization_envgroup_attachment(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_envgroup_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_envgroup_attachments resource.'\n\norganization_envgroup_attachment = input('organization_envgroup_attachment', value: {\n  \"name\": \"6741d6ad-1307-4f03-b02a-9fb4562c0ff3\",\n  \"parent\": \"organizations/ppradhan/envgroups/test-env-group\",\n  \"created_at\": \"1698227493793\",\n  \"environment\": \"test-env\",\n  \"environment_group_id\": \"test-env-group\"\n}, description: 'organization_envgroup_attachment description')\n\ncontrol 'google_apigee_organization_envgroup_attachments-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_envgroup_attachments resource test'\n\n  describe google_apigee_organization_envgroup_attachments(parent: organization_envgroup_attachment['parent']) do\n    it { should exist }\n  end\n\n  describe google_apigee_organization_envgroup_attachments(parent: organization_envgroup_attachment['parent']).where(name: organization_envgroup_attachment['name']) do\n    it { should exist }\n    its(\"environment_group_ids\") { should include organization_envgroup_attachment['environment_group_id'] }\n    its(\"environments\") { should include organization_envgroup_attachment['environment'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_envgroups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_envgroups resource.'\n\norganization_envgroup = input(\"organization_envgroup\", value: {\n  \"name\": \"test-env-group\",\n  \"parent\": \"organizations/ppradhan\",\n  \"hostname\": \"34.95.97.227.nip.io\",\n  \"state\": \"ACTIVE\"\n}, description: \"organization_envgroup description\")\n\ncontrol 'google_apigee_organization_envgroups-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_envgroups resource test'\n\n  describe google_apigee_organization_envgroups(parent: organization_envgroup[\"parent\"]) do\n    it { should exist }\n    its(\"names\") { should include organization_envgroup[\"name\"] }\n  end\n\n  describe google_apigee_organization_envgroups(parent: organization_envgroup[\"parent\"]).where(name: organization_envgroup[\"name\"]) do\n    it { should exist }\n    its(\"names\") { should include organization_envgroup[\"name\"] }\n    its(\"hostnames\") { should include [organization_envgroup[\"hostname\"]] }\n    its(\"states\") { should include organization_envgroup[\"state\"] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_instance_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_instance_attachment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_instance_attachment = input('organization_instance_attachment', value: {\n  \"name\": \"c4452279-f4dd-473c-b50d-de21bec8147b\",\n  \"parent\": \"organizations/ppradhan/instances/us-central1\",\n  \"environment\": \"inspec-test-env\",\n  \"created_at\": \"1728297911815\"\n}, description: 'organization_instance_attachment description')\ncontrol 'google_apigee_organization_instance_attachment-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_instance_attachment resource test'\n\n  describe google_apigee_organization_instance_attachment(name: organization_instance_attachment['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp organization_instance_attachment['name'] }\n  \tits('environment') { should cmp organization_instance_attachment['environment'] }\n  \tits('created_at') { should cmp organization_instance_attachment['created_at'] }\n\n  end\n\n  describe google_apigee_organization_instance_attachment(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organization_instance_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organization_instance_attachments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_instance_attachment = input('organization_instance_attachment', value: {\n  \"name\": \"c4452279-f4dd-473c-b50d-de21bec8147b\",\n  \"parent\": \"organizations/ppradhan/instances/us-central1\",\n  \"environment\": \"inspec-test-env\",\n  \"created_at\": \"1728297911815\"\n}, description: 'organization_instance_attachment description')\ncontrol 'google_apigee_organization_instance_attachments-1.0' do\n  impact 1.0\n  title 'google_apigee_organization_instance_attachments resource test'\n\n    describe google_apigee_organization_instance_attachments(parent: organization_instance_attachment['parent']) do\n      it { should exist }\n      its('name') { should include organization_instance_attachment['name'] }\n      its('environment') { should include organization_instance_attachment['environment'] }\n      its('created_at') { should include organization_instance_attachment['created_at'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_apigee_organizations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_apigee_organizations resource.'\n\norganization = input('organization', value: {\n  \"parent\": \"organizations\",\n  \"project_id\": \"ppradhan\",\n}, description: 'organization description')\n\ncontrol 'google_apigee_organizations-1.0' do\n  impact 1.0\n  title 'google_apigee_organizations resource test'\n\n    describe google_apigee_organizations(parent: organization[\"parent\"]) do\n      it { should exist }\n      its(\"project_ids\") { should include \"#{organization[\"project_id\"]}\" }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_appengine_standard_app_version.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_appengine_standard_app_version resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project location.')\nstandardappversion = input('standardappversion', value: {\n  \"version_id\": \"v2\",\n  \"service\": \"default\",\n  \"runtime\": \"nodejs10\",\n  \"entrypoint\": \"node ./app.js\",\n  \"port\": \"8080\"\n}, description: 'Cloud App Engine definition')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_appengine_standard_app_version-1.0' do\n  impact 1.0\n  title 'google_appengine_standard_app_version resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_appengine_standard_app_version(project: gcp_project_id, location: gcp_location, version_id: standardappversion['version_id'], service: standardappversion['service']) do\n    it { should exist }\n    its('version_id') { should eq standardappversion['version_id'] }\n    its('runtime') { should eq standardappversion['runtime'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_appengine_standard_app_versions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_appengine_standard_app_versions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project location.')\nstandardappversion = input('standardappversion', value: {\n  \"version_id\": \"v2\",\n  \"service\": \"default\",\n  \"runtime\": \"nodejs10\",\n  \"entrypoint\": \"node ./app.js\",\n  \"port\": \"8080\"\n}, description: 'Cloud App Engine definition')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_appengine_standard_app_versions-1.0' do\n  impact 1.0\n  title 'google_appengine_standard_app_versions resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_appengine_standard_app_versions(project: gcp_project_id, location: gcp_location,service: standardappversion['service']) do\n    its('runtimes') { should include standardappversion['runtime'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_artifactregistry_project_location_repositories.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_artifactregistry_project_location_repositories resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project identifier.')\n\nproject_location_repository = input('project_location_repository', value: {\n  \"name\": \"projects/#{gcp_project_id}/locations/#{gcp_location}/repositories/test-repository-1\",\n  \"parent\": \"projects/#{gcp_project_id}/locations/#{gcp_location}\"\n}, description: 'project_location_repository description')\ncontrol 'google_artifactregistry_project_location_repositories-1.0' do\n  impact 1.0\n  title 'google_artifactregistry_project_location_repositories resource test'\n\n  describe google_artifactregistry_project_location_repositories(parent: project_location_repository['parent']) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_artifactregistry_project_location_repository.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_artifactregistry_project_location_repository resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project identifier.')\n\nproject_location_repository = input('project_location_repository', value: {\n  \"name\": \"projects/#{gcp_project_id}/locations/#{gcp_location}/repositories/test-repository-1\",\n  \"parent\": \"projects/#{gcp_project_id}/locations/#{gcp_location}\"\n}, description: 'project_location_repository description')\ncontrol 'google_artifactregistry_project_location_repository-1.0' do\n  impact 1.0\n  title 'google_artifactregistry_project_location_repository resource test'\n\n  describe google_artifactregistry_project_location_repository(name: project_location_repository['name']) do\n  \tit { should exist }\n  end\n\n  describe google_artifactregistry_project_location_repository(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigquery_dataset.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigquery_dataset resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'BigQuery dataset definition')\ncontrol 'google_bigquery_dataset-1.0' do\n  impact 1.0\n  title 'google_bigquery_dataset resource test'\n\n  describe google_bigquery_dataset(project: gcp_project_id, name: dataset['dataset_id']) do\n    it { should exist }\n\n    its('friendly_name') { should eq dataset['friendly_name'] }\n    its('location') { should eq dataset['location'] }\n    its('description') { should eq dataset['description'] }\n    its('name') { should eq dataset['dataset_id'] }\n    its('default_table_expiration_ms') { should cmp dataset['default_table_expiration_ms'] }\n  end\n\n  describe.one do\n    google_bigquery_dataset(project: gcp_project_id, name: dataset['dataset_id']).access.each do |dataset_access|\n      describe dataset_access do\n        its('role') { should eq dataset['access_writer_role'] }\n        its('special_group') { should eq dataset['access_writer_special_group'] }\n      end\n    end\n  end\n\n  describe google_bigquery_dataset(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigquery_datasets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigquery_datasets resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'BigQuery dataset definition')\ncontrol 'google_bigquery_datasets-1.0' do\n  impact 1.0\n  title 'google_bigquery_datasets resource test'\n\n  describe google_bigquery_datasets(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('friendly_names') { should include dataset['friendly_name'] }\n    its('locations') { should include dataset['location'] }\n  end\n\n  google_bigquery_datasets(project: gcp_project_id).ids.each do |name|\n    google_bigquery_dataset(project: gcp_project_id, name: name.split(':').last).access.each do |access|\n      describe access do\n        # No bigquery dataset should allow access to allUsers\n        its('iam_member') { should_not cmp 'allUsers' }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigquery_table.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigquery_table resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nbigquery_table = input('bigquery_table', value: {\n  \"table_id\": \"inspec_gcp_bigquery_table\",\n  \"description\": \"A BigQuery table\",\n  \"expiration_time\": 1738882264000,\n  \"time_partitioning_type\": \"DAY\"\n}, description: 'BigQuery table definition')\ndataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'BigQuery dataset definition')\ncontrol 'google_bigquery_table-1.0' do\n  impact 1.0\n  title 'google_bigquery_table resource test'\n\n  describe google_bigquery_table(project: gcp_project_id, dataset: dataset['dataset_id'], name: bigquery_table['table_id']) do\n    it { should exist }\n\n    its('expiration_time') { should cmp bigquery_table['expiration_time'] }\n    its('time_partitioning.type') { should eq bigquery_table['time_partitioning_type'] }\n    its('description') { should eq bigquery_table['description'] }\n  end\n\n  describe google_bigquery_table(project: gcp_project_id, dataset: dataset['dataset_id'], name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigquery_tables.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigquery_tables resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nbigquery_table = input('bigquery_table', value: {\n  \"table_id\": \"inspec_gcp_bigquery_table\",\n  \"description\": \"A BigQuery table\",\n  \"expiration_time\": 1738882264000,\n  \"time_partitioning_type\": \"DAY\"\n}, description: 'BigQuery table definition')\ndataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'BigQuery dataset definition')\ncontrol 'google_bigquery_tables-1.0' do\n  impact 1.0\n  title 'google_bigquery_tables resource test'\n\n  describe.one do\n    google_bigquery_tables(project: gcp_project_id, dataset: dataset['dataset_id']).table_references.each do |table_reference|\n      describe google_bigquery_table(project: gcp_project_id, dataset: dataset['dataset_id'], name: table_reference.table_id) do\n        its('expiration_time') { should cmp bigquery_table['expiration_time'] }\n        its('description') { should eq bigquery_table['description'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_cluster.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_cluster resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  cluster = input('cluster', value: {\n  \"name\": \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test\",\n  \"location\": \"projects/ppradhan/locations/us-central1-f\",\n  \"state\": \"READY\",\n  \"default_storage_type\": \"SSD\"\n}, description: 'cluster description')\ncontrol 'google_bigtableadmin_cluster-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_cluster resource test'\n\n  describe google_bigtableadmin_cluster(name: cluster['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp cluster['name'] }\n  \tits('location') { should cmp cluster['location'] }\n  \tits('state') { should cmp cluster['state'] }\n  \tits('default_storage_type') { should cmp cluster['default_storage_type'] }\n\n  end\n\n  describe google_bigtableadmin_cluster(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_cluster_backup.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_cluster_backup resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  cluster_backup = input('cluster_backup', value: {\n  \"name\":  \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1/backups/inspec-day1-backup\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1\",\n  \"source_table\": \"projects/ppradhan/instances/inspec-test/tables/inspec\",\n  \"source_backup\": \"value_sourcebackup\",\n  \"expire_time\": \"2024-09-25T07:08:29.584Z\",\n  \"start_time\": \"2024-09-24T07:08:31.252667Z\",\n  \"end_time\": \"2024-09-24T07:08:31.627350Z\",\n  \"size_bytes\": \"value_sizebytes\",\n  \"state\": \"READY\"\n}, description: 'cluster_backup description')\ncontrol 'google_bigtableadmin_cluster_backup-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_cluster_backup resource test'\n\n  describe google_bigtableadmin_cluster_backup(name: cluster_backup['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp cluster_backup['name'] }\n  \tits('source_table') { should cmp cluster_backup['source_table'] }\n  \tits('expire_time') { should cmp cluster_backup['expire_time'] }\n  \tits('start_time') { should cmp cluster_backup['start_time'] }\n  \tits('end_time') { should cmp cluster_backup['end_time'] }\n  \tits('state') { should cmp cluster_backup['state'] }\n\n  end\n\n  describe google_bigtableadmin_cluster_backup(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_cluster_backups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_cluster_backups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  cluster_backup = input('cluster_backup', value: {\n  \"name\":  \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1/backups/inspec-day1-backup\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1\",\n  \"source_table\": \"projects/ppradhan/instances/inspec-test/tables/inspec\",\n  \"source_backup\": \"value_sourcebackup\",\n  \"expire_time\": \"2024-09-25T07:08:29.584Z\",\n  \"start_time\": \"2024-09-24T07:08:31.252667Z\",\n  \"end_time\": \"2024-09-24T07:08:31.627350Z\",\n  \"size_bytes\": \"value_sizebytes\",\n  \"state\": \"READY\"\n}, description: 'cluster_backup description')\ncontrol 'google_bigtableadmin_cluster_backups-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_cluster_backups resource test'\n\n    describe google_bigtableadmin_cluster_backups(parent: cluster_backup['parent']) do\n      it { should exist }\n      its('names') { should include cluster_backup['name'] }\n      its('source_tables') { should include cluster_backup['source_table'] }\n      its('expire_times') { should include cluster_backup['expire_time'] }\n      its('start_times') { should include cluster_backup['start_time'] }\n      its('end_times') { should include cluster_backup['end_time'] }\n      its('states') { should include cluster_backup['state'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_clusters.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_clusters resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  cluster = input('cluster', value: {\n  \"name\": \"projects/ppradhan/instances/inspec-test/clusters/inspec-test-c1\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test\",\n  \"location\": \"projects/ppradhan/locations/us-central1-f\",\n  \"state\": \"READY\",\n  \"default_storage_type\": \"SSD\"\n}, description: 'cluster description')\ncontrol 'google_bigtableadmin_clusters-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_clusters resource test'\n\n    describe google_bigtableadmin_clusters(parent: cluster['parent']) do\n      it { should exist }\n      its('names') { should include cluster['name'] }\n      its('locations') { should include cluster['location'] }\n      its('states') { should include cluster['state'] }\n      its('default_storage_types') { should include cluster['default_storage_type'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_instance_app_profile.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_instance_app_profile resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  instance_app_profile = input('instance_app_profile', value: {\n  \"name\": \"projects/ppradhan/instances/inspec-test/appProfiles/inspec-test-profile\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"priority\": \"PRIORITY_HIGH\"\n}, description: 'instance_app_profile description')\ncontrol 'google_bigtableadmin_instance_app_profile-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_instance_app_profile resource test'\n\n  describe google_bigtableadmin_instance_app_profile(name: instance_app_profile['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp instance_app_profile['name'] }\n  \tits('etag') { should cmp instance_app_profile['etag'] }\n  \tits('description') { should cmp instance_app_profile['description'] }\n  \tits('priority') { should cmp instance_app_profile['priority'] }\n\n  end\n\n  describe google_bigtableadmin_instance_app_profile(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_bigtableadmin_instance_app_profiles.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_bigtableadmin_instance_app_profiles resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  instance_app_profile = input('instance_app_profile', value: {\n  \"name\": \"projects/ppradhan/instances/inspec-test/appProfiles/inspec-test-profile\",\n  \"parent\": \"projects/ppradhan/instances/inspec-test\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"priority\": \"PRIORITY_HIGH\"\n}, description: 'instance_app_profile description')\ncontrol 'google_bigtableadmin_instance_app_profiles-1.0' do\n  impact 1.0\n  title 'google_bigtableadmin_instance_app_profiles resource test'\n\n    describe google_bigtableadmin_instance_app_profiles(parent: instance_app_profile['parent']) do\n      it { should exist }\n      its('names') { should include project_instance_app_profile['name'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_billing_project_billing_info.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_billing_project_billing_info resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_billing_account = input(:gcp_billing_account, value: 'gcp_billing_account', description: 'The GCP billing account name.')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_billing_project_billing_info-1.0' do\n  impact 1.0\n  title 'google_billing_project_billing_info resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_billing_project_billing_info(project_id: gcp_project_id) do\n    it { should exist }\n\n    its('billing_account_name') { should eq gcp_billing_account }\n    its('billing_enabled') { should eq true }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloud_scheduler_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloud_scheduler_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nscheduler_job = input('scheduler_job', value: {\n  \"region\": \"us-central1\",\n  \"name\": \"job-name\",\n  \"description\": \"A description\",\n  \"schedule\": \"*/8 * * * *\",\n  \"time_zone\": \"America/New_York\",\n  \"http_method\": \"POST\",\n  \"http_target_uri\": \"https://example.com/ping\"\n}, description: 'Cloud Scheduler Job configuration')\ncontrol 'google_cloud_scheduler_job-1.0' do\n  impact 1.0\n  title 'google_cloud_scheduler_job resource test'\n\n  describe google_cloud_scheduler_job(project: gcp_project_id, region: scheduler_job['region'], name: scheduler_job['name']) do\n    it { should exist }\n\n    its('description') { should cmp scheduler_job['description'] }\n    its('schedule') { should cmp scheduler_job['schedule'] }\n    its('time_zone') { should cmp scheduler_job['time_zone'] }\n    its('http_target.http_method') { should cmp scheduler_job['http_method'] }\n    its('http_target.uri') { should cmp scheduler_job['http_target_uri'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloud_scheduler_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloud_scheduler_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nscheduler_job = input('scheduler_job', value: {\n  \"region\": \"us-central1\",\n  \"name\": \"job-name\",\n  \"description\": \"A description\",\n  \"schedule\": \"*/8 * * * *\",\n  \"time_zone\": \"America/New_York\",\n  \"http_method\": \"POST\",\n  \"http_target_uri\": \"https://example.com/ping\"\n}, description: 'Cloud Scheduler Job configuration')\ncontrol 'google_cloud_scheduler_jobs-1.0' do\n  impact 1.0\n  title 'google_cloud_scheduler_jobs resource test'\n\n  google_cloud_scheduler_jobs(project: gcp_project_id, region: scheduler_job['location']).names.each do |name|\n    describe google_cloud_scheduler_job(project: gcp_project_id, region: scheduler_job['region'], name: name) do\n  \t  it { should exist }\n\n  \t  its('description') { should cmp scheduler_job['description'] }\n  \t  its('schedule') { should cmp scheduler_job['schedule'] }\n  \t  its('time_zone') { should cmp scheduler_job['time_zone'] }\n  \t  its('http_target.http_method') { should cmp scheduler_job['http_method'] }\n  \t  its('http_target.uri') { should cmp scheduler_job['http_target_uri'] }\n  \tend\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloudbuild_trigger.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloudbuild_trigger resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ntrigger = input('trigger', value: {\n  \"trigger_template_project\": \"trigger-project\",\n  \"trigger_template_branch\": \"trigger-branch\",\n  \"trigger_template_repo\": \"trigger-repo\",\n  \"filename\": \"cloudbuild.yaml\"\n}, description: 'CloudBuild trigger definition')\ncontrol 'google_cloudbuild_trigger-1.0' do\n  impact 1.0\n  title 'google_cloudbuild_trigger resource test'\n\n  describe google_cloudbuild_triggers(project: gcp_project_id) do\n    its('count') { should eq 1 }\n  end\n\n  google_cloudbuild_triggers(project: gcp_project_id).ids.each do |id|\n    describe google_cloudbuild_trigger(project: gcp_project_id, id: id) do\n      its('filename') { should eq trigger['filename'] }\n      its('trigger_template.branch_name') { should eq trigger['trigger_template_branch'] }\n      its('trigger_template.repo_name') { should eq trigger['trigger_template_repo'] }\n      its('trigger_template.project_id') { should eq trigger['trigger_template_project'] }\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloudbuild_triggers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloudbuild_triggers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ntrigger = input('trigger', value: {\n  \"trigger_template_project\": \"trigger-project\",\n  \"trigger_template_branch\": \"trigger-branch\",\n  \"trigger_template_repo\": \"trigger-repo\",\n  \"filename\": \"cloudbuild.yaml\"\n}, description: 'CloudBuild trigger definition')\ncontrol 'google_cloudbuild_triggers-1.0' do\n  impact 1.0\n  title 'google_cloudbuild_triggers resource test'\n\n  describe google_cloudbuild_triggers(project: gcp_project_id) do\n    its('count') { should eq 1 }\n  end\n\n  google_cloudbuild_triggers(project: gcp_project_id).ids.each do |id|\n    describe google_cloudbuild_trigger(project: gcp_project_id, id: id) do\n      its('filename') { should eq trigger['filename'] }\n      its('trigger_template.branch_name') { should eq trigger['trigger_template_branch'] }\n      its('trigger_template.repo_name') { should eq trigger['trigger_template_repo'] }\n      its('trigger_template.project_id') { should eq trigger['trigger_template_project'] }\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloudfunctions_cloud_function.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloudfunctions_cloud_function resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_cloud_function_region = input(:gcp_cloud_function_region, value: 'gcp_cloud_function_region', description: 'The Cloud Function region.')\ncloudfunction = input('cloudfunction', value: {\n  \"name\": \"inspec-gcp-function\",\n  \"description\": \"A description of the function\",\n  \"available_memory_mb\": 128,\n  \"trigger_http\": true,\n  \"timeout\": 60,\n  \"entry_point\": \"hello\",\n  \"env_var_value\": \"val1\"\n}, description: 'Cloud Function definition')\ncontrol 'google_cloudfunctions_cloud_function-1.0' do\n  impact 1.0\n  title 'google_cloudfunctions_cloud_function resource test'\n\n  describe google_cloudfunctions_cloud_function(project: gcp_project_id, location: gcp_cloud_function_region, name: cloudfunction['name']) do\n    it { should exist }\n    its('description') { should eq cloudfunction['description'] }\n    its('available_memory_mb') { should eq cloudfunction['available_memory_mb'] }\n    its('https_trigger.url') { should match /\\/inspec-gcp-function$/ }\n    its('entry_point') { should eq cloudfunction['entry_point'] }\n    its('environment_variables') { should include('MY_ENV_VAR' => cloudfunction['env_var_value']) }\n  end\n\n  describe google_cloudfunctions_cloud_function(project: gcp_project_id, location: gcp_cloud_function_region, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_cloudfunctions_cloud_functions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_cloudfunctions_cloud_functions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_cloud_function_region = input(:gcp_cloud_function_region, value: 'gcp_cloud_function_region', description: 'The Cloud Function region.')\ncloudfunction = input('cloudfunction', value: {\n  \"name\": \"inspec-gcp-function\",\n  \"description\": \"A description of the function\",\n  \"available_memory_mb\": 128,\n  \"trigger_http\": true,\n  \"timeout\": 60,\n  \"entry_point\": \"hello\",\n  \"env_var_value\": \"val1\"\n}, description: 'Cloud Function definition')\ncontrol 'google_cloudfunctions_cloud_functions-1.0' do\n  impact 1.0\n  title 'google_cloudfunctions_cloud_functions resource test'\n\n  describe google_cloudfunctions_cloud_functions(project: gcp_project_id, location: gcp_cloud_function_region) do\n    its('descriptions') { should include cloudfunction['description'] }\n    its('entry_points') { should include cloudfunction['entry_point'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_composer_project_location_environment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_composer_project_location_environment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nproject_location_environment = input('project_location_environment', value: {\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"name\": \"projects/ppradhan/locations/us-central1/environments/example-composer-env\",\n  \"state\": \"RUNNING\",\n  },\n  description: 'project_location_environment description')\n\ncontrol 'google_composer_project_location_environment-1.0' do\n  impact 1.0\n  title 'google_composer_project_location_environment resource test'\n\n  describe google_composer_project_location_environment(name: project_location_environment['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp project_location_environment['name'] }\n  \tits('state') { should cmp project_location_environment['state'] }\n  end\n\n  describe google_composer_project_location_environment(name: \"does_not_exist\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_composer_project_location_environments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_composer_project_location_environments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nproject_location_environment = input('project_location_environment', value: {\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"name\": \"projects/ppradhan/locations/us-central1/environments/example-composer-env\",\n  \"state\": \"RUNNING\",\n  },\n  description: 'project_location_environment description')\n\ncontrol 'google_composer_project_location_environments-2.0' do\n  describe google_composer_project_location_environments(parent: project_location_environment['parent']) do\n  \tit { should exist }\n    its('names') { should include(project_location_environment['name']) }\n    its('states') { should include(project_location_environment['state']) }\n  end\n\n  describe google_composer_project_location_environments(parent: \"projects/ppradhan/locations/us-east2\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_composer_project_location_image_versions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_composer_project_location_image_versions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_location_image_version = input('project_location_image_version', value: {\n  \"parent\": \"projects/ppradhan/locations/us-central1\"\n}, description: 'project_location_image_version description')\ncontrol 'google_composer_project_location_image_versions-1.0' do\n  impact 1.0\n  title 'google_composer_project_location_image_versions resource test'\n\n      describe google_composer_project_location_image_versions(parent: project_location_image_version['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_accelerator_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_accelerator_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\naccelerator_type = input('accelerator_type', value: null, description: 'The accelerator type')\ncontrol 'google_compute_accelerator_type-1.0' do\n  impact 1.0\n  title 'google_compute_accelerator_type resource test'\n\n  describe google_compute_accelerator_type(project: gcp_project_id, zone: 'us-east1-b', name: accelerator_type['name']) do\n    it { should exist }\n    it { should be_up }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_accelerator_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_accelerator_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\naccelerator_type = input('accelerator_type', value: null, description: 'The accelerator type')\ncontrol 'google_compute_accelerator_types-1.0' do\n  impact 1.0\n  title 'google_compute_accelerator_types resource test'\n\n  describe google_compute_accelerator_types(project: gcp_project_id, zone: 'us-east1-b') do\n  it { should exist }\n  it { should be_up }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_address.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_address resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\naddress = input('address', value: {\n  \"name\": \"inspec-gcp-global-address\",\n  \"address_type\": \"INTERNAL\",\n  \"address\": \"10.2.0.3\"\n}, description: 'Address definition')\ncontrol 'google_compute_address-1.0' do\n  impact 1.0\n  title 'google_compute_address resource test'\n\n  describe google_compute_address(project: gcp_project_id, location: gcp_location, name: address['name']) do\n    it { should exist }\n    its('address') { should eq address['address'] }\n    its('address_type') { should eq address['address_type'] }\n    its('user_count') { should eq 0 }\n  end\n\n  describe google_compute_address(project: gcp_project_id, location: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_addresses.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_addresses resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\naddress = input('address', value: {\n  \"name\": \"inspec-gcp-global-address\",\n  \"address_type\": \"INTERNAL\",\n  \"address\": \"10.2.0.3\"\n}, description: 'Address definition')\ncontrol 'google_compute_addresses-1.0' do\n  impact 1.0\n  title 'google_compute_addresses resource test'\n\n  describe google_compute_addresses(project: gcp_project_id, location: gcp_location) do\n    its('addresses') { should include address['address'] }\n    its('names') { should include address['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_autoscaler.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_autoscaler resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\ninstance_group_manager = input('instance_group_manager', value: {\n  \"name\": \"inspec-gcp-igm\",\n  \"base_instance_name\": \"igm\",\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Instance group manager definition')\nautoscaler = input('autoscaler', value: {\n  \"name\": \"inspec-gcp-autoscaler\",\n  \"max_replicas\": 5,\n  \"min_replicas\": 1,\n  \"cooldown_period\": 60,\n  \"cpu_utilization_target\": 0.5\n}, description: 'Autoscaler definition')\ncontrol 'google_compute_autoscaler-1.0' do\n  impact 1.0\n  title 'google_compute_autoscaler resource test'\n\n  describe google_compute_autoscaler(project: gcp_project_id, zone: gcp_zone, name: autoscaler['name']) do\n    it { should exist }\n\n    its('target') { should match /\\/inspec-gcp-igm$/ }\n    its('autoscaling_policy.max_num_replicas') { should eq autoscaler['max_replicas'] }\n    its('autoscaling_policy.min_num_replicas') { should eq autoscaler['min_replicas'] }\n    its('autoscaling_policy.cool_down_period_sec') { should eq autoscaler['cooldown_period'] }\n    its('autoscaling_policy.cpu_utilization.utilization_target') { should eq autoscaler['cpu_utilization_target'] }\n  end\n\n  describe google_compute_autoscaler(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_autoscalers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_autoscalers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\ninstance_group_manager = input('instance_group_manager', value: {\n  \"name\": \"inspec-gcp-igm\",\n  \"base_instance_name\": \"igm\",\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Instance group manager definition')\nautoscaler = input('autoscaler', value: {\n  \"name\": \"inspec-gcp-autoscaler\",\n  \"max_replicas\": 5,\n  \"min_replicas\": 1,\n  \"cooldown_period\": 60,\n  \"cpu_utilization_target\": 0.5\n}, description: 'Autoscaler definition')\ncontrol 'google_compute_autoscalers-1.0' do\n  impact 1.0\n  title 'google_compute_autoscalers resource test'\n\n  autoscalers = google_compute_autoscalers(project: gcp_project_id, zone: gcp_zone)\n  describe.one do\n    autoscalers.autoscaling_policies.each do |autoscaling_policy|\n      describe autoscaling_policy do\n          its('max_num_replicas') { should eq autoscaler['max_replicas'] }\n          its('min_num_replicas') { should eq autoscaler['min_replicas'] }\n          its('cool_down_period_sec') { should eq autoscaler['cooldown_period'] }\n          its('cpu_utilization.utilization_target') { should eq autoscaler['cpu_utilization_target'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_backend_bucket.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_backend_bucket resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_name = input(:gcp_storage_bucket_name, value: 'gcp_storage_bucket_name', description: 'The GCS bucket name to use for the backend bucket.')\nbackend_bucket = input('backend_bucket', value: {\n  \"name\": \"inspec-gcp-backend-bucket\",\n  \"description\": \"Backend bucket example\",\n  \"enable_cdn\": true\n}, description: 'Backend bucket definition')\ncontrol 'google_compute_backend_bucket-1.0' do\n  impact 1.0\n  title 'google_compute_backend_bucket resource test'\n\n  describe google_compute_backend_bucket(project: gcp_project_id, name: backend_bucket['name']) do\n    it { should exist }\n    its('description') { should eq backend_bucket['description'] }\n    its('enable_cdn') { should be backend_bucket['enable_cdn'] }\n  end\n\n  describe google_compute_backend_bucket(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_backend_buckets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_backend_buckets resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_name = input(:gcp_storage_bucket_name, value: 'gcp_storage_bucket_name', description: 'The GCS bucket name to use for the backend bucket.')\nbackend_bucket = input('backend_bucket', value: {\n  \"name\": \"inspec-gcp-backend-bucket\",\n  \"description\": \"Backend bucket example\",\n  \"enable_cdn\": true\n}, description: 'Backend bucket definition')\ncontrol 'google_compute_backend_buckets-1.0' do\n  impact 1.0\n  title 'google_compute_backend_buckets resource test'\n\n  describe google_compute_backend_buckets(project: gcp_project_id, name: backend_bucket['name']) do\n    its('descriptions') { should include backend_bucket['description'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_backend_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_backend_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nbackend_service = input('backend_service', value: {\n  \"name\": \"inspec-gcp-backend-service\",\n  \"description\": \"A description\",\n  \"port_name\": \"http\",\n  \"protocol\": \"HTTP\",\n  \"timeout_sec\": 10,\n  \"enable_cdn\": true\n}, description: 'Backend service definition')\ncontrol 'google_compute_backend_service-1.0' do\n  impact 1.0\n  title 'google_compute_backend_service resource test'\n\n  describe google_compute_backend_service(project: gcp_project_id, name: backend_service['name']) do\n    it { should exist }\n    its('description') { should eq backend_service['description'] }\n    its('port_name') { should eq backend_service['port_name'] }\n    its('protocol') { should eq backend_service['protocol'] }\n    its('timeout_sec') { should eq backend_service['timeout_sec'] }\n    its('enable_cdn') { should eq backend_service['enable_cdn'] }\n  end\n\n  describe google_compute_backend_service(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_backend_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_backend_services resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nbackend_service = input('backend_service', value: {\n  \"name\": \"inspec-gcp-backend-service\",\n  \"description\": \"A description\",\n  \"port_name\": \"http\",\n  \"protocol\": \"HTTP\",\n  \"timeout_sec\": 10,\n  \"enable_cdn\": true\n}, description: 'Backend service definition')\ncontrol 'google_compute_backend_services-1.0' do\n  impact 1.0\n  title 'google_compute_backend_services resource test'\n\n  describe google_compute_backend_services(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('names') { should include backend_service['name'] }\n    its('port_names') { should include backend_service['port_name'] }\n    its('protocols') { should include backend_service['protocol'] }\n    its('timeout_secs') { should include backend_service['timeout_sec'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_disk.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_disk resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\nsnapshot = input('snapshot', value: {\n  \"name\": \"inspec-gcp-disk-snapshot\",\n  \"disk_name\": \"inspec-snapshot-disk\",\n  \"disk_type\": \"pd-standard\",\n  \"disk_image\": \"debian-cloud/debian-10-buster-v20191014\"\n}, description: 'Disk snapshot description')\ngcp_compute_disk_name = snapshot[\"disk_name\"]\ngcp_compute_disk_image = snapshot[\"disk_image\"]\ngcp_compute_disk_type = snapshot[\"disk_type\"]\ncontrol 'google_compute_disk-1.0' do\n  impact 1.0\n  title 'google_compute_disk resource test'\n\n\n  most_recent_image = google_compute_image(project: gcp_compute_disk_image.split('/').first, name: gcp_compute_disk_image.split('/').last)\n\n  describe google_compute_disk(project: gcp_project_id, name: gcp_compute_disk_name, zone: gcp_zone) do\n    it { should exist }\n    # Test that the image is the most recent image for the family\n    its('source_image') { should match most_recent_image.self_link }\n    its('type') { should match gcp_compute_disk_type }\n  end\n\n  describe.one do\n    google_compute_disk(project: gcp_project_id, name: gcp_compute_disk_name, zone: gcp_zone).labels.each_pair do |key, value|\n      describe key do\n        it { should cmp \"environment\" }\n      end\n    end\n  end\n\n  describe google_compute_disk(project: gcp_project_id, name: 'nonexistent', zone: gcp_zone) do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_disk_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_disk_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndisk_type = input('disk_type', value: null, description: 'The accelerator type')\ncontrol 'google_compute_disk_type-1.0' do\n  impact 1.0\n  title 'google_compute_disk_type resource test'\n\n  describe google_compute_disk_type(project: gcp_project_id, zone: 'us-east1-b', name: accelerator_type['name']) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_disk_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_disk_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndisk_type = input('disk_type', value: null, description: 'The accelerator type')\ncontrol 'google_compute_disk_types-1.0' do\n  impact 1.0\n  title 'google_compute_disk_types resource test'\n\n  describe google_compute_disk_types(project: gcp_project_id, zone: 'us-east1-b') do\n  it { should exist }\n  it { should be_up }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_disks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_disks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\nsnapshot = input('snapshot', value: {\n  \"name\": \"inspec-gcp-disk-snapshot\",\n  \"disk_name\": \"inspec-snapshot-disk\",\n  \"disk_type\": \"pd-standard\",\n  \"disk_image\": \"debian-cloud/debian-10-buster-v20191014\"\n}, description: 'Disk snapshot description')\ngcp_compute_disk_name = snapshot[\"disk_name\"]\ngcp_compute_disk_image = snapshot[\"disk_image\"]\ngcp_compute_disk_type = snapshot[\"disk_type\"]\ncontrol 'google_compute_disks-1.0' do\n  impact 1.0\n  title 'google_compute_disks resource test'\n\n  most_recent_image = google_compute_image(project: gcp_compute_disk_image.split('/').first, name: gcp_compute_disk_image.split('/').last)\n  describe google_compute_disks(project: gcp_project_id, zone: gcp_zone) do\n    it { should exist }\n    its('names') { should include snapshot['disk_name'] }\n    its('source_images') { should include most_recent_image.self_link }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_external_vpn_gateway.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_external_vpn_gateway resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nexternal_vpn_gateway = input('external_vpn_gateway', value: {\n  \"name\": \"external-gateway\",\n  \"redundancy_type\": \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n  \"description\": \"An externally managed VPN gateway\",\n}, description: 'The externally managed vpn gateway.')\n\ncontrol 'google_compute_external_vpn_gateway-1.0' do\n  impact 1.0\n  title 'google_compute_external_vpn_gateway resource test'\n\n  describe google_compute_external_vpn_gateway(project: gcp_project_id, name: external_vpn_gateway['name']) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_external_vpn_gateways.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_external_vpn_gateways resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_external_vpn_gateways-1.0' do\n  impact 1.0\n  title 'google_compute_external_vpn_gateways resource test'\n\n  describe google_compute_external_vpn_gateways(project: gcp_project_id) do\n  it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_firewall.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_firewall resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfirewall = input('firewall', value: {\n  \"name\": \"inspec-gcp-firewall\",\n  \"source_tag\": \"some-tag\"\n}, description: 'Firewall rule definition')\ncontrol 'google_compute_firewall-1.0' do\n  impact 1.0\n  title 'google_compute_firewall resource test'\n\n  describe google_compute_firewall(project: gcp_project_id, name: firewall['name']) do\n    its('direction') { should cmp 'INGRESS' }\n    its('log_config_enabled?') { should be true }\n    its('source_tags') { should include firewall['source_tag'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_firewalls.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_firewalls resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfirewall = input('firewall', value: {\n  \"name\": \"inspec-gcp-firewall\",\n  \"source_tag\": \"some-tag\"\n}, description: 'Firewall rule definition')\ncontrol 'google_compute_firewalls-1.0' do\n  impact 1.0\n  title 'google_compute_firewalls resource test'\n\n  describe google_compute_firewalls(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('firewall_names') { should include firewall['name'] }\n    its('firewall_directions') { should include 'INGRESS' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_firewalls_handwritten.rb",
    "content": "title 'Firewalls Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_enable_gcloud_calls = input(:gcp_enable_gcloud_calls,value:0,description:'Flag to enable the use of gcloud command line to pull in live data to test against.')\n\ncontrol 'gcp-firewalls-1.0' do\n\n  only_if { gcp_enable_gcloud_calls.to_i == 1 }\n  impact 1.0\n  title 'Ensure firewalls have the correct properties in bulk'\n\n  describe google_compute_firewalls(project: gcp_project_id) do\n    it { should exist }\n    its('count') { should be <= 100}\n    # assume this is a development setup for a moment\n    its('firewall_names') { should include \"default-allow-ssh\" }\n    its('firewall_names') { should include \"default-allow-rdp\" }\n    its('firewall_names') { should include \"default-allow-internal\" }\n    its('firewall_names') { should include \"default-allow-icmp\" }\n    # Only make the call if the configuration flag is specified and the test will run\n    gcp_firewall_id = `gcloud compute firewall-rules list --filter=\"name=default-allow-ssh\" --format=json | grep id | grep -o '[0-9]\\\\+'`.chomp\n    its('firewall_ids') { should include gcp_firewall_id }\n  end\n\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_firewalls_loop.rb",
    "content": "title 'Loop over all GCP Firewalls'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\n\ncontrol 'gcp-firewalls-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure firewalls have the correct properties in bulk using google_compute_firewall for detail.'\n\n  google_compute_firewalls(project: gcp_project_id).firewall_names.each do |firewall_name|\n    describe google_compute_firewall(project: gcp_project_id, name: firewall_name) do\n      it { should exist }\n      its('direction') { should be_in [\"INGRESS\",\"EGRESS\"] }\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_forwarding_rule.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_forwarding_rule resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_lb_region = input(:gcp_lb_region, value: 'gcp_lb_region', description: 'The region used for the forwarding rule.')\ngcp_fr_udp_name = input(:gcp_fr_udp_name, value: 'gcp_fr_udp_name', description: 'The forwarding rule name.')\n\ncontrol 'google_compute_forwarding_rule-1.0' do\n  impact 1.0\n  title 'google_compute_forwarding_rule resource test'\n\n\n  describe google_compute_forwarding_rule(project: gcp_project_id, region: gcp_lb_region, name: \"#{gcp_fr_udp_name}-500\") do\n    it { should exist }\n    its('region') { should match gcp_lb_region }\n    its('creation_timestamp') { should be > Time.now - 365*60*60*24*10 }\n    its('load_balancing_scheme') { should match 'EXTERNAL' }\n    its('port_range') { should match \"500-500\" }\n    its('ip_protocol') { should match \"UDP\" }\n  end\n\n  describe google_compute_forwarding_rule(project: gcp_project_id, region: gcp_lb_region, name: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_forwarding_rules.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_forwarding_rules resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_lb_region = input(:gcp_lb_region, value: 'gcp_lb_region', description: 'The region used for the forwarding rule.')\ngcp_fr_udp_name = input(:gcp_fr_udp_name, value: 'gcp_fr_udp_name', description: 'The forwarding rule name.')\n\ncontrol 'google_compute_forwarding_rules-1.0' do\n  impact 1.0\n  title 'google_compute_forwarding_rules resource test'\n\n\n  describe google_compute_forwarding_rules(project: gcp_project_id, region: gcp_lb_region) do\n    its('forwarding_rule_names') { should include \"#{gcp_fr_udp_name}-500\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_address.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_address resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_address = input('global_address', value: {\n  \"name\": \"inspec-gcp-global-address\",\n  \"ip_version\": \"IPV6\"\n}, description: 'Compute Global Address definition')\ncontrol 'google_compute_global_address-1.0' do\n  impact 1.0\n  title 'google_compute_global_address resource test'\n\n  describe google_compute_global_address(project: gcp_project_id, name: global_address['name']) do\n    it { should exist }\n    its('ip_version') { should eq global_address['ip_version'] }\n  end\n\n  describe google_compute_global_address(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_addresses.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_addresses resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_address = input('global_address', value: {\n  \"name\": \"inspec-gcp-global-address\",\n  \"ip_version\": \"IPV6\"\n}, description: 'Compute Global Address definition')\ncontrol 'google_compute_global_addresses-1.0' do\n  impact 1.0\n  title 'google_compute_global_addresses resource test'\n\n  describe google_compute_global_addresses(project: gcp_project_id, name: global_address['name']) do\n    its('count') { should be >= 1 }\n    its('names') { should include global_address['name'] }\n    its('ip_versions') { should include global_address['ip_version'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_forwarding_rule.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_forwarding_rule resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_forwarding_rule = input('global_forwarding_rule', value: {\n  \"name\": \"inspec-gcp-global-forwarding-rule\",\n  \"port_range\": \"80-80\"\n}, description: 'Compute global forwarding rule definition')\ncontrol 'google_compute_global_forwarding_rule-1.0' do\n  impact 1.0\n  title 'google_compute_global_forwarding_rule resource test'\n\n  describe google_compute_global_forwarding_rule(project: gcp_project_id, name: global_forwarding_rule['name']) do\n    it { should exist }\n    its('port_range') { should eq global_forwarding_rule['port_range'] }\n    its('target') { should  match /\\/inspec-gcp-http-proxy$/ }\n  end\n\n  describe google_compute_global_forwarding_rule(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_forwarding_rules.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_forwarding_rules resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_forwarding_rule = input('global_forwarding_rule', value: {\n  \"name\": \"inspec-gcp-global-forwarding-rule\",\n  \"port_range\": \"80-80\"\n}, description: 'Compute global forwarding rule definition')\ncontrol 'google_compute_global_forwarding_rules-1.0' do\n  impact 1.0\n  title 'google_compute_global_forwarding_rules resource test'\n\n  describe google_compute_global_forwarding_rules(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('port_ranges') { should include global_forwarding_rule['port_range'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_network_endpoint_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_network_endpoint_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_network_endpoint_group = input('global_network_endpoint_group', value: {\n  \"name\": \"inspec-gcp-global-endpoint-group\",\n  \"network_endpoint_type\": \"INTERNET_IP_PORT\",\n  \"default_port\": 90\n}, description: 'global_network_endpoint_group description')\ncontrol 'google_compute_global_network_endpoint_group-1.0' do\n  impact 1.0\n  title 'google_compute_global_network_endpoint_group resource test'\n\n  describe google_compute_global_network_endpoint_group(project: gcp_project_id, name: global_network_endpoint_group['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp global_network_endpoint_group['kind'] }\n  \tits('id') { should cmp global_network_endpoint_group['id'] }\n\t\tits('default_port') { should cmp global_network_endpoint_group['default_port'] }\n  \tits('creation_timestamp') { should cmp global_network_endpoint_group['creation_timestamp'] }\n  \tits('self_link') { should cmp global_network_endpoint_group['self_link'] }\n  \tits('name') { should cmp global_network_endpoint_group['name'] }\n  \tits('description') { should cmp global_network_endpoint_group['description'] }\n  \tits('network_endpoint_type') { should cmp global_network_endpoint_group['network_endpoint_type'] }\n  \tits('region') { should cmp global_network_endpoint_group['region'] }\n  \tits('zone') { should cmp global_network_endpoint_group['zone'] }\n  \tits('network') { should cmp global_network_endpoint_group['network'] }\n  \tits('subnetwork') { should cmp global_network_endpoint_group['subnetwork'] }\n  \tits('psc_target_service') { should cmp global_network_endpoint_group['psc_target_service'] }\n  end\n\n  describe google_compute_global_network_endpoint_group(project: gcp_project_id, name: 'nonexistent') do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_network_endpoint_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_network_endpoint_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_network_endpoint_group = input('global_network_endpoint_group', value: {\n  \"name\": \"inspec-gcp-global-endpoint-group\",\n  \"network_endpoint_type\": \"INTERNET_IP_PORT\",\n  \"default_port\": 90\n}, description: 'global_network_endpoint_group description')\ncontrol 'google_compute_global_network_endpoint_groups-1.0' do\n  impact 1.0\n  title 'google_compute_global_network_endpoint_groups resource test'\n\n  describe google_compute_global_network_endpoint_groups(project: gcp_project_id) do\n    it { should exist }\n    its('default_ports') { should include global_network_endpoint_group['default_port'] }\n    its('names') { should include global_network_endpoint_group['name'] }\n    its('network_endpoint_types'){ should include global_network_endpoint_group['network_endpoint_type'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_operation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_operation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_operation = input('global_operation', value: {\n  \"name\": \"operation-1635274037755-5cf45e8217d56-c081cd9a-c3ea7346\",\n  \"operationType\": \"compute.externalVpnGateways.delete\"\n}, description: 'Global operation rule definition')\ncontrol 'google_compute_global_operation-1.0' do\n  impact 1.0\n  title 'google_compute_global_operation resource test'\n\n  describe google_compute_global_operation(project: gcp_project_id, name: global_operation['name']) do\n    it { should exist }\n    its('operation_type') { should include global_operation['operationType'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_global_operations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_global_operations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nglobal_operation = input('global_operation', value: {\n  \"name\": \"operation-1634799391539-5ced765030229-be5d5765-6623920f\",\n  \"operationType\": \"compute.externalVpnGateways.delete\"\n}, description: 'Global operation rule definition')\ncontrol 'google_compute_global_operations-1.0' do\n  impact 1.0\n  title 'google_compute_global_operations resource test'\n  describe google_compute_global_operations(project: gcp_project_id) do\n    it { should exist }\n    its('operation_types') { should include global_operation[:operationType] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_health_check.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_health_check resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhealth_check = input('health_check', value: {\n  \"name\": \"inspec-gcp-health-check\",\n  \"timeout_sec\": 10,\n  \"check_interval_sec\": 10,\n  \"tcp_health_check_port\": 80\n}, description: 'Health check definition')\ncontrol 'google_compute_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_health_check resource test'\n\n  describe google_compute_health_check(project: gcp_project_id, name: health_check['name']) do\n    it { should exist }\n    its('timeout_sec') { should eq health_check['timeout_sec'] }\n    its('tcp_health_check.port') { should eq health_check['tcp_health_check_port'] }\n  end\n\n  describe google_compute_health_check(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_health_check_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_health_check_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_health_check_service = input('region_health_check_service', value: {\n  \"name\": \"instance-group-2\",\n  \"region\": \"us-central1\",\n  \"health_status_aggregation_policy\": \"NO_AGGREGATION\"\n}, description: 'HealthCheckService resources that have been configured for the specified project in the given region')\ncontrol 'google_compute_health_check_service-1.0' do\n  impact 1.0\n  title 'google_compute_health_check_service resource test'\n\n  describe google_compute_health_check_service(project: gcp_project_id, region: region_health_check_service['region'], name: region_health_check_service['name']) do\n  it { should exist }\n  its('name') { should eq region_health_check_service['name'] }\n  its('health_status_aggregation_policy') { should eq region_health_check_service['health_status_aggregation_policy'] }\n  end\n\n  describe google_compute_health_check_service(project: gcp_project_id, region: region_health_check_service['region'], name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_health_check_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_health_check_services resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_health_check_service = input('region_health_check_service', value: {\n  \"name\": \"instance-group-2\",\n  \"region\": \"us-central1\",\n  \"health_status_aggregation_policy\": \"NO_AGGREGATION\"\n}, description: 'HealthCheckService resources that have been configured for the specified project in the given region')\ncontrol 'google_compute_health_check_services-1.0' do\n  impact 1.0\n  title 'google_compute_health_check_services resource test'\n\n  describe google_compute_health_check_services(project: gcp_project_id, region: region_health_check_service['region']) do\n  \tit { should exist }\n  \tits('names') { should include region_health_check_service['name'] }\n  \tits('health_status_aggregation_policies') { should include region_health_check_service['health_status_aggregation_policy'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_health_checks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_health_checks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhealth_check = input('health_check', value: {\n  \"name\": \"inspec-gcp-health-check\",\n  \"timeout_sec\": 10,\n  \"check_interval_sec\": 10,\n  \"tcp_health_check_port\": 80\n}, description: 'Health check definition')\ncontrol 'google_compute_health_checks-1.0' do\n  impact 1.0\n  title 'google_compute_health_checks resource test'\n\n  describe google_compute_health_checks(project: gcp_project_id) do\n    its('names') { should include health_check['name'] }\n    its('timeout_secs') { should include health_check['timeout_sec'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_http_health_check.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_http_health_check resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttp_health_check = input('http_health_check', value: {\n  \"name\": \"inspec-gcp-http-health-check\",\n  \"request_path\": \"/health_check\",\n  \"timeout_sec\": 20,\n  \"check_interval_sec\": 20\n}, description: 'HTTP health check definition')\ncontrol 'google_compute_http_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_http_health_check resource test'\n\n  describe google_compute_http_health_check(project: gcp_project_id, name: http_health_check['name']) do\n    it { should exist }\n    its('timeout_sec') { should eq http_health_check['timeout_sec'] }\n    its('request_path') { should eq http_health_check['request_path'] }\n    its('check_interval_sec') { should eq http_health_check['check_interval_sec'] }\n  end\n\n  describe google_compute_http_health_check(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_http_health_checks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_http_health_checks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttp_health_check = input('http_health_check', value: {\n  \"name\": \"inspec-gcp-http-health-check\",\n  \"request_path\": \"/health_check\",\n  \"timeout_sec\": 20,\n  \"check_interval_sec\": 20\n}, description: 'HTTP health check definition')\ncontrol 'google_compute_http_health_checks-1.0' do\n  impact 1.0\n  title 'google_compute_http_health_checks resource test'\n\n  describe google_compute_http_health_checks(project: gcp_project_id) do\n    its('names') { should include http_health_check['name'] }\n    its('timeout_secs') { should include http_health_check['timeout_sec'] }\n    its('check_interval_secs') { should include http_health_check['check_interval_sec'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_https_health_check.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_https_health_check resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttps_health_check = input('https_health_check', value: {\n  \"name\": \"inspec-gcp-https-health-check\",\n  \"request_path\": \"/https_health_check\",\n  \"timeout_sec\": 15,\n  \"check_interval_sec\": 15,\n  \"unhealthy_threshold\": 3\n}, description: 'HTTPS health check definition')\ncontrol 'google_compute_https_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_https_health_check resource test'\n\n  describe google_compute_https_health_check(project: gcp_project_id, name: https_health_check['name']) do\n    it { should exist }\n    its('timeout_sec') { should eq https_health_check['timeout_sec'] }\n    its('request_path') { should eq https_health_check['request_path'] }\n    its('check_interval_sec') { should eq https_health_check['check_interval_sec'] }\n    its('unhealthy_threshold') { should eq https_health_check['unhealthy_threshold'] }\n  end\n\n  describe google_compute_https_health_check(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_https_health_checks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_https_health_checks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttps_health_check = input('https_health_check', value: {\n  \"name\": \"inspec-gcp-https-health-check\",\n  \"request_path\": \"/https_health_check\",\n  \"timeout_sec\": 15,\n  \"check_interval_sec\": 15,\n  \"unhealthy_threshold\": 3\n}, description: 'HTTPS health check definition')\ncontrol 'google_compute_https_health_checks-1.0' do\n  impact 1.0\n  title 'google_compute_https_health_checks resource test'\n\n  describe google_compute_https_health_checks(project: gcp_project_id) do\n    its('names') { should include https_health_check['name'] }\n    its('timeout_secs') { should include https_health_check['timeout_sec'] }\n    its('check_interval_secs') { should include https_health_check['check_interval_sec'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_image.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_image resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncompute_image = input('compute_image', value: {\n  \"name\": \"inspec-image\",\n  \"source\": \"https://storage.googleapis.com/bosh-gce-raw-stemcells/bosh-stemcell-97.98-google-kvm-ubuntu-xenial-go_agent-raw-1557960142.tar.gz\"\n}, description: 'Compute image description')\ncontrol 'google_compute_image-1.0' do\n  impact 1.0\n  title 'google_compute_image resource test'\n\n  describe google_compute_image(project: gcp_project_id, name: compute_image['name']) do\n    it { should exist }\n    its('disk_size_gb') { should cmp 3 }\n  end\n\n  describe google_compute_image(project: gcp_project_id, name: 'notfound') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_image_family_view.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_image_family_view resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nimage_family_views = input('image_family_views', value: {\n  \"zone\": \"us-central1-c\",\n  \"name\": \"image-1\",\n  \"source_type\": \"RAW\",\n  \"status\": \"READY\",\n  \"archive_size_bytes\": 539099200,\n  \"disk_size_gb\": 3,\n  \"family\": \"test\"\n}, description: 'Returns the latest image that is part of an image family, is not deprecated and is rolled out in the specified zone.')\ncontrol 'google_compute_image_family_view-1.0' do\n  impact 1.0\n  title 'google_compute_image_family_view resource test'\n\n\n\n  describe google_compute_image_family_view(project: gcp_project_id, zone: image_family_views['zone'], name: image_family_views['family']) do\n    it { should exist }\n    its('image_name') { should eq image_family_views['name'] }\n    its('image_source_type') { should eq image_family_views['source_type'] }\n    its('image_family') { should eq image_family_views['family'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name of the compute disk')\ninstance = input('instance', value: {\n  \"name\": \"inspec-instance\",\n  \"machine_type\": \"n1-standard-1\",\n  \"tag_1\": \"foo\",\n  \"tag_2\": \"bar\",\n  \"metadata_key\": \"123\",\n  \"metadata_value\": \"asdf\",\n  \"sa_scope\": \"https://www.googleapis.com/auth/compute.readonly\",\n  \"startup_script\": \"echo hi > /test.txt\"\n}, description: 'Compute instance description')\ncontrol 'google_compute_instance-1.0' do\n  impact 1.0\n  title 'google_compute_instance resource test'\n\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: instance['name']) do\n    it { should exist }\n    its('machine_type') { should match instance['machine_type'] }\n    its('tags.items') { should include instance['tag_1'] }\n    its('tags.items') { should include instance['tag_2'] }\n    its('tag_count') { should cmp 2 }\n    its('service_account_scopes') { should include instance['sa_scope'] }\n    its('metadata_keys') { should include instance['metadata_key'] }\n    its('metadata_values') { should include instance['metadata_value'] }\n  end\n\n  describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ninstance_group = input('instance_group', value: {\n  \"name\": \"inspec-instance-group\",\n  \"description\": \"My instance group for testing\",\n  \"named_port_name\": \"https\",\n  \"named_port_port\": 8080\n}, description: 'Instance group')\ncontrol 'google_compute_instance_group-1.0' do\n  impact 1.0\n  title 'google_compute_instance_group resource test'\n\n\n  describe google_compute_instance_group(project: gcp_project_id, zone: gcp_zone, name: instance_group['name']) do\n    it { should exist }\n    its('description') { should cmp instance_group['description'] }\n    its('named_ports.count') { should cmp 1 }\n    its('named_ports.first.name') { should cmp instance_group['named_port_name'] }\n    its('named_ports.first.port') { should cmp instance_group['named_port_port'] }\n  end\n\n  describe google_compute_instance_group(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_group_manager.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_group_manager resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\ninstance_group_manager = input('instance_group_manager', value: {\n  \"name\": \"inspec-gcp-igm\",\n  \"base_instance_name\": \"igm\",\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Instance group manager definition')\ncontrol 'google_compute_instance_group_manager-1.0' do\n  impact 1.0\n  title 'google_compute_instance_group_manager resource test'\n\n  describe google_compute_instance_group_manager(project: gcp_project_id, zone: gcp_zone, name: instance_group_manager['name']) do\n    it { should exist }\n\n    its('base_instance_name') { should eq instance_group_manager['base_instance_name'] }\n    its('named_ports.count') { should cmp 1 }\n    its('named_ports.first.name') { should eq instance_group_manager['named_port_name'] }\n    its('named_ports.first.port') { should eq instance_group_manager['named_port_port'] }\n  end\n\n  describe google_compute_instance_group_manager(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_group_managers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_group_managers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP project zone.')\ninstance_group_manager = input('instance_group_manager', value: {\n  \"name\": \"inspec-gcp-igm\",\n  \"base_instance_name\": \"igm\",\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Instance group manager definition')\ncontrol 'google_compute_instance_group_managers-1.0' do\n  impact 1.0\n  title 'google_compute_instance_group_managers resource test'\n\n  describe google_compute_instance_group_managers(project: gcp_project_id, zone: gcp_zone) do\n    its('base_instance_names') { should include instance_group_manager['base_instance_name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ninstance_group = input('instance_group', value: {\n  \"name\": \"inspec-instance-group\",\n  \"description\": \"My instance group for testing\",\n  \"named_port_name\": \"https\",\n  \"named_port_port\": 8080\n}, description: 'Instance group')\ncontrol 'google_compute_instance_groups-1.0' do\n  impact 1.0\n  title 'google_compute_instance_groups resource test'\n\n\n  describe google_compute_instance_groups(project: gcp_project_id, zone: gcp_zone) do\n    its('instance_group_names') { should include instance_group['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_groups_loop.rb",
    "content": "title 'Google compute instance groups properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_lb_zone = input(:gcp_lb_zone, value: '', description: 'The GCP pattern zone for the managed instance group (mig1).')\n\ncontrol 'gcp-compute-instance-groups-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure compute instance groups have the correct properties by looping in detail and filtering'\n\n  google_compute_instance_groups(project: gcp_project_id, zone: gcp_lb_zone).where(instance_group_name: /^gcp-inspec/).instance_group_names.each do |instance_group_name|\n    describe google_compute_instance_group(project: gcp_project_id, zone: 'europe-west2-a', name: instance_group_name) do\n      it { should exist }\n      its('size') { should be >= 0 }\n    end\n  end\nend\n\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_label_loop.rb",
    "content": "title 'Loop over all GCP Zones to find all Compute Instances with a particular Label'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\n\ncontrol 'gcp-zones-compute-label-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure labels for compute instances across all zones have or do not have a particular label.'\n\n  google_compute_zones(project: gcp_project_id).zone_names.each do |zone_name|\n    google_compute_instances(project: gcp_project_id, zone: zone_name).instance_names.each do |instance_name|\n      describe google_compute_instance(project: gcp_project_id, zone: zone_name, name: instance_name) do\n        its('labels_keys') { should_not include 'operations_override_do_not_kill' }\n      end\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_template.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_template resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ninstance_template = input('instance_template', value: {\n  \"name\": \"inspec-gcp-instance-template\",\n  \"description\": \"A description of the instance template\",\n  \"instance_description\": \"A description of the instance itself\",\n  \"machine_type\": \"f1-micro\",\n  \"tag\": \"foo\",\n  \"can_ip_forward\": false,\n  \"scheduling_automatic_restart\": true,\n  \"scheduling_on_host_maintenance\": \"MIGRATE\",\n  \"disk_source_image\": \"debian-cloud/debian-9\",\n  \"disk_auto_delete\": true,\n  \"disk_boot\": true,\n  \"network_interface_network\": \"default\",\n  \"service_account_scope\": \"storage-ro\"\n}, description: 'An instance template definition')\ncontrol 'google_compute_instance_template-1.0' do\n  impact 1.0\n  title 'google_compute_instance_template resource test'\n\n  describe google_compute_instance_template(project: gcp_project_id, name: instance_template['name']) do\n    it { should exist }\n    its('description') { should eq instance_template['description'] }\n    its('properties.description') { should eq instance_template['instance_description'] }\n    its('properties.machine_type') { should eq instance_template['machine_type'] }\n    its('properties.tags.items') { should include instance_template['tag'] }\n    its('properties.disks.count') { should eq 1 }\n    its('properties.disks.first.auto_delete') { should eq instance_template['disk_auto_delete'] }\n    its('properties.disks.first.boot') { should eq instance_template['disk_boot'] }\n    its('properties.network_interfaces.count') { should eq 1 }\n    its('properties.service_accounts.count') { should eq 1 }\n  end\n\n  describe google_compute_instance_template(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instance_templates.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instance_templates resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ninstance_template = input('instance_template', value: {\n  \"name\": \"inspec-gcp-instance-template\",\n  \"description\": \"A description of the instance template\",\n  \"instance_description\": \"A description of the instance itself\",\n  \"machine_type\": \"f1-micro\",\n  \"tag\": \"foo\",\n  \"can_ip_forward\": false,\n  \"scheduling_automatic_restart\": true,\n  \"scheduling_on_host_maintenance\": \"MIGRATE\",\n  \"disk_source_image\": \"debian-cloud/debian-9\",\n  \"disk_auto_delete\": true,\n  \"disk_boot\": true,\n  \"network_interface_network\": \"default\",\n  \"service_account_scope\": \"storage-ro\"\n}, description: 'An instance template definition')\ncontrol 'google_compute_instance_templates-1.0' do\n  impact 1.0\n  title 'google_compute_instance_templates resource test'\n\n  describe google_compute_instance_templates(project: gcp_project_id) do\n    its('names') { should include instance_template['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_instances resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name of the compute disk')\ninstance = input('instance', value: {\n  \"name\": \"inspec-instance\",\n  \"machine_type\": \"n1-standard-1\",\n  \"tag_1\": \"foo\",\n  \"tag_2\": \"bar\",\n  \"metadata_key\": \"123\",\n  \"metadata_value\": \"asdf\",\n  \"sa_scope\": \"https://www.googleapis.com/auth/compute.readonly\",\n  \"startup_script\": \"echo hi > /test.txt\"\n}, description: 'Compute instance description')\ncontrol 'google_compute_instances-1.0' do\n  impact 1.0\n  title 'google_compute_instances resource test'\n\n\n  describe google_compute_instances(project: gcp_project_id, zone: gcp_zone) do\n    its('instance_names') { should include instance['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnect.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnect resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_interconnect-1.0' do\n  impact 1.0\n  title 'google_compute_interconnect resource test'\n\n  describe google_compute_interconnect(project: gcp_project_id) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnect_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnect_attachment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  interconnect_attachment = input('interconnect_attachment', value: {\n  \"name\": \"on-prem-attachment\",\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#interconnectAttachment\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/interconnectAttachments/on-prem-attachment\",\n  \"encryption\": \"NONE\",\n  \"stack_type\": \"IPV4_ONLY\",\n}, description: 'interconnect_attachment description')\ncontrol 'google_compute_interconnect_attachment-1.0' do\n  impact 1.0\n  title 'google_compute_interconnect_attachment resource test'\n\n  describe google_compute_interconnect_attachment(name: interconnect_attachment['name'], project: gcp_project_id, region: interconnect_attachment['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp interconnect_attachment['kind'] }\n  \tits('description') { should cmp interconnect_attachment['description'] }\n  \tits('self_link') { should cmp interconnect_attachment['self_link'] }\n  \tits('name') { should cmp interconnect_attachment['name'] }\n    its('encryption') { should cmp interconnect_attachment['encryption'] }\n    its('stack_type') { should cmp interconnect_attachment['stack_type'] }\n  end\n\n  describe google_compute_interconnect_attachment(name: \"donotexist\", project: gcp_project_id, region: interconnect_attachment['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnect_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnect_attachments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  interconnect_attachment = input('interconnect_attachment', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n}, description: 'interconnect_attachment description')\n\ncontrol 'google_compute_interconnect_attachments-1.0' do\n  impact 1.0\n  title 'google_compute_interconnect_attachments resource test'\n  describe google_compute_interconnect_attachments(project: gcp_project_id, region: interconnect_attachment['region']) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnect_location.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnect_location resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ninterconnect_location = input('interconnect_location', value: {\n  \"name\": \"akl-zone1-1353\",\n  \"facility_provider_facility_id\": \"Auckland - Albany\",\n  \"facility_provider\": \"Vocus\"\n}, description: 'Retrieves the list of interconnect locations available to the specified project.')\ncontrol 'google_compute_interconnect_location-1.0' do\n  impact 1.0\n  title 'google_compute_interconnect_location resource test'\n\n  describe google_compute_interconnect_location(project: gcp_project_id, name: interconnect_location['name']) do\n    it { should exist }\n    its('facility_provider_facility_id') { should eq interconnect_location['facility_provider_facility_id'] }\n    its('facility_provider') { should eq interconnect_location['facility_provider'] }\n  end\n\n  describe google_compute_interconnect_location(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnect_locations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnect_locations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ninterconnect_location = input('interconnect_location', value: {\n  \"name\": \"akl-zone1-1353\",\n  \"facility_provider_facility_id\": \"Auckland - Albany\",\n  \"facility_provider\": \"Vocus\"\n}, description: 'Retrieves the list of interconnect locations available to the specified project.')\ncontrol 'google_compute_interconnect_locations-1.0' do\n  impact 1.0\n  title 'google_compute_interconnect_locations resource test'\n\n  describe google_compute_interconnect_locations(project: gcp_project_id) do\n    its('names') { should include interconnect_location['name'] }\n    its('facility_provider_facility_ids') { should include interconnect_location['facility_provider_facility_id'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_interconnects.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_interconnects resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_interconnects-1.0' do\n  impact 1.0\n  title 'google_compute_interconnects resource test'\n\n  describe google_compute_interconnects(project: gcp_project_id) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_license.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_license resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  license = input('license', value: {\n  \"network_attachment\": \"value_networkattachment\",\n  \"project\": \"windows-cloud\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#license\",\n  \"name\": \"mirantis-container-runtime\",\n  \"id\": \"3607075093511293736\",\n  \"license_code\": \"value_licensecode\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\"\n}, description: 'license description')\ncontrol 'google_compute_license-1.0' do\n  impact 1.0\n  title 'google_compute_license resource test'\n\n  describe google_compute_license(name: license['id'], project: gcp_project_id, region: license['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp license['kind'] }\n  \tits('name') { should cmp license['name'] }\n  \tits('id') { should cmp license['id'] }\n  \tits('license_code') { should cmp license['license_code'] }\n  \tits('creation_timestamp') { should cmp license['creation_timestamp'] }\n  \tits('description') { should cmp license['description'] }\n  \tits('self_link') { should cmp license['self_link'] }\n\n  end\n\n  describe google_compute_license(name: license['id'], project: gcp_project_id, region: license['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_license_code.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_license_code resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nlicense_code = input('license_code', value: {\n  \"name\": \"akl-zone1-1353\"\n}, description: 'License codes are mirrored across all projects that have permissions to read the License Code.')\ncontrol 'google_compute_license_code-1.0' do\n  impact 1.0\n  title 'google_compute_license_code resource test'\n\n  describe google_compute_license_code(project: gcp_project_id, name: license_code['name']) do\n    it { should exist }\n  end\n\n  describe google_compute_license_code(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_licenses.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_licenses resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  license = input('license', value: {\n  \"network_attachment\": \"value_networkattachment\",\n  \"project\": \"windows-cloud\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#license\",\n  \"name\": \"mirantis-container-runtime\",\n  \"id\": \"3607075093511293736\",\n  \"license_code\": \"value_licensecode\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\"\n}, description: 'license description')\ncontrol 'google_compute_licenses-1.0' do\n  impact 1.0\n  title 'google_compute_licenses resource test'\n\n    describe google_compute_licenses(project: gcp_project_id, region: license['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_machine_image.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_machine_image resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  machine_image = input('machine_image', value: {\n  \"project\": \"ppradhan\",\n  \"kind\": \"compute#machineImage\",\n  \"id\": \"7552526330490377685\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"image-1\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"source_instance\": \"value_sourceinstance\",\n  \"status\": \"value_status\",\n  \"total_storage_bytes\": \"value_totalstoragebytes\"\n}, description: 'machine_image description')\ncontrol 'google_compute_machine_image-1.0' do\n  impact 1.0\n  title 'google_compute_machine_image resource test'\n\n  describe google_compute_machine_image(name: machine_image['name'], project: gcp_project_id) do\n  \tit { should exist }\n  \tits('kind') { should cmp machine_image['kind'] }\n  \tits('id') { should cmp machine_image['id'] }\n  \tits('creation_timestamp') { should cmp machine_image['creation_timestamp'] }\n  \tits('name') { should cmp machine_image['name'] }\n  \tits('description') { should cmp machine_image['description'] }\n  \tits('self_link') { should cmp machine_image['self_link'] }\n  \tits('source_instance') { should cmp machine_image['source_instance'] }\n  \tits('status') { should cmp machine_image['status'] }\n  \tits('total_storage_bytes') { should cmp machine_image['total_storage_bytes'] }\n\n  end\n\n  describe google_compute_machine_image(name: machine_image['name'], project: gcp_project_id) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_machine_images.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_machine_images resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  machine_image = input('machine_image', value: {\n  \"project\": \"ppradhan\",\n  \"kind\": \"compute#machineImage\",\n  \"id\": \"7552526330490377685\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"image-1\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"source_instance\": \"value_sourceinstance\",\n  \"status\": \"value_status\",\n  \"total_storage_bytes\": \"value_totalstoragebytes\"\n}, description: 'machine_image description')\ncontrol 'google_compute_machine_images-1.0' do\n  impact 1.0\n  title 'google_compute_machine_images resource test'\n\n    describe google_compute_machine_images(project: gcp_project_id) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_machine_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_machine_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  machine_type = input('machine_type', value: {\n  \"project\": \"ppradhan\",\n  \"zone\": \"us-central1-a\",\n  \"kind\": \"compute#machineType\",\n  \"id\": \"1000012\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"a2-highgpu-1g\",\n  \"description\": \"value_description\",\n  \"maximum_persistent_disks_size_gb\": \"value_maximumpersistentdiskssizegb\",\n  \"self_link\": \"value_selflink\"\n}, description: 'machine_type description')\ncontrol 'google_compute_machine_type-1.0' do\n  impact 1.0\n  title 'google_compute_machine_type resource test'\n\n  describe google_compute_machine_type(name: machine_type['name'], project: gcp_project_id, zone: machine_type['zone']) do\n  \tit { should exist }\n  \tits('kind') { should cmp machine_type['kind'] }\n  \tits('id') { should cmp machine_type['id'] }\n  \tits('creation_timestamp') { should cmp machine_type['creation_timestamp'] }\n  \tits('name') { should cmp machine_type['name'] }\n  \tits('description') { should cmp machine_type['description'] }\n  \tits('maximum_persistent_disks_size_gb') { should cmp machine_type['maximum_persistent_disks_size_gb'] }\n  \tits('zone') { should cmp machine_type['zone'] }\n  \tits('self_link') { should cmp machine_type['self_link'] }\n\n  end\n\n  describe google_compute_machine_type(name: machine_type['name'], project: gcp_project_id, zone: machine_type['zone']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_machine_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_machine_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  machine_type = input('machine_type', value: {\n  \"project\": \"ppradhan\",\n  \"zone\": \"us-central1-a\",\n  \"kind\": \"compute#machineType\",\n  \"id\": \"1000012\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"a2-highgpu-1g\",\n  \"description\": \"value_description\",\n  \"maximum_persistent_disks_size_gb\": \"value_maximumpersistentdiskssizegb\",\n  \"self_link\": \"value_selflink\"\n}, description: 'machine_type description')\ncontrol 'google_compute_machine_types-1.0' do\n  impact 1.0\n  title 'google_compute_machine_types resource test'\n\n    describe google_compute_machine_types(project: gcp_project_id, zone: machine_type['zone']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnetwork = input('network', value: {\n  \"name\": \"inspec-network\",\n  \"routing_mode\": \"REGIONAL\"\n}, description: 'Network description')\ncontrol 'google_compute_network-1.0' do\n  impact 1.0\n  title 'google_compute_network resource test'\n\n  describe google_compute_network(project: gcp_project_id, name: network['name']) do\n    it { should exist }\n    its('routing_config.routing_mode') { should cmp network['routing_mode'] }\n  end\n\n  describe google_compute_network(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_attachment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  network_attachment = input('network_attachment', value: {\n  \"network_attachment\": \"inspec-test\",\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"connection_preference\": \"value_connectionpreference\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"network\": \"inspec-network\"\n}, description: 'network_attachment description')\ncontrol 'google_compute_network_attachment-1.0' do\n  impact 1.0\n  title 'google_compute_network_attachment resource test'\n\n  describe google_compute_network_attachment(network_attachment: network_attachment['network_attachment'], project: gcp_project_id, region: network_attachment['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp network_attachment['kind'] }\n  \tits('id') { should cmp network_attachment['id'] }\n  \tits('creation_timestamp') { should cmp network_attachment['creation_timestamp'] }\n  \tits('name') { should cmp network_attachment['name'] }\n  \tits('description') { should cmp network_attachment['description'] }\n  \tits('self_link') { should cmp network_attachment['self_link'] }\n  \tits('self_link_with_id') { should cmp network_attachment['self_link_with_id'] }\n  \tits('region') { should cmp network_attachment['region'] }\n  \tits('connection_preference') { should cmp network_attachment['connection_preference'] }\n  \tits('fingerprint') { should cmp network_attachment['fingerprint'] }\n  \tits('network') { should cmp network_attachment['network'] }\n\n  end\n\n  describe google_compute_v1_network_attachment(name: network_attachment['network_attachment'], project: gcp_project_id, region: network_attachment['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_attachments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  network_attachment = input('network_attachment', value: {\n  \"network_attachment\": \"inspec-test\",\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"connection_preference\": \"value_connectionpreference\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"network\": \"inspec-network\"\n}, description: 'network_attachment description')\ncontrol 'google_compute_network_attachments-1.0' do\n  impact 1.0\n  title 'google_compute_network_attachments resource test'\n\n      describe google_compute_network_attachments(project: gcp_project_id, region: network_attachment['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_edge_security_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_edge_security_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  network_edge_security_service = input('network_edge_security_service', value: {\n  \"machine_type\": \"value_machinetype\",\n  \"project\": \"ppradhan\",\n  \"zone\": \"us-central1-a\",\n  \"kind\": \"compute#networkEdgeSecurityService\",\n  \"id\": \"6659048510113795180\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"new-network-edge-security-service\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"region\": \"us-central1\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"security_policy\": \"value_securitypolicy\"\n}, description: 'network_edge_security_service description')\ncontrol 'google_compute_network_edge_security_service-1.0' do\n  impact 1.0\n  title 'google_compute_network_edge_security_service resource test'\n\n  describe google_compute_network_edge_security_service(name: network_edge_security_service['name'], project: gcp_project_id, region: network_edge_security_service['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp network_edge_security_service['kind'] }\n  \tits('id') { should cmp network_edge_security_service['id'] }\n  \tits('creation_timestamp') { should cmp network_edge_security_service['creation_timestamp'] }\n  \tits('name') { should cmp network_edge_security_service['name'] }\n  \tits('description') { should cmp network_edge_security_service['description'] }\n  \tits('self_link') { should cmp network_edge_security_service['self_link'] }\n  \tits('self_link_with_id') { should cmp network_edge_security_service['self_link_with_id'] }\n  \tits('region') { should cmp network_edge_security_service['region'] }\n  \tits('fingerprint') { should cmp network_edge_security_service['fingerprint'] }\n  \tits('security_policy') { should cmp network_edge_security_service['security_policy'] }\n\n  end\n\n  describe google_compute_network_edge_security_service(name: network_edge_security_service['name'], project: gcp_project_id, region: network_edge_security_service['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_endpoint_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_endpoint_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnetwork_endpoint_group = input('network_endpoint_group', value: {\n  \"name\": \"inspec-gcp-endpoint-group\",\n  \"default_port\": 90\n}, description: 'Network endpoint group description')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ncontrol 'google_compute_network_endpoint_group-1.0' do\n  impact 1.0\n  title 'google_compute_network_endpoint_group resource test'\n\n\n  describe google_compute_network_endpoint_group(project: gcp_project_id, zone: gcp_zone, name: network_endpoint_group['name']) do\n    it { should exist }\n    its('default_port') { should cmp network_endpoint_group['default_port'] }\n  end\n\n  describe google_compute_network_endpoint_group(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_endpoint_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_endpoint_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnetwork_endpoint_group = input('network_endpoint_group', value: {\n  \"name\": \"inspec-gcp-endpoint-group\",\n  \"default_port\": 90\n}, description: 'Network endpoint group description')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ncontrol 'google_compute_network_endpoint_groups-1.0' do\n  impact 1.0\n  title 'google_compute_network_endpoint_groups resource test'\n\n\n  describe google_compute_network_endpoint_groups(project: gcp_project_id, zone: gcp_zone) do\n    its('default_ports') { should include network_endpoint_group['default_port'] }\n    its('names') { should include network_endpoint_group['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_firewall_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_firewall_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  network_firewall_policy = input('network_firewall_policy', value: {\n  \"project\": \"value_project\",\n  \"kind\": \"compute#firewallPolicy\",\n  \"id\": \"3379931040786965079\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test\",\n  \"description\": \"\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"short_name\": \"value_shortname\",\n  \"display_name\": \"value_displayname\",\n  \"parent\": \"value_parent\",\n  \"region\": \"value_region\"\n}, description: 'network_firewall_policy description')\ncontrol 'google_compute_network_firewall_policies-1.0' do\n  impact 1.0\n  title 'google_compute_network_firewall_policies resource test'\n\n      describe google_compute_network_firewall_policies(project: gcp_project_id) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_network_firewall_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_network_firewall_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  network_firewall_policy = input('network_firewall_policy', value: {\n  \"project\": \"value_project\",\n  \"kind\": \"compute#firewallPolicy\",\n  \"id\": \"3379931040786965079\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test\",\n  \"description\": \"\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"short_name\": \"value_shortname\",\n  \"display_name\": \"value_displayname\",\n  \"parent\": \"value_parent\",\n  \"region\": \"value_region\"\n}, description: 'network_firewall_policy description')\ncontrol 'google_compute_network_firewall_policy-1.0' do\n  impact 1.0\n  title 'google_compute_network_firewall_policy resource test'\n\n  describe google_compute_network_firewall_policy(name: network_firewall_policy['name'], project: gcp_project_id) do\n  \tit { should exist }\n  \tits('kind') { should cmp network_firewall_policy['kind'] }\n  \tits('id') { should cmp network_firewall_policy['id'] }\n  \tits('creation_timestamp') { should cmp network_firewall_policy['creation_timestamp'] }\n  \tits('name') { should cmp network_firewall_policy['name'] }\n  \tits('description') { should cmp network_firewall_policy['description'] }\n  \tits('fingerprint') { should cmp network_firewall_policy['fingerprint'] }\n  \tits('self_link') { should cmp network_firewall_policy['self_link'] }\n  \tits('self_link_with_id') { should cmp network_firewall_policy['self_link_with_id'] }\n  \tits('short_name') { should cmp network_firewall_policy['short_name'] }\n  \tits('display_name') { should cmp network_firewall_policy['display_name'] }\n  \tits('parent') { should cmp network_firewall_policy['parent'] }\n  \tits('region') { should cmp network_firewall_policy['region'] }\n\n  end\n\n  describe google_compute_network_firewall_policy(name: network_firewall_policy['name'], project: gcp_project_id) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_networks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_networks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnetwork = input('network', value: {\n  \"name\": \"inspec-network\",\n  \"routing_mode\": \"REGIONAL\"\n}, description: 'Network description')\ncontrol 'google_compute_networks-1.0' do\n  impact 1.0\n  title 'google_compute_networks resource test'\n\n  describe google_compute_networks(project: gcp_project_id) do\n  \tits('network_names') { should include network['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnode_group = input('node_group', value: {\n  \"name\": \"inspec-node-group\",\n  \"description\": \"A description of the node group\",\n  \"size\": 0\n}, description: 'Node group description')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ncontrol 'google_compute_node_group-1.0' do\n  impact 1.0\n  title 'google_compute_node_group resource test'\n\n\n  describe google_compute_node_group(project: gcp_project_id, zone: gcp_zone, name: node_group['name']) do\n    it { should exist }\n    its('description') { should cmp node_group['description'] }\n    its('size') { should cmp node_group['size'] }\n  end\n\n  describe google_compute_node_group(project: gcp_project_id, zone: gcp_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nnode_group = input('node_group', value: {\n  \"name\": \"inspec-node-group\",\n  \"description\": \"A description of the node group\",\n  \"size\": 0\n}, description: 'Node group description')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name')\ncontrol 'google_compute_node_groups-1.0' do\n  impact 1.0\n  title 'google_compute_node_groups resource test'\n\n\n  describe google_compute_node_groups(project: gcp_project_id, zone: gcp_zone) do\n    it { should exist }\n    its('descriptions') { should include node_group['description'] }\n    its('sizes') { should include node_group['size'] }\n    its('names') { should include node_group['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_template.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_template resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nnode_template = input('node_template', value: {\n  \"name\": \"inspec-node-template\",\n  \"label_key\": \"key\",\n  \"label_value\": \"value\"\n}, description: 'Node template description')\ncontrol 'google_compute_node_template-1.0' do\n  impact 1.0\n  title 'google_compute_node_template resource test'\n\n\n  describe google_compute_node_template(project: gcp_project_id, region: gcp_location, name: node_template['name']) do\n    it { should exist }\n    its('node_affinity_labels') { should include(node_template['label_key'] => node_template['label_value']) }\n  end\n\n  describe google_compute_node_template(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_templates.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_templates resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nnode_template = input('node_template', value: {\n  \"name\": \"inspec-node-template\",\n  \"label_key\": \"key\",\n  \"label_value\": \"value\"\n}, description: 'Node template description')\ncontrol 'google_compute_node_templates-1.0' do\n  impact 1.0\n  title 'google_compute_node_templates resource test'\n\n\n  describe google_compute_node_templates(project: gcp_project_id, region: gcp_location) do\n    its('names') { should include node_template['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_type.rb",
    "content": "# frozen_string_literal: true\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nnode_type = input('node_type', value: {\n                    \"node_type\": 'c2-node-60-240',\n  \"project\": 'ppradhan',\n  \"zone\": 'us-central1-a',\n  \"full_zone\": 'https://www.googleapis.com/compute/v1/projects/ppradhan/zones/us-central1-a',\n  \"kind\": 'compute#nodeType',\n  \"name\": 'c2-node-60-240',\n  \"description\": '60 CPUs and 240 GB RAM',\n  \"cpu_platform\": 'Intel Cascade Lake',\n  \"self_link\": 'https://www.googleapis.com/compute/v1/projects/ppradhan/zones/us-central1-a/nodeTypes/c2-node-60-240',\n                  }, description: 'node_type description')\ncontrol 'google_compute_node_type-1.0' do\n  impact 1.0\n  title 'google_compute_node_type resource test'\n\n  describe google_compute_node_type(node_type: node_type['node_type'], project: gcp_project_id, zone: node_type['zone']) do\n    it { should exist }\n    its('kind') { should cmp node_type['kind'] }\n    its('name') { should cmp node_type['name'] }\n    its('description') { should cmp node_type['description'] }\n    its('cpu_platform') { should cmp node_type['cpu_platform'] }\n    its('zone') { should cmp node_type['full_zone'] }\n    its('self_link') { should cmp node_type['self_link'] }\n  end\n\n  describe google_compute_node_type(node_type: 'n1-standard-1', project: gcp_project_id, zone: 'us-central1-b') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_node_types.rb",
    "content": "# frozen_string_literal: true\n\n# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_node_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nnode_type = input('node_type', value: {\n                    \"zone\": 'us-central1-a',\n  \"full_zone\": 'https://www.googleapis.com/compute/v1/projects/ppradhan/zones/us-central1-a',\n  \"name\": 'c2-node-60-240',\n                  }, description: 'node_type description')\n\ncontrol 'google_compute_node_types-1.0' do\n  impact 1.0\n  title 'google_compute_node_types resource test'\n\n  describe google_compute_node_types(project: gcp_project_id, zone: node_type['zone']) do\n    it { should exist }\n    its('count') { should be >= 1 }\n    its('names') { should include node_type['name'] }\n    its('zones') { should include node_type['full_zone'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_packet_mirroring.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_packet_mirroring resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  packet_mirroring = input('packet_mirroring', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#packetMirroring\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"name\": \"inspec-test-policy\",\n  \"description\": \"value_description\",\n  \"enable\": \"value_enable\"\n}, description: 'packet_mirroring description')\ncontrol 'google_compute_packet_mirroring-1.0' do\n  impact 1.0\n  title 'google_compute_packet_mirroring resource test'\n\n  describe google_compute_packet_mirroring(name: packet_mirroring['name'], project: gcp_project_id, region: packet_mirroring['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp packet_mirroring['kind'] }\n  \tits('id') { should cmp packet_mirroring['id'] }\n  \tits('creation_timestamp') { should cmp packet_mirroring['creation_timestamp'] }\n  \tits('self_link') { should cmp packet_mirroring['self_link'] }\n  \tits('self_link_with_id') { should cmp packet_mirroring['self_link_with_id'] }\n  \tits('name') { should cmp packet_mirroring['name'] }\n  \tits('description') { should cmp packet_mirroring['description'] }\n  \tits('region') { should cmp packet_mirroring['region'] }\n  \tits('enable') { should cmp packet_mirroring['enable'] }\n\n  end\n\n  describe google_compute_packet_mirroring(name: packet_mirroring['name'], project: gcp_project_id, region: packet_mirroring['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_packet_mirrorings.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_packet_mirrorings resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  packet_mirroring = input('packet_mirroring', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#packetMirroring\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"name\": \"inspec-test-policy\",\n  \"description\": \"value_description\",\n  \"enable\": \"value_enable\"\n}, description: 'packet_mirroring description')\ncontrol 'google_compute_packet_mirrorings-1.0' do\n  impact 1.0\n  title 'google_compute_packet_mirrorings resource test'\n\n    describe google_compute_packet_mirrorings(project: gcp_project_id, region: packet_mirroring['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_project_info.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_project_info resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_project_info-1.0' do\n  impact 1.0\n  title 'google_compute_project_info resource test'\n\n  describe google_compute_project_info(project: gcp_project_id) do\n  \tit { should exist }\n  \tits('default_service_account') { should match \"developer.gserviceaccount.com\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_public_delegated_prefix.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_public_delegated_prefix resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\npublic_delegated_prefix = attribute('public_delegated_prefix', default: {\n  \"name\": \"test\"\n}, description: 'PublicDelegatedPrefix resource in the given region')\ncontrol 'google_compute_public_delegated_prefix-1.0' do\n  impact 1.0\n  title 'google_compute_public_delegated_prefix resource test'\n\n  describe google_compute_public_delegated_prefix(project: gcp_project_id, region: 'us-east1-b', name: public_delegated_prefix['name']) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_public_delegated_prefixes.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_public_delegated_prefixes resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\npublic_delegated_prefix = attribute('public_delegated_prefix', default: {\n  \"name\": \"test\"\n}, description: 'PublicDelegatedPrefix resource in the given region')\ncontrol 'google_compute_public_delegated_prefixes-1.0' do\n  impact 1.0\n  title 'google_compute_public_delegated_prefixes resource test'\n\n  describe google_compute_public_delegated_prefixes(project: gcp_project_id, region: 'us-east1-b') do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ncontrol 'google_compute_region-1.0' do\n  impact 1.0\n  title 'google_compute_region resource test'\n\n  describe google_compute_region(project: gcp_project_id, name: gcp_location) do\n    it { should exist }\n    it { should be_up }\n    its('zone_names') { should include \"#{gcp_location}-a\" }\n  end\n\n  describe google_compute_region(project: gcp_project_id, name: 'notthere') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_autoscaler.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_autoscaler resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_autoscaler = input('region_autoscaler', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#autoscaler\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test-group-2\",\n  \"description\": \"value_description\",\n  \"target\": \"value_target\",\n  \"zone\": \"value_zone\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"status\": \"value_status\"\n}, description: 'region_autoscaler description')\ncontrol 'google_compute_region_autoscaler-1.0' do\n  impact 1.0\n  title 'google_compute_region_autoscaler resource test'\n\n  describe google_compute_region_autoscaler(name: region_autoscaler['name'], project: gcp_project_id, region: region_autoscaler['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_autoscaler['kind'] }\n  \tits('id') { should cmp region_autoscaler['id'] }\n  \tits('creation_timestamp') { should cmp region_autoscaler['creation_timestamp'] }\n  \tits('name') { should cmp region_autoscaler['name'] }\n  \tits('description') { should cmp region_autoscaler['description'] }\n  \tits('target') { should cmp region_autoscaler['target'] }\n  \tits('zone') { should cmp region_autoscaler['zone'] }\n  \tits('region') { should cmp region_autoscaler['region'] }\n  \tits('self_link') { should cmp region_autoscaler['self_link'] }\n  \tits('self_link_with_id') { should cmp region_autoscaler['self_link_with_id'] }\n  \tits('status') { should cmp region_autoscaler['status'] }\n\n  end\n\n  describe google_compute_region_autoscaler(name: region_autoscaler['name'], project: gcp_project_id, region: region_autoscaler['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_autoscalers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_autoscalers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_autoscaler = input('region_autoscaler', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#autoscaler\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"inspec-test-group-2\",\n  \"description\": \"value_description\",\n  \"target\": \"value_target\",\n  \"zone\": \"value_zone\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"status\": \"value_status\"\n}, description: 'region_autoscaler description')\ncontrol 'google_compute_region_autoscalers-1.0' do\n  impact 1.0\n  title 'google_compute_region_autoscalers resource test'\n\n    describe google_compute_region_autoscalers(project: gcp_project_id, region: region_autoscaler['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_backend_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_backend_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nregion_backend_service = input('region_backend_service', value: {\n  \"name\": \"inspec-gcp-region-backend-service\",\n  \"description\": \"A regional description\",\n  \"protocol\": \"TCP\",\n  \"timeout_sec\": 15\n}, description: 'Backend service definition')\ncontrol 'google_compute_region_backend_service-1.0' do\n  impact 1.0\n  title 'google_compute_region_backend_service resource test'\n\n  describe google_compute_region_backend_service(project: gcp_project_id, region: gcp_location, name: region_backend_service['name']) do\n    it { should exist }\n    its('description') { should eq region_backend_service['description'] }\n    its('protocol') { should eq region_backend_service['protocol'] }\n    its('timeout_sec') { should eq region_backend_service['timeout_sec'] }\n  end\n\n  describe google_compute_region_backend_service(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_backend_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_backend_services resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nregion_backend_service = input('region_backend_service', value: {\n  \"name\": \"inspec-gcp-region-backend-service\",\n  \"description\": \"A regional description\",\n  \"protocol\": \"TCP\",\n  \"timeout_sec\": 15\n}, description: 'Backend service definition')\ncontrol 'google_compute_region_backend_services-1.0' do\n  impact 1.0\n  title 'google_compute_region_backend_services resource test'\n\n  describe google_compute_region_backend_services(project: gcp_project_id, region: gcp_location) do\n    its('count') { should be >= 1 }\n    its('names') { should include region_backend_service['name'] }\n    its('protocols') { should include region_backend_service['protocol'] }\n    its('timeout_secs') { should include region_backend_service['timeout_sec'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_commitment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_commitment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nregion_commitment = input('region_commitment', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"full_region\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1\",\n  \"target_vpn_gateway\": \"value_targetvpngateway\",\n  \"kind\": \"compute#commitment\",\n  \"name\": \"my-region-commitment\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/commitments/my-region-commitment\",\n  \"status\": \"NOT_YET_ACTIVE\",\n  \"status_message\": \"The commitment is not yet active (its startTimestamp is in the future). It will not apply to current resource usage.\",\n  \"plan\": \"THIRTY_SIX_MONTH\",\n  \"type\": \"GENERAL_PURPOSE\",\n  \"category\": \"MACHINE\",\n}, description: 'region_commitment description')\ncontrol 'google_compute_region_commitment-1.0' do\n  impact 1.0\n  title 'google_compute_region_commitment resource test'\n\n  describe google_compute_region_commitment(name: region_commitment['name'], project: gcp_project_id, region: region_commitment['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_commitment['kind'] }\n  \tits('name') { should cmp region_commitment['name'] }\n  \tits('region') { should cmp region_commitment['full_region'] }\n  \tits('self_link') { should cmp region_commitment['self_link'] }\n  \tits('status') { should cmp region_commitment['status'] }\n  \tits('status_message') { should cmp region_commitment['status_message'] }\n  \tits('plan') { should cmp region_commitment['plan'] }\n  \tits('type') { should cmp region_commitment['type'] }\n  \tits('category') { should cmp region_commitment['category'] }\n  end\n\n  describe google_compute_region_commitment(name: \"donotexist\", project: gcp_project_id, region: region_commitment['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_commitments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_commitments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nregion_commitment = input('region_commitment', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n}, description: 'region_commitment description')\n\ncontrol 'google_compute_region_commitments-1.0' do\n  impact 1.0\n  title 'google_compute_region_commitments resource test'\n\n      describe google_compute_region_commitments(project: gcp_project_id, region: region_commitment['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_disk_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_disk_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_disk_type = input('region_disk_type', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#diskType\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"pd-balanced\",\n  \"description\": \"Balanced Persistent Disk\",\n  \"valid_disk_size\": \"100\",\n  \"zone\": \"value_zone\",\n  \"self_link\": \"value_selflink\",\n  \"default_disk_size_gb\": \"value_defaultdisksizegb\"\n}, description: 'region_disk_type description')\ncontrol 'google_compute_region_disk_type-1.0' do\n  impact 1.0\n  title 'google_compute_region_disk_type resource test'\n\n  describe google_compute_region_disk_type(disk_type: region_disk_type['name'], project: gcp_project_id, region: region_disk_type['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_disk_type['kind'] }\n  \tits('id') { should cmp region_disk_type['id'] }\n  \tits('creation_timestamp') { should cmp region_disk_type['creation_timestamp'] }\n  \tits('name') { should cmp region_disk_type['name'] }\n  \tits('description') { should cmp region_disk_type['description'] }\n  \tits('valid_disk_size') { should cmp region_disk_type['valid_disk_size'] }\n  \tits('zone') { should cmp region_disk_type['zone'] }\n  \tits('self_link') { should cmp region_disk_type['self_link'] }\n  \tits('default_disk_size_gb') { should cmp region_disk_type['default_disk_size_gb'] }\n  \tits('region') { should cmp region_disk_type['region'] }\n  end\n\n  describe google_compute_region_disk_type(disk_type: 'nonexist', project: gcp_project_id, region: region_disk_type['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_disk_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_disk_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_disk_type = input('region_disk_type', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#diskType\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"pd-balanced\",\n  \"description\": \"Balanced Persistent Disk\",\n  \"valid_disk_size\": \"100\",\n  \"zone\": \"value_zone\",\n  \"self_link\": \"value_selflink\",\n  \"default_disk_size_gb\": \"value_defaultdisksizegb\"\n}, description: 'region_disk_type description')\ncontrol 'google_compute_region_disk_types-1.0' do\n  impact 1.0\n  title 'google_compute_region_disk_types resource test'\n\n    describe google_compute_region_disk_types(project: gcp_project_id, region: region_disk_type['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_health_check.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_health_check resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_health_check = input(:region_health_check, value: {\n  \"name\": \"inspec-gcp-region-health-check\",\n  \"region\": \"us-central1\",\n  \"timeout_sec\": 10,\n  \"check_interval_sec\": 10,\n  \"tcp_health_check_port\": 80\n}, description: 'The GCP project region health check')\n\ngcp_compute_health_check_name = region_health_check[\"name\"]\ngcp_compute_health_check_region_name = region_health_check[\"region\"]\ncontrol 'google_compute_region_health_check-1.0' do\n  impact 1.0\n  title 'google_compute_region_health_check resource test'\n\n\n  describe google_compute_region_health_check(project: gcp_project_id, region: gcp_compute_health_check_region_name, name: gcp_compute_health_check_name) do\n    it { should exist }\n    its('type') { should eq \"TCP\" }\n  end\n\n  describe google_compute_region_health_check(project: gcp_project_id,  region: 'europe-west2', name: 'notthere') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_health_checks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_health_checks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_health_check = input(:region_health_check, value: {\n  \"name\": \"inspec-gcp-region-health-check\",\n  \"region\": \"us-central1\",\n  \"timeout_sec\": 10,\n  \"check_interval_sec\": 10,\n  \"tcp_health_check_port\": 80\n}, description: 'The GCP project region health check')\n\ngcp_compute_health_check_name = region_health_check[\"name\"]\ngcp_compute_health_check_region_name = region_health_check[\"region\"]\ncontrol 'google_compute_region_health_checks-1.0' do\n  impact 1.0\n  title 'google_compute_region_health_checks resource test'\n\n\n  describe google_compute_region_health_checks(project: gcp_project_id, region: gcp_compute_health_check_region_name) do\n    its('types') { should include \"TCP\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_instance_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_instance_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nregion_instance_group = input('region_instance_group', value: {\n  \"name\": \"instance-group-2\",\n  \"region\": \"us-central1\",\n  \"size\": 1,\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Compute region instance group description')\ncontrol 'google_compute_region_instance_group-1.0' do\n  impact 1.0\n  title 'google_compute_region_instance_group resource test'\n\n  describe google_compute_region_instance_group(project: gcp_project_id, region: region_instance_group['region'], name: region_instance_group['name']) do\n  it { should exist }\n  its('name') { should eq region_instance_group['name'] }\n  its('size') { should eq region_instance_group['size'] }\n  its('named_ports.first.name') { should eq region_instance_group['named_port_name'] }\n  its('named_ports.first.port') { should eq region_instance_group['named_port_port'] }\n  end\n\n  describe google_compute_region_instance_group(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_instance_group_manager.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_instance_group_manager resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrigm = input('rigm', value: {\n  \"name\": \"inspec-rigm\",\n  \"base_instance_name\": \"rigm1\",\n  \"target_size\": 1,\n  \"named_port_name\": \"https\",\n  \"named_port_port\": 8888,\n  \"healing_delay\": 300\n}, description: 'Compute region instance group manager description')\ncontrol 'google_compute_region_instance_group_manager-1.0' do\n  impact 1.0\n  title 'google_compute_region_instance_group_manager resource test'\n\n  describe google_compute_region_instance_group_manager(project: gcp_project_id, region: gcp_location, name: rigm['name']) do\n    it { should exist }\n    its('base_instance_name') { should eq rigm['base_instance_name'] }\n    its('target_size') { should eq rigm['target_size'] }\n    its('named_ports.first.name') { should eq rigm['named_port_name'] }\n    its('named_ports.first.port') { should eq rigm['named_port_port'] }\n    its('auto_healing_policies.first.initial_delay_sec') { should eq rigm['healing_delay'] }\n  end\n\n  describe google_compute_region_instance_group_manager(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_instance_group_managers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_instance_group_managers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrigm = input('rigm', value: {\n  \"name\": \"inspec-rigm\",\n  \"base_instance_name\": \"rigm1\",\n  \"target_size\": 1,\n  \"named_port_name\": \"https\",\n  \"named_port_port\": 8888,\n  \"healing_delay\": 300\n}, description: 'Compute region instance group manager description')\ncontrol 'google_compute_region_instance_group_managers-1.0' do\n  impact 1.0\n  title 'google_compute_region_instance_group_managers resource test'\n\n  describe google_compute_region_instance_group_managers(project: gcp_project_id, region: gcp_location) do\n  \tits('instance_group_manager_names') { should include rigm['name'] }\n    its('base_instance_names') { should include rigm['base_instance_name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_instance_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_instance_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nregion_instance_group = input('region_instance_group', value: {\n  \"name\": \"instance-group-2\",\n  \"region\": \"us-central1\",\n  \"size\": 1,\n  \"named_port_name\": \"port\",\n  \"named_port_port\": 80\n}, description: 'Compute region instance group description')\ncontrol 'google_compute_region_instance_groups-1.0' do\n  impact 1.0\n  title 'google_compute_region_instance_groups resource test'\n\n  describe google_compute_region_instance_groups(project: gcp_project_id, region: region_instance_group['region']) do\n  \tit { should exist }\n  \tits('names') { should include region_instance_group['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_network_endpoint_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_network_endpoint_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_network_endpoint_group = input('region_network_endpoint_group', value: {\n  \"network_endpoint_group\": \"apigee-us-west1-xw8iaictllv4\",\n  \"project\": \"value_project\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"network_endpoint_type\": \"value_networkendpointtype\",\n  \"region\": \"us-west1\",\n  \"zone\": \"value_zone\",\n  \"network\": \"value_network\",\n  \"subnetwork\": \"value_subnetwork\",\n  \"psc_target_service\": \"value_psctargetservice\"\n}, description: 'region_network_endpoint_group description')\ncontrol 'google_compute_region_network_endpoint_group-1.0' do\n  impact 1.0\n  title 'google_compute_region_network_endpoint_group resource test'\n\n  describe google_compute_region_network_endpoint_group(network_endpoint_group: region_network_endpoint_group['network_endpoint_group'], project: gcp_project_id, region: region_network_endpoint_group['region']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_network_endpoint_group['kind'] }\n  \tits('id') { should cmp region_network_endpoint_group['id'] }\n  \tits('creation_timestamp') { should cmp region_network_endpoint_group['creation_timestamp'] }\n  \tits('self_link') { should cmp region_network_endpoint_group['self_link'] }\n  \tits('name') { should cmp region_network_endpoint_group['name'] }\n  \tits('description') { should cmp region_network_endpoint_group['description'] }\n  \tits('network_endpoint_type') { should cmp region_network_endpoint_group['network_endpoint_type'] }\n  \tits('region') { should cmp region_network_endpoint_group['region'] }\n  \tits('zone') { should cmp region_network_endpoint_group['zone'] }\n  \tits('network') { should cmp region_network_endpoint_group['network'] }\n  \tits('subnetwork') { should cmp region_network_endpoint_group['subnetwork'] }\n  \tits('psc_target_service') { should cmp region_network_endpoint_group['psc_target_service'] }\n\n  end\n\n  describe google_compute_region_network_endpoint_group(network_endpoint_group: region_network_endpoint_group['network_endpoint_group'], project: gcp_project_id, region: region_network_endpoint_group['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_network_endpoint_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_network_endpoint_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_network_endpoint_group = input('region_network_endpoint_group', value: {\n  \"network_endpoint_group\": \"apigee-us-west1-xw8iaictllv4\",\n  \"project\": \"value_project\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"network_endpoint_type\": \"value_networkendpointtype\",\n  \"region\": \"us-west1\",\n  \"zone\": \"value_zone\",\n  \"network\": \"value_network\",\n  \"subnetwork\": \"value_subnetwork\",\n  \"psc_target_service\": \"value_psctargetservice\"\n}, description: 'region_network_endpoint_group description')\ncontrol 'google_compute_region_network_endpoint_groups-1.0' do\n  impact 1.0\n  title 'google_compute_region_network_endpoint_groups resource test'\n\n      describe google_compute_region_network_endpoint_groups(project: gcp_project_id, region: region_network_endpoint_group['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_operation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_operation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_operation = input('region_operation', value: {\n  \"name\": \"operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5\",\n  \"region\": \"us-central1\",\n  \"operation_type\": \"compute.instanceGroupManagers.insert\",\n  \"status\": \"DONE\",\n  \"progress\": 100\n}, description: 'Operation resources contained within the specified region')\ncontrol 'google_compute_region_operation-1.0' do\n  impact 1.0\n  title 'google_compute_region_operation resource test'\n\n  describe google_compute_region_operation(project: gcp_project_id, region: region_operation['region'], name: region_operation['name']) do\n  it { should exist }\n  its('name') { should eq region_operation['name'] }\n  its('status') { should eq region_operation['status'] }\n  its('progress') { should eq region_operation['progress'] }\n  end\n\n  describe google_compute_region_operation(project: gcp_project_id, region: region_operation['region'], name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_operations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_operations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nregion_operation = input('region_operation', value: {\n  \"name\": \"operation-1641188435323-5d4a6f5b26934-9281422c-dce238f5\",\n  \"region\": \"us-central1\",\n  \"operation_type\": \"compute.instanceGroupManagers.insert\",\n  \"status\": \"DONE\",\n  \"progress\": 100\n}, description: 'Operation resources contained within the specified region')\ncontrol 'google_compute_region_operations-1.0' do\n  impact 1.0\n  title 'google_compute_region_operations resource test'\n\n  describe google_compute_region_operations(project: gcp_project_id, region: region_operation['region']) do\n  \tit { should exist }\n  \tits('names') { should include region_operation['name'] }\n  \tits('progresses') { should include region_operation['progress'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_security_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_security_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_security_policy = input('region_security_policy', value: {\n  \"securitypolicy\": \"value_securitypolicy\"\n}, description: 'region_security_policy description')\ncontrol 'google_compute_region_security_policies-1.0' do\n  impact 1.0\n  title 'google_compute_region_security_policies resource test'\n\n      describe google_compute_region_security_policies(project: gcp_project_id, region: region_security_policy['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_security_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_security_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_security_policy = input('region_security_policy', value: {\n  \"securitypolicy\": \"value_securitypolicy\"\n}, description: 'region_security_policy description')\ncontrol 'google_compute_region_security_policy-1.0' do\n  impact 1.0\n  title 'google_compute_region_security_policy resource test'\n\n  describe google_compute_region_security_policy(project: gcp_project_id, region: region_security_policy['region'], security_policy: region_security_policy['securityPolicy']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_security_policy['kind'] }\n  \tits('id') { should cmp region_security_policy['id'] }\n  \tits('creation_timestamp') { should cmp region_security_policy['creation_timestamp'] }\n  \tits('name') { should cmp region_security_policy['name'] }\n  \tits('description') { should cmp region_security_policy['description'] }\n  \tits('fingerprint') { should cmp region_security_policy['fingerprint'] }\n  \tits('self_link') { should cmp region_security_policy['self_link'] }\n  \tits('self_link_with_id') { should cmp region_security_policy['self_link_with_id'] }\n  \tits('type') { should cmp region_security_policy['type'] }\n  \tits('label_fingerprint') { should cmp region_security_policy['label_fingerprint'] }\n  \tits('display_name') { should cmp region_security_policy['display_name'] }\n  \tits('parent') { should cmp region_security_policy['parent'] }\n  \tits('region') { should cmp region_security_policy['region'] }\n\n  end\n\n  describe google_compute_region_security_policy(project: gcp_project_id, region: region_security_policy['region'], security_policy: region_security_policy['securityPolicy']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_ssl_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_ssl_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nregion_ssl_policy = input('region_ssl_policy', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n}, description: 'region_ssl_policy description')\n\ncontrol 'google_compute_region_ssl_policies-1.0' do\n  impact 1.0\n  title 'google_compute_region_ssl_policies resource test'\n\n      describe google_compute_region_ssl_policies(project: gcp_project_id, region: region_ssl_policy['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_ssl_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_ssl_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nregion_ssl_policy = input('region_ssl_policy', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"full_region\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1\",\n  \"kind\": \"compute#sslPolicy\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/sslPolicies/basic-ssl-policy\",\n  \"name\": \"basic-ssl-policy\",\n  \"profile\": \"MODERN\",\n  \"min_tls_version\": \"TLS_1_0\",\n}, description: 'region_ssl_policy description')\n\ncontrol 'google_compute_region_ssl_policy-1.0' do\n  impact 1.0\n  title 'google_compute_region_ssl_policy resource test'\n\n  describe google_compute_region_ssl_policy(project: gcp_project_id, region: region_ssl_policy['region'], name: region_ssl_policy['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_ssl_policy['kind'] }\n  \tits('self_link') { should cmp region_ssl_policy['self_link'] }\n  \tits('name') { should cmp region_ssl_policy['name'] }\n  \tits('profile') { should cmp region_ssl_policy['profile'] }\n  \tits('min_tls_version') { should cmp region_ssl_policy['min_tls_version'] }\n  \tits('region') { should cmp region_ssl_policy['full_region'] }\n  end\n\n  describe google_compute_region_ssl_policy(project: gcp_project_id, region: region_ssl_policy['region'], name: \"donotexist\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_target_http_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_target_http_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_target_http_proxy = input('region_target_http_proxy', value: {\n  \"health_check_service\": \"value_healthcheckservice\",\n  \"project\": \"value_project\",\n  \"region\": \"value_region\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"url_map\": \"value_urlmap\",\n  \"fingerprint\": \"value_fingerprint\"\n}, description: 'region_target_http_proxy description')\ncontrol 'google_compute_region_target_http_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_region_target_http_proxies resource test'\n\n      describe google_compute_region_target_http_proxies(project: gcp_project_id, region: region_target_http_proxy['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_target_http_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_target_http_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_target_http_proxy = input('region_target_http_proxy', value: {\n  \"health_check_service\": \"value_healthcheckservice\",\n  \"project\": \"value_project\",\n  \"region\": \"value_region\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"url_map\": \"value_urlmap\",\n  \"fingerprint\": \"value_fingerprint\"\n}, description: 'region_target_http_proxy description')\ncontrol 'google_compute_region_target_http_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_region_target_http_proxy resource test'\n\n  describe google_compute_region_target_http_proxy(project: gcp_project_id, region: region_target_http_proxy['region'], targetHttpProxy: region_target_http_proxy['targetHttpProxy']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_target_http_proxy['kind'] }\n  \tits('id') { should cmp region_target_http_proxy['id'] }\n  \tits('creation_timestamp') { should cmp region_target_http_proxy['creation_timestamp'] }\n  \tits('name') { should cmp region_target_http_proxy['name'] }\n  \tits('description') { should cmp region_target_http_proxy['description'] }\n  \tits('self_link') { should cmp region_target_http_proxy['self_link'] }\n  \tits('self_link_with_id') { should cmp region_target_http_proxy['self_link_with_id'] }\n  \tits('url_map') { should cmp region_target_http_proxy['url_map'] }\n  \tits('region') { should cmp region_target_http_proxy['region'] }\n  \tits('fingerprint') { should cmp region_target_http_proxy['fingerprint'] }\n\n  end\n\n  describe google_compute_region_target_http_proxy(project: gcp_project_id, region: region_target_http_proxy['region'], targetHttpProxy: region_target_http_proxy['targetHttpProxy']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_target_https_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_target_https_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_target_https_proxy = input('region_target_https_proxy', value: {\n  \"project\": \"value_project\",\n  \"region\": \"value_region\",\n  \"target_https_proxy\": \"value_targethttpsproxy\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"url_map\": \"value_urlmap\",\n  \"certificate_map\": \"value_certificatemap\",\n  \"quic_override\": \"value_quicoverride\",\n  \"ssl_policy\": \"value_sslpolicy\",\n  \"server_tls_policy\": \"value_servertlspolicy\",\n  \"authentication\": \"value_authentication\",\n  \"authorization_policy\": \"value_authorizationpolicy\",\n  \"authorization\": \"value_authorization\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"tls_early_data\": \"value_tlsearlydata\"\n}, description: 'region_target_https_proxy description')\ncontrol 'google_compute_region_target_https_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_region_target_https_proxies resource test'\n\n      describe google_compute_region_target_https_proxies(project: gcp_project_id, region: region_target_https_proxy['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_target_https_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_target_https_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  region_target_https_proxy = input('region_target_https_proxy', value: {\n  \"project\": \"value_project\",\n  \"region\": \"value_region\",\n  \"target_https_proxy\": \"value_targethttpsproxy\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"value_name\",\n  \"description\": \"value_description\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"url_map\": \"value_urlmap\",\n  \"certificate_map\": \"value_certificatemap\",\n  \"quic_override\": \"value_quicoverride\",\n  \"ssl_policy\": \"value_sslpolicy\",\n  \"server_tls_policy\": \"value_servertlspolicy\",\n  \"authentication\": \"value_authentication\",\n  \"authorization_policy\": \"value_authorizationpolicy\",\n  \"authorization\": \"value_authorization\",\n  \"fingerprint\": \"value_fingerprint\",\n  \"tls_early_data\": \"value_tlsearlydata\"\n}, description: 'region_target_https_proxy description')\ncontrol 'google_compute_region_target_https_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_region_target_https_proxy resource test'\n\n  describe google_compute_region_target_https_proxy(project: gcp_project_id, region: region_target_https_proxy['region'], targetHttpsProxy: region_target_https_proxy['targetHttpsProxy']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_target_https_proxy['kind'] }\n  \tits('id') { should cmp region_target_https_proxy['id'] }\n  \tits('creation_timestamp') { should cmp region_target_https_proxy['creation_timestamp'] }\n  \tits('name') { should cmp region_target_https_proxy['name'] }\n  \tits('description') { should cmp region_target_https_proxy['description'] }\n  \tits('self_link') { should cmp region_target_https_proxy['self_link'] }\n  \tits('self_link_with_id') { should cmp region_target_https_proxy['self_link_with_id'] }\n  \tits('url_map') { should cmp region_target_https_proxy['url_map'] }\n  \tits('certificate_map') { should cmp region_target_https_proxy['certificate_map'] }\n  \tits('quic_override') { should cmp region_target_https_proxy['quic_override'] }\n  \tits('ssl_policy') { should cmp region_target_https_proxy['ssl_policy'] }\n  \tits('region') { should cmp region_target_https_proxy['region'] }\n  \tits('server_tls_policy') { should cmp region_target_https_proxy['server_tls_policy'] }\n  \tits('authentication') { should cmp region_target_https_proxy['authentication'] }\n  \tits('authorization_policy') { should cmp region_target_https_proxy['authorization_policy'] }\n  \tits('authorization') { should cmp region_target_https_proxy['authorization'] }\n  \tits('fingerprint') { should cmp region_target_https_proxy['fingerprint'] }\n  \tits('tls_early_data') { should cmp region_target_https_proxy['tls_early_data'] }\n\n  end\n\n  describe google_compute_region_target_https_proxy(project: gcp_project_id, region: region_target_https_proxy['region'], targetHttpsProxy: region_target_https_proxy['targetHttpsProxy']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_url_map.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_region_url_map resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nregion_url_map = input('region_url_map', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"full_region\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1\",\n  \"kind\": \"compute#urlMap\",\n  \"name\": \"example-regionurlmap\",\n  \"description\": \"a description\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/urlMaps/example-regionurlmap\",\n  \"default_service\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/backendServices/home\"\n}, description: 'region_url_map description')\n\ncontrol 'google_compute_region_url_map-1.0' do\n  impact 1.0\n  title 'google_compute_region_url_map resource test'\n\n  describe google_compute_region_url_map(project: gcp_project_id, region: region_url_map['region'], name: region_url_map['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp region_url_map['kind'] }\n  \tits('name') { should cmp region_url_map['name'] }\n  \tits('description') { should cmp region_url_map['description'] }\n  \tits('self_link') { should cmp region_url_map['self_link'] }\n  \tits('default_service') { should cmp region_url_map['default_service'] }\n  \tits('region') { should cmp region_url_map['full_region'] }\n  end\n\n  describe google_compute_region_url_map(project: gcp_project_id, region: region_url_map['region'], name: \"donotexist\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_url_maps.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\nregion_for_url_map = input(:region_for_url_map, value: 'us-central1', description: 'region_url_map region.')\n\ncontrol 'google_compute_region_url_maps-1.0' do\n  impact 1.0\n  title 'google_compute_region_url_maps resource test'\n\n  describe google_compute_region_url_maps(project: gcp_project_id, region: region_for_url_map) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_region_zones_loop.rb",
    "content": "title 'Loop over all zones in a GCP region'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_region = input(:gcp_location, value: '', description: 'The GCP region being used.')\n\ncontrol 'gcp-region-zones-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure all zones in a region are available using google_compute_zone for detail.'\n\n  google_compute_region(project: gcp_project_id,  name: gcp_region).zone_names.each do |zone_name|\n    describe google_compute_zone(project: gcp_project_id, name: zone_name) do\n      it { should be_up }\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_regional_disk.rb",
    "content": "title 'Test GCP google_compute_regional_disk resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_region = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ngcp_compute_disk_name = input(:gcp_compute_disk_name, value: 'gcp_compute_disk_name', description: 'GCP Compute disk name.')\ngcp_compute_disk_type = input(:gcp_compute_disk_type, value: 'gcp_compute_disk_type', description: 'GCP Compute disk type.')\ncontrol 'google_compute_regional_disk-1.0' do\n  impact 1.0\n  title 'google_compute_regional_disk resource test'\n\n  describe google_compute_regional_disk(project: gcp_project_id, name: \"#{gcp_compute_disk_name}-regional\", region: gcp_region) do\n    it { should exist }\n    its('type') { should match gcp_compute_disk_type }\n  end\n\n  describe google_compute_regional_disk(project: gcp_project_id, name: 'nonexistent', region: gcp_region) do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_regions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_regions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ncontrol 'google_compute_regions-1.0' do\n  impact 1.0\n  title 'google_compute_regions resource test'\n\n  describe google_compute_regions(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('region_names') { should include \"#{gcp_location}\" }\n    its('region_statuses') { should_not include \"DOWN\" }\n    its('region_ids') { should include \"1290\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_regions_loop.rb",
    "content": "title 'Loop over all GCP Regions'\n\n  gcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\n\n  control 'gcp-regions-loop-1.0' do\n\n    impact 1.0\n    title 'Ensure regions have the correct properties in bulk using google_compute_region for detail.'\n\n    google_compute_regions(project: gcp_project_id).region_names.each do |region_name|\n      describe google_compute_region(project: gcp_project_id, name: region_name) do\n        it { should be_up }\n      end\n    end\n  end"
  },
  {
    "path": "test/integration/verify/controls/google_compute_reservation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_reservation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  reservation = input('reservation', value: {\n  \"project\": \"value_project\",\n  \"reservation\": \"value_reservation\",\n  \"zone\": \"value_zone\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"description\": \"value_description\",\n  \"name\": \"value_name\",\n  \"commitment\": \"value_commitment\",\n  \"status\": \"value_status\",\n  \"delete_at_time\": \"value_deleteattime\"\n}, description: 'reservation description')\ncontrol 'google_compute_reservation-1.0' do\n  impact 1.0\n  title 'google_compute_reservation resource test'\n\n  describe google_compute_reservation(project: gcp_project_id, name: reservation['name'], zone: reservation['zone']) do\n  \tit { should exist }\n  \tits('kind') { should cmp reservation['kind'] }\n  \tits('id') { should cmp reservation['id'] }\n  \tits('creation_timestamp') { should cmp reservation['creation_timestamp'] }\n  \tits('self_link') { should cmp reservation['self_link'] }\n  \tits('self_link_with_id') { should cmp reservation['self_link_with_id'] }\n  \tits('zone') { should cmp reservation['zone'] }\n  \tits('description') { should cmp reservation['description'] }\n  \tits('name') { should cmp reservation['name'] }\n  \tits('commitment') { should cmp reservation['commitment'] }\n  \tits('status') { should cmp reservation['status'] }\n  \tits('delete_at_time') { should cmp reservation['delete_at_time'] }\n\n  end\n\n  describe google_compute_reservation(project: gcp_project_id, name: \"does_not_exit\", zone: reservation['zone']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_reservations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_reservations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  reservation = input('reservation', value: {\n  \"project\": \"value_project\",\n  \"reservation\": \"value_reservation\",\n  \"zone\": \"value_zone\",\n  \"kind\": \"value_kind\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"description\": \"value_description\",\n  \"name\": \"value_name\",\n  \"commitment\": \"value_commitment\",\n  \"status\": \"value_status\",\n  \"delete_at_time\": \"value_deleteattime\"\n}, description: 'reservation description')\ncontrol 'google_compute_reservations-1.0' do\n  impact 1.0\n  title 'google_compute_reservations resource test'\n\n      describe google_compute_reservations(project: gcp_project_id, zone: reservation['zone']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_resource_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_resource_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  resource_policy = input('resource_policy', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#resourcePolicy\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"description\": \"value_description\",\n  \"name\": \"schedule-1\",\n  \"status\": \"value_status\"\n}, description: 'resource_policy description')\ncontrol 'google_compute_resource_policies-1.0' do\n  impact 1.0\n  title 'google_compute_resource_policies resource test'\n\n    describe google_compute_resource_policies(project: gcp_project_id, region: resource_policy['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_resource_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_resource_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  resource_policy = input('resource_policy', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#resourcePolicy\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"self_link\": \"value_selflink\",\n  \"self_link_with_id\": \"value_selflinkwithid\",\n  \"description\": \"value_description\",\n  \"name\": \"schedule-1\",\n  \"status\": \"value_status\"\n}, description: 'resource_policy description')\ncontrol 'google_compute_resource_policy-1.0' do\n  impact 1.0\n  title 'google_compute_resource_policy resource test'\n\n  describe google_compute_resource_policy(project: gcp_project_id, region: resource_policy['region'], resourcePolicy: resource_policy['resourcePolicy']) do\n  \tit { should exist }\n  \tits('kind') { should cmp resource_policy['kind'] }\n  \tits('id') { should cmp resource_policy['id'] }\n  \tits('creation_timestamp') { should cmp resource_policy['creation_timestamp'] }\n  \tits('self_link') { should cmp resource_policy['self_link'] }\n  \tits('self_link_with_id') { should cmp resource_policy['self_link_with_id'] }\n  \tits('region') { should cmp resource_policy['region'] }\n  \tits('description') { should cmp resource_policy['description'] }\n  \tits('name') { should cmp resource_policy['name'] }\n  \tits('status') { should cmp resource_policy['status'] }\n\n  end\n\n  describe google_compute_resource_policy(project: gcp_project_id, region: resource_policy['region'], resourcePolicy: resource_policy['resourcePolicy']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_route.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_route resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nroute = input('route', value: {\n  \"name\": \"inspec-gcp-route\",\n  \"dest_range\": \"15.0.0.0/24\",\n  \"next_hop_ip\": \"10.2.0.1\",\n  \"priority\": 100\n}, description: 'Compute route description')\ngcp_network_name = input(:gcp_network_name, value: 'gcp_network_name', description: 'GCP network name')\ncontrol 'google_compute_route-1.0' do\n  impact 1.0\n  title 'google_compute_route resource test'\n\n  describe google_compute_route(project: gcp_project_id, name: route['name']) do\n    it { should exist }\n    its('dest_range') { should eq route['dest_range'] }\n    its('network') { should match /\\/#{gcp_network_name}$/ }\n    its('next_hop_ip') { should eq route['next_hop_ip'] }\n    its('priority') { should eq route['priority'] }\n  end\n\n  describe google_compute_route(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_router.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_router resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrouter = input('router', value: {\n  \"name\": \"inspec-gcp-router\",\n  \"bgp_asn\": 64514,\n  \"bgp_advertise_mode\": \"CUSTOM\",\n  \"bgp_advertised_group\": \"ALL_SUBNETS\",\n  \"bgp_advertised_ip_range1\": \"1.2.3.4\",\n  \"bgp_advertised_ip_range2\": \"6.7.0.0/16\"\n}, description: 'Compute router description')\ngcp_network_name = input(:gcp_network_name, value: 'gcp_network_name', description: 'GCP network name')\ncontrol 'google_compute_router-1.0' do\n  impact 1.0\n  title 'google_compute_router resource test'\n\n  describe google_compute_router(project: gcp_project_id, region: gcp_location, name: router['name']) do\n    it { should exist }\n    its('bgp.asn') { should eq router['bgp_asn'] }\n    its('bgp.advertise_mode') { should eq router['bgp_advertise_mode'] }\n    its('bgp.advertised_groups') { should include router['bgp_advertised_group'] }\n    its('bgp.advertised_ip_ranges.count') { should eq 2 }\n    its('bgp.advertised_ip_ranges.first.range') { should eq router['bgp_advertised_ip_range1'] }\n    its('bgp.advertised_ip_ranges.last.range') { should eq router['bgp_advertised_ip_range2'] }\n      its('network') { should match /\\/#{gcp_network_name}$/ }\n    end\n\n  describe google_compute_router(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_router_nat.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_router_nat resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrouter = input('router', value: {\n  \"name\": \"inspec-gcp-router\",\n  \"bgp_asn\": 64514,\n  \"bgp_advertise_mode\": \"CUSTOM\",\n  \"bgp_advertised_group\": \"ALL_SUBNETS\",\n  \"bgp_advertised_ip_range1\": \"1.2.3.4\",\n  \"bgp_advertised_ip_range2\": \"6.7.0.0/16\"\n}, description: 'Compute router description')\nrouter_nat = input('router_nat', value: {\n  \"name\": \"inspec-router-nat\",\n  \"nat_ip_allocate_option\": \"AUTO_ONLY\",\n  \"source_subnetwork_ip_ranges_to_nat\": \"ALL_SUBNETWORKS_ALL_IP_RANGES\",\n  \"min_ports_per_vm\": 2,\n  \"log_config_enable\": true,\n  \"log_config_filter\": \"ERRORS_ONLY\"\n}, description: 'Compute router NAT description')\n\ncontrol 'google_compute_router_nat-1.0' do\n  impact 1.0\n  title 'google_compute_router_nat resource test'\n\n  describe google_compute_router_nat(project: gcp_project_id, region: gcp_location, router: router['name'], name: router_nat['name']) do\n    it { should exist }\n    its('nat_ip_allocate_option') { should cmp router_nat['nat_ip_allocate_option'] }\n    its('source_subnetwork_ip_ranges_to_nat') { should cmp router_nat['source_subnetwork_ip_ranges_to_nat'] }\n    its('min_ports_per_vm') { should cmp router_nat['min_ports_per_vm'] }\n    its('log_config.enable') { should cmp router_nat['log_config_enable'] }\n    its('log_config.filter') { should cmp router_nat['log_config_filter'] }\n  end\n\n  describe google_compute_router(project: gcp_project_id, region: gcp_location, router: 'nonexistent', name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_router_nats.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_router_nats resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrouter = input('router', value: {\n  \"name\": \"inspec-gcp-router\",\n  \"bgp_asn\": 64514,\n  \"bgp_advertise_mode\": \"CUSTOM\",\n  \"bgp_advertised_group\": \"ALL_SUBNETS\",\n  \"bgp_advertised_ip_range1\": \"1.2.3.4\",\n  \"bgp_advertised_ip_range2\": \"6.7.0.0/16\"\n}, description: 'Compute router description')\nrouter_nat = input('router_nat', value: {\n  \"name\": \"inspec-router-nat\",\n  \"nat_ip_allocate_option\": \"AUTO_ONLY\",\n  \"source_subnetwork_ip_ranges_to_nat\": \"ALL_SUBNETWORKS_ALL_IP_RANGES\",\n  \"min_ports_per_vm\": 2,\n  \"log_config_enable\": true,\n  \"log_config_filter\": \"ERRORS_ONLY\"\n}, description: 'Compute router NAT description')\n\ncontrol 'google_compute_router_nats-1.0' do\n  impact 1.0\n  title 'google_compute_router_nats resource test'\n\n  describe google_compute_router_nats(project: gcp_project_id, region: gcp_location, router: router['name']) do\n    its('names') { should include router_nat['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_routers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_routers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nrouter = input('router', value: {\n  \"name\": \"inspec-gcp-router\",\n  \"bgp_asn\": 64514,\n  \"bgp_advertise_mode\": \"CUSTOM\",\n  \"bgp_advertised_group\": \"ALL_SUBNETS\",\n  \"bgp_advertised_ip_range1\": \"1.2.3.4\",\n  \"bgp_advertised_ip_range2\": \"6.7.0.0/16\"\n}, description: 'Compute router description')\ngcp_network_name = input(:gcp_network_name, value: 'gcp_network_name', description: 'GCP network name')\ncontrol 'google_compute_routers-1.0' do\n  impact 1.0\n  title 'google_compute_routers resource test'\n\n  describe google_compute_routers(project: gcp_project_id, region: gcp_location) do\n    its('names') { should include router['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_routes.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_routes resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nroute = input('route', value: {\n  \"name\": \"inspec-gcp-route\",\n  \"dest_range\": \"15.0.0.0/24\",\n  \"next_hop_ip\": \"10.2.0.1\",\n  \"priority\": 100\n}, description: 'Compute route description')\ngcp_network_name = input(:gcp_network_name, value: 'gcp_network_name', description: 'GCP network name')\ncontrol 'google_compute_routes-1.0' do\n  impact 1.0\n  title 'google_compute_routes resource test'\n\n  describe google_compute_routes(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('dest_ranges') { should include route['dest_range'] }\n    its('next_hop_ips') { should include route['next_hop_ip'] }\n    its('priorities') { should include route['priority'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_security_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_security_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nsecurity_policy = input('security_policy', value: {\n  \"name\": \"sec-policy\",\n  \"action\": \"deny(403)\",\n  \"priority\": \"1000\",\n  \"ip_range\": \"9.9.9.0/24\",\n  \"description\": \"my description\"\n}, description: 'Security Policy description')\ncontrol 'google_compute_security_policies-1.0' do\n  impact 1.0\n  title 'google_compute_security_policies resource test'\n\n  describe google_compute_security_policies(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n    its('names') { should include security_policy['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_security_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_security_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nsecurity_policy = input('security_policy', value: {\n  \"name\": \"sec-policy\",\n  \"action\": \"deny(403)\",\n  \"priority\": \"1000\",\n  \"ip_range\": \"9.9.9.0/24\",\n  \"description\": \"my description\"\n}, description: 'Security Policy description')\ncontrol 'google_compute_security_policy-1.0' do\n  impact 1.0\n  title 'google_compute_security_policy resource test'\n\n  describe google_compute_security_policy(project: gcp_project_id, name: security_policy['name']) do\n    it { should exist }\n    its('rules.size') { should cmp 2 }\n    its('rules.first.priority') { should cmp security_policy['priority'] }\n    its('rules.first.match.config.src_ip_ranges.first') { should cmp security_policy['ip_range'] }\n  end\n\n  describe google_compute_security_policy(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_service_attachment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_service_attachment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nservice_attachment = input('service_attachment', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"service_attachment\": \"my-psc-ilb\",\n  \"service_attachment_2\": \"my-psc-ilb-2\",\n  \"kind\": \"compute#serviceAttachment\",\n  \"name\": \"my-psc-ilb\",\n  \"description\": \"my-psc-ilb is a private service connection for the internal load balancer\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/serviceAttachments/my-psc-ilb\",\n  \"target_service\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/forwardingRules/producer-forwarding-rule\",\n  \"connection_preference\": \"ACCEPT_AUTOMATIC\",\n}, description: 'service_attachment description')\n\ncontrol 'google_compute_service_attachment-1.0' do\n  impact 1.0\n  title 'google_compute_service_attachment resource test'\n\n  describe google_compute_service_attachment(project: gcp_project_id, region: service_attachment['region'], service_attachment: service_attachment['service_attachment']) do\n  \tit { should exist }\n  \tits('kind') { should cmp service_attachment['kind'] }\n  \tits('name') { should cmp service_attachment['name'] }\n  \tits('description') { should cmp service_attachment['description'] }\n  \tits('self_link') { should cmp service_attachment['self_link'] }\n  \tits('region') { should include service_attachment['region'] }\n  \tits('producer_forwarding_rule') { should cmp service_attachment['producer_forwarding_rule'] }\n  \tits('target_service') { should cmp service_attachment['target_service'] }\n  \tits('connection_preference') { should cmp service_attachment['connection_preference'] }\n  end\n\n  describe google_compute_service_attachment(project: gcp_project_id, region: service_attachment['region'], service_attachment: service_attachment['service_attachment_2']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_service_attachments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_service_attachments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nservice_attachment = input('service_attachment', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"service_attachment\": \"my-psc-ilb\",\n  \"kind\": \"compute#serviceAttachment\",\n  \"name\": \"my-psc-ilb\",\n  \"description\": \"my-psc-ilb is a private service connection for the internal load balancer\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/serviceAttachments/my-psc-ilb\",\n  \"target_service\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/regions/us-central1/forwardingRules/producer-forwarding-rule\",\n  \"connection_preference\": \"ACCEPT_AUTOMATIC\",\n}, description: 'service_attachment description')\n\ncontrol 'google_compute_service_attachments-1.0' do\n  impact 1.0\n  title 'google_compute_service_attachments resource test'\n\n  describe google_compute_service_attachments(project: gcp_project_id, region: service_attachment['region']) do\n    it { should exist }\n    its(\"names\") { should include service_attachment['name'] }\n    its(\"self_links\") { should include service_attachment['self_link'] }\n    its(\"kinds\") { should include service_attachment['kind'] }\n    its(\"descriptions\") { should include service_attachment['description'] }\n    its(\"target_services\") { should include service_attachment['target_service'] }\n    its(\"connection_preferences\") { should include service_attachment['connection_preference'] }\n  end\n\n  describe google_compute_service_attachments(project: gcp_project_id, region: \"us-west2\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_snapshot.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_snapshot resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name of the compute disk')\nsnapshot = input('snapshot', value: {\n  \"name\": \"inspec-gcp-disk-snapshot\",\n  \"disk_name\": \"inspec-snapshot-disk\",\n  \"disk_type\": \"pd-standard\",\n  \"disk_image\": \"debian-cloud/debian-10-buster-v20191014\"\n}, description: 'Compute disk snapshot description')\ncontrol 'google_compute_snapshot-1.0' do\n  impact 1.0\n  title 'google_compute_snapshot resource test'\n\n\n  describe google_compute_snapshot(project: gcp_project_id, name: snapshot['name']) do\n    it { should exist }\n    its('source_disk') { should match snapshot['disk_name'] }\n  end\n\n  describe google_compute_snapshot(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_snapshots.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_snapshots resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'GCP zone name of the compute disk')\nsnapshot = input('snapshot', value: {\n  \"name\": \"inspec-gcp-disk-snapshot\",\n  \"disk_name\": \"inspec-snapshot-disk\",\n  \"disk_type\": \"pd-standard\",\n  \"disk_image\": \"debian-cloud/debian-10-buster-v20191014\"\n}, description: 'Compute disk snapshot description')\ncontrol 'google_compute_snapshots-1.0' do\n  impact 1.0\n  title 'google_compute_snapshots resource test'\n\n\n  describe google_compute_snapshots(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n  end\n\n  describe.one do\n    google_compute_snapshots(project: gcp_project_id).names do |snapshot_name|\n      describe google_compute_snapshot(project: gcp_project_id, name: snapshot_name) do\n        its('source_disk') { should match snapshot['disk_name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_ssl_certificate.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_ssl_certificate resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nssl_certificate = input('ssl_certificate', value: {\n  \"name\": \"inspec-gcp-ssl-certificate\",\n  \"description\": \"A fake ssl certificate (DO NOT USE)\",\n  \"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIICqjCCAk+gAwIBAgIJAIuJ+0352Kq4MAoGCCqGSM49BAMCMIGwMQswCQYDVQQG\\nEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjERMA8GA1UEBwwIS2lya2xhbmQxFTAT\\nBgNVBAoMDEdvb2dsZSwgSW5jLjEeMBwGA1UECwwVR29vZ2xlIENsb3VkIFBsYXRm\\nb3JtMR8wHQYDVQQDDBZ3d3cubXktc2VjdXJlLXNpdGUuY29tMSEwHwYJKoZIhvcN\\nAQkBFhJuZWxzb25hQGdvb2dsZS5jb20wHhcNMTcwNjI4MDQ1NjI2WhcNMjcwNjI2\\nMDQ1NjI2WjCBsDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xETAP\\nBgNVBAcMCEtpcmtsYW5kMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xHjAcBgNVBAsM\\nFUdvb2dsZSBDbG91ZCBQbGF0Zm9ybTEfMB0GA1UEAwwWd3d3Lm15LXNlY3VyZS1z\\naXRlLmNvbTEhMB8GCSqGSIb3DQEJARYSbmVsc29uYUBnb29nbGUuY29tMFkwEwYH\\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ\\n4mzkzTv0dXyB750fOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwaNQME4wHQYDVR0O\\nBBYEFKIQC3A2SDpxcdfn0YLKineDNq/BMB8GA1UdIwQYMBaAFKIQC3A2SDpxcdfn\\n0YLKineDNq/BMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhALs4vy+O\\nM3jcqgA4fSW/oKw6UJxp+M6a+nGMX+UJR3YgAiEAvvl39QRVAiv84hdoCuyON0lJ\\nzqGNhIPGq2ULqXKK8BY=\\n-----END CERTIFICATE-----\\n\",\n  \"private_key\": \"-----BEGIN EC PRIVATE KEY-----\\nMHcCAQEEIObtRo8tkUqoMjeHhsOh2ouPpXCgBcP+EDxZCB/tws15oAoGCCqGSM49\\nAwEHoUQDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ4mzkzTv0dXyB750f\\nOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwQ==\\n-----END EC PRIVATE KEY-----\\n\"\n}, description: 'A GCP SSL certificate definition')\ncontrol 'google_compute_ssl_certificate-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_certificate resource test'\n\n  describe google_compute_ssl_certificate(project: gcp_project_id, name: ssl_certificate['name']) do\n    it { should exist }\n    its('description') { should eq ssl_certificate['description'] }\n    its('certificate') { should eq ssl_certificate['certificate'] }\n  end\n\n  describe google_compute_ssl_certificate(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_ssl_certificates.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_ssl_certificates resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nssl_certificate = input('ssl_certificate', value: {\n  \"name\": \"inspec-gcp-ssl-certificate\",\n  \"description\": \"A fake ssl certificate (DO NOT USE)\",\n  \"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIICqjCCAk+gAwIBAgIJAIuJ+0352Kq4MAoGCCqGSM49BAMCMIGwMQswCQYDVQQG\\nEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjERMA8GA1UEBwwIS2lya2xhbmQxFTAT\\nBgNVBAoMDEdvb2dsZSwgSW5jLjEeMBwGA1UECwwVR29vZ2xlIENsb3VkIFBsYXRm\\nb3JtMR8wHQYDVQQDDBZ3d3cubXktc2VjdXJlLXNpdGUuY29tMSEwHwYJKoZIhvcN\\nAQkBFhJuZWxzb25hQGdvb2dsZS5jb20wHhcNMTcwNjI4MDQ1NjI2WhcNMjcwNjI2\\nMDQ1NjI2WjCBsDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xETAP\\nBgNVBAcMCEtpcmtsYW5kMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xHjAcBgNVBAsM\\nFUdvb2dsZSBDbG91ZCBQbGF0Zm9ybTEfMB0GA1UEAwwWd3d3Lm15LXNlY3VyZS1z\\naXRlLmNvbTEhMB8GCSqGSIb3DQEJARYSbmVsc29uYUBnb29nbGUuY29tMFkwEwYH\\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ\\n4mzkzTv0dXyB750fOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwaNQME4wHQYDVR0O\\nBBYEFKIQC3A2SDpxcdfn0YLKineDNq/BMB8GA1UdIwQYMBaAFKIQC3A2SDpxcdfn\\n0YLKineDNq/BMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhALs4vy+O\\nM3jcqgA4fSW/oKw6UJxp+M6a+nGMX+UJR3YgAiEAvvl39QRVAiv84hdoCuyON0lJ\\nzqGNhIPGq2ULqXKK8BY=\\n-----END CERTIFICATE-----\\n\",\n  \"private_key\": \"-----BEGIN EC PRIVATE KEY-----\\nMHcCAQEEIObtRo8tkUqoMjeHhsOh2ouPpXCgBcP+EDxZCB/tws15oAoGCCqGSM49\\nAwEHoUQDQgAEHGzpcRJ4XzfBJCCPMQeXQpTXwlblimODQCuQ4mzkzTv0dXyB750f\\nOGN02HtkpBOZzzvUARTR10JQoSe2/5PIwQ==\\n-----END EC PRIVATE KEY-----\\n\"\n}, description: 'A GCP SSL certificate definition')\ncontrol 'google_compute_ssl_certificates-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_certificates resource test'\n\n  describe google_compute_ssl_certificates(project: gcp_project_id) do\n\n    its('names') { should include ssl_certificate['name'] }\n    its('descriptions') { should include ssl_certificate['description'] }\n    its('certificates') { should include ssl_certificate['certificate'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_ssl_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_ssl_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nssl_policy = input('ssl_policy', value: {\n  \"name\": \"inspec-gcp-ssl-policy\",\n  \"min_tls_version\": \"TLS_1_2\",\n  \"profile\": \"CUSTOM\",\n  \"custom_feature\": \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\",\n  \"custom_feature2\": \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"\n})\ncontrol 'google_compute_ssl_policies-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_policies resource test'\n\n  describe google_compute_ssl_policies(project: gcp_project_id) do\n    it { should exist }\n    its('names') { should include ssl_policy['name'] }\n    its('profiles') { should include ssl_policy['profile'] }\n    its('count') { should eq 1 }\n  end\n\n  google_compute_ssl_policies(project: gcp_project_id).names.each do |policy_name|\n    describe google_compute_ssl_policy(project: gcp_project_id, name: policy_name) do\n      its('min_tls_version') { should eq ssl_policy['min_tls_version'] }\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_ssl_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_ssl_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nssl_policy = input('ssl_policy', value: {\n  \"name\": \"inspec-gcp-ssl-policy\",\n  \"min_tls_version\": \"TLS_1_2\",\n  \"profile\": \"CUSTOM\",\n  \"custom_feature\": \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\",\n  \"custom_feature2\": \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"\n})\ncontrol 'google_compute_ssl_policy-1.0' do\n  impact 1.0\n  title 'google_compute_ssl_policy resource test'\n\n  describe google_compute_ssl_policy(project: gcp_project_id, name: ssl_policy['name']) do\n    it { should exist }\n    its('min_tls_version') { should eq ssl_policy['min_tls_version'] }\n    its('profile') { should eq ssl_policy['profile'] }\n    its('custom_features') { should include ssl_policy['custom_feature'] }\n    its('custom_features') { should include ssl_policy['custom_feature2'] }\n  end\n\n  describe google_compute_ssl_policy(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_subnetwork.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_subnetwork resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nsubnetwork = input('subnetwork', value: {\n  \"name\": \"inspec-subnet\",\n  \"ip_cidr_range\": \"10.2.0.0/16\",\n  \"log_interval\": \"INTERVAL_10_MIN\",\n  \"log_sampling\": 0.5,\n  \"log_metadata\": \"INCLUDE_ALL_METADATA\"\n}, description: 'Compute subnetwork description')\ncontrol 'google_compute_subnetwork-1.0' do\n  impact 1.0\n  title 'google_compute_subnetwork resource test'\n\n  describe google_compute_subnetwork(project: gcp_project_id, region: gcp_location, name: subnetwork['name']) do\n    it { should exist }\n    its('ip_cidr_range') { should eq subnetwork['ip_cidr_range'] }\n    its('log_config.enable') { should be true }\n    its('log_config.flow_sampling') { should cmp subnetwork['log_sampling'] }\n    its('log_config.aggregation_interval') { should cmp subnetwork['log_interval'] }\n    its('log_config.metadata') { should include subnetwork['log_metadata'] }\n  end\n\n  describe google_compute_subnetwork(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_subnetworks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_subnetworks resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nsubnetwork = input('subnetwork', value: {\n  \"name\": \"inspec-subnet\",\n  \"ip_cidr_range\": \"10.2.0.0/16\",\n  \"log_interval\": \"INTERVAL_10_MIN\",\n  \"log_sampling\": 0.5,\n  \"log_metadata\": \"INCLUDE_ALL_METADATA\"\n}, description: 'Compute subnetwork description')\ncontrol 'google_compute_subnetworks-1.0' do\n  impact 1.0\n  title 'google_compute_subnetworks resource test'\n\n  describe google_compute_subnetworks(project: gcp_project_id, region: gcp_location) do\n    its('ip_cidr_ranges') { should include subnetwork['ip_cidr_range'] }\n    its('subnetwork_names') { should include subnetwork['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_grpc_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_grpc_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ncontrol 'google_compute_target_grpc_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_target_grpc_proxies resource test'\n\n  describe google_compute_target_grpc_proxies(project: gcp_project_id) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_grpc_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_grpc_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ntarget_grpc_proxy = input('target_grpc_proxy', value: {\n  \"project\": \"ppradhan\",\n  \"kind\": \"compute#targetGrpcProxy\",\n  \"name\": \"inspec-test-proxy\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/targetGrpcProxies/inspec-test-proxy\",\n  \"url_map\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/urlMaps/urlmap\",\n}, description: 'target_grpc_proxy description')\n\ncontrol 'google_compute_target_grpc_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_grpc_proxy resource test'\n\n  describe google_compute_target_grpc_proxy(project: gcp_project_id, name: target_grpc_proxy['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp target_grpc_proxy['kind'] }\n  \tits('name') { should cmp target_grpc_proxy['name'] }\n  \tits('self_link') { should cmp target_grpc_proxy['self_link'] }\n  \tits('url_map') { should cmp target_grpc_proxy['url_map'] }\n  end\n\n  describe google_compute_target_grpc_proxy(project: gcp_project_id, name: \"donotexist\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_http_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_http_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttp_proxy = input('http_proxy', value: {\n  \"name\": \"inspec-gcp-http-proxy\",\n  \"description\": \"A HTTP proxy\"\n}, description: 'Compute HTTP proxy definition')\ncontrol 'google_compute_target_http_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_target_http_proxies resource test'\n\n  describe google_compute_target_http_proxies(project: gcp_project_id) do\n    its('names') { should include http_proxy['name'] }\n    its('descriptions') { should include http_proxy['description'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_http_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_http_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttp_proxy = input('http_proxy', value: {\n  \"name\": \"inspec-gcp-http-proxy\",\n  \"description\": \"A HTTP proxy\"\n}, description: 'Compute HTTP proxy definition')\ncontrol 'google_compute_target_http_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_http_proxy resource test'\n\n  describe google_compute_target_http_proxy(project: gcp_project_id, name: http_proxy['name']) do\n    it { should exist }\n    its('description') { should eq http_proxy['description'] }\n    its('url_map') { should  match /\\/inspec-gcp-url-map$/ }\n  end\n\n  describe google_compute_target_http_proxy(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_https_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_https_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttps_proxy = input('https_proxy', value: {\n  \"name\": \"inspec-gcp-https-proxy\",\n  \"description\": \"A HTTPS target proxy\"\n}, description: 'Compute HTTPS proxy definition')\ncontrol 'google_compute_target_https_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_target_https_proxies resource test'\n\n  describe google_compute_target_https_proxies(project: gcp_project_id) do\n    its('names') { should include https_proxy['name'] }\n    its('descriptions') { should include https_proxy['description'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_https_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_https_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nhttps_proxy = input('https_proxy', value: {\n  \"name\": \"inspec-gcp-https-proxy\",\n  \"description\": \"A HTTPS target proxy\"\n}, description: 'Compute HTTPS proxy definition')\ncontrol 'google_compute_target_https_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_https_proxy resource test'\n\n  describe google_compute_target_https_proxy(project: gcp_project_id, name: https_proxy['name']) do\n    it { should exist }\n    its('url_map') { should match /\\/inspec-gcp-url-map$/ }\n    its('description') { should eq https_proxy['description'] }\n  end\n\n  describe google_compute_target_https_proxy(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_instance resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ntarget_instance = input('target_instance', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"asia-east1\",\n  \"url_map\": \"value_urlmap\",\n  \"kind\": \"compute#targetInstance\",\n  \"name\": \"example-target\",\n  \"zone\": \"asia-east1-a\",\n  \"full_zone\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/zones/asia-east1-a\",\n  \"nat_policy\": \"NO_NAT\",\n  \"instance\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/zones/asia-east1-a/instances/target-vm\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/zones/asia-east1-a/targetInstances/example-target\",\n}, description: 'target_instance description')\n\ncontrol 'google_compute_target_instance-1.0' do\n  impact 1.0\n  title 'google_compute_target_instance resource test'\n\n  describe google_compute_target_instance(project: gcp_project_id, name: target_instance['name'], zone: target_instance['zone']) do\n  \tit { should exist }\n  \tits('kind') { should cmp target_instance['kind'] }\n  \tits('name') { should cmp target_instance['name'] }\n  \tits('zone') { should cmp target_instance['full_zone'] }\n  \tits('nat_policy') { should cmp target_instance['nat_policy'] }\n  \tits('instance') { should cmp target_instance['instance'] }\n  \tits('self_link') { should cmp target_instance['self_link'] }\n  end\n\n  describe google_compute_target_instance(project: gcp_project_id, name: \"donotexist\", zone: target_instance['zone']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_instances resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nti_zone = input(:ti_zone, value: 'asia-east1-a', description: 'target_instance zone.')\n\ncontrol 'google_compute_target_instances-1.0' do\n  impact 1.0\n  title 'google_compute_target_instances resource test'\n  describe google_compute_target_instances(project: gcp_project_id, zone: ti_zone) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_pool.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_pool resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ngcp_ext_vm_name = input(:gcp_ext_vm_name, value: 'gcp_ext_vm_name', description: 'The name of a VM instance.')\ntarget_pool = input('target_pool', value: {\n  \"name\": \"inspec-gcp-target-pool\",\n  \"session_affinity\": \"CLIENT_IP\"\n}, description: 'Target pool definition')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP zone.')\ncontrol 'google_compute_target_pool-1.0' do\n  impact 1.0\n  title 'google_compute_target_pool resource test'\n\n  describe google_compute_target_pool(project: gcp_project_id, region: gcp_location, name: target_pool['name']) do\n    it { should exist }\n    its('session_affinity') { should eq target_pool['session_affinity'] }\n    it { should has_target_instance(gcp_ext_vm_name, gcp_zone) }\n  end\n\n  describe google_compute_target_pool(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_pools.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_pools resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ngcp_ext_vm_name = input(:gcp_ext_vm_name, value: 'gcp_ext_vm_name', description: 'The name of a VM instance.')\ntarget_pool = input('target_pool', value: {\n  \"name\": \"inspec-gcp-target-pool\",\n  \"session_affinity\": \"CLIENT_IP\"\n}, description: 'Target pool definition')\ngcp_zone = input(:gcp_zone, value: 'gcp_zone', description: 'The GCP zone.')\ncontrol 'google_compute_target_pools-1.0' do\n  impact 1.0\n  title 'google_compute_target_pools resource test'\n\n  describe google_compute_target_pools(project: gcp_project_id, region: gcp_location) do\n    its('names') { should include target_pool['name'] }\n    its('session_affinities') { should include target_pool['session_affinity'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_ssl_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_ssl_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ntarget_ssl_proxy = input('target_ssl_proxy', value: {\n  \"name\": \"test-proxy\",\n}, description: 'target_ssl_proxy description')\n\ncontrol 'google_compute_target_ssl_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_target_ssl_proxies resource test'\n\n  describe google_compute_target_ssl_proxies(project: gcp_project_id) do\n    it { should exist }\n    its('names') { should include target_ssl_proxy['name'] }\n    its('names') { should_not include 'nonexistent' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_ssl_proxy.rb",
    "content": "title 'Test GCP google_compute_target_ssl_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ntarget_ssl_proxy = input('target_ssl_proxy', value: {\n  \"project\": \"ppradhan\",\n  \"kind\": \"compute#targetSslProxy\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"test-proxy\",\n  \"self_link\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/targetSslProxies/test-proxy\",\n  \"service\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/backendServices/backend-service\",\n  \"proxy_header\": \"NONE\",\n}, description: 'target_ssl_proxy description')\n\ncontrol 'google_compute_target_ssl_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_ssl_proxy resource test'\n\n  describe google_compute_target_ssl_proxy(project: gcp_project_id, name: target_ssl_proxy['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp target_ssl_proxy['kind'] }\n  \tits('name') { should cmp target_ssl_proxy['name'] }\n  \tits('self_link') { should cmp target_ssl_proxy['self_link'] }\n  \tits('service') { should cmp target_ssl_proxy['service'] }\n  \tits('proxy_header') { should cmp target_ssl_proxy['proxy_header'] }\n  end\n\n  describe google_compute_target_ssl_proxy(project: gcp_project_id, name: \"donotexist\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_tcp_proxies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_tcp_proxies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ntarget_tcp_proxy = input('target_tcp_proxy', value: {\n  \"name\": \"inspec-gcp-target-tcp-proxy\",\n  \"proxy_header\": \"NONE\",\n  \"tcp_backend_service_name\": \"gcp-inspec-tcp-backend-service\"\n}, description: 'Compute TCP proxy definition')\ncontrol 'google_compute_target_tcp_proxies-1.0' do\n  impact 1.0\n  title 'google_compute_target_tcp_proxies resource test'\n\n  describe google_compute_target_tcp_proxies(project: gcp_project_id) do\n    its('names') { should include target_tcp_proxy['name'] }\n    its('proxy_headers') { should include target_tcp_proxy['proxy_header'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_tcp_proxy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_tcp_proxy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ntarget_tcp_proxy = input('target_tcp_proxy', value: {\n  \"name\": \"inspec-gcp-target-tcp-proxy\",\n  \"proxy_header\": \"NONE\",\n  \"tcp_backend_service_name\": \"gcp-inspec-tcp-backend-service\"\n}, description: 'Compute TCP proxy definition')\ncontrol 'google_compute_target_tcp_proxy-1.0' do\n  impact 1.0\n  title 'google_compute_target_tcp_proxy resource test'\n\n  describe google_compute_target_tcp_proxy(project: gcp_project_id, name: target_tcp_proxy['name']) do\n    it { should exist }\n    its('proxy_header') { should eq target_tcp_proxy['proxy_header'] }\n    its('service') { should  match /\\/gcp-inspec-tcp-backend-service$/ }\n  end\n\n  describe google_compute_target_tcp_proxy(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_vpn_gateway.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_vpn_gateway resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  target_vpn_gateway = input('target_vpn_gateway', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#targetVpnGateway\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"vpn-1\",\n  \"description\": \"value_description\",\n  \"network\": \"value_network\",\n  \"status\": \"value_status\",\n  \"self_link\": \"value_selflink\",\n  \"label_fingerprint\": \"value_labelfingerprint\"\n}, description: 'target_vpn_gateway description')\ncontrol 'google_compute_target_vpn_gateway-1.0' do\n  impact 1.0\n  title 'google_compute_target_vpn_gateway resource test'\n\n  describe google_compute_target_vpn_gateway(project: gcp_project_id, region: target_vpn_gateway['region'], name: target_vpn_gateway['name']) do\n  \tit { should exist }\n  \tits('kind') { should cmp target_vpn_gateway['kind'] }\n  \tits('id') { should cmp target_vpn_gateway['id'] }\n  \tits('creation_timestamp') { should cmp target_vpn_gateway['creation_timestamp'] }\n  \tits('name') { should cmp target_vpn_gateway['name'] }\n  \tits('description') { should cmp target_vpn_gateway['description'] }\n  \tits('region') { should cmp target_vpn_gateway['region'] }\n  \tits('network') { should cmp target_vpn_gateway['network'] }\n  \tits('status') { should cmp target_vpn_gateway['status'] }\n  \tits('self_link') { should cmp target_vpn_gateway['self_link'] }\n  \tits('label_fingerprint') { should cmp target_vpn_gateway['label_fingerprint'] }\n\n  end\n\n  describe google_compute_target_vpn_gateway(project: gcp_project_id, region: target_vpn_gateway['region'], name: target_vpn_gateway['name']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_target_vpn_gateways.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_target_vpn_gateways resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  target_vpn_gateway = input('target_vpn_gateway', value: {\n  \"project\": \"value_project\",\n  \"region\": \"us-central1\",\n  \"kind\": \"compute#targetVpnGateway\",\n  \"id\": \"value_id\",\n  \"creation_timestamp\": \"value_creationtimestamp\",\n  \"name\": \"vpn-1\",\n  \"description\": \"value_description\",\n  \"network\": \"value_network\",\n  \"status\": \"value_status\",\n  \"self_link\": \"value_selflink\",\n  \"label_fingerprint\": \"value_labelfingerprint\"\n}, description: 'target_vpn_gateway description')\ncontrol 'google_compute_target_vpn_gateways-1.0' do\n  impact 1.0\n  title 'google_compute_target_vpn_gateways resource test'\n\n      describe google_compute_target_vpn_gateways(project: gcp_project_id, region: target_vpn_gateway['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_url_map.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_url_map resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nurl_map = input('url_map', value: {\n  \"name\": \"inspec-gcp-url-map\",\n  \"description\": \"URL map description\",\n  \"host_rule_host\": \"site.com\",\n  \"path_matcher_name\": \"allpaths\",\n  \"path_rule_path\": \"/home\",\n  \"test_host\": \"test.com\",\n  \"test_path\": \"/home\"\n}, description: 'Compute URL map definition')\nbackend_service = input('backend_service', value: {\n  \"name\": \"inspec-gcp-backend-service\",\n  \"description\": \"A description\",\n  \"port_name\": \"http\",\n  \"protocol\": \"HTTP\",\n  \"timeout_sec\": 10,\n  \"enable_cdn\": true\n}, description: 'Backend service definition')\ncontrol 'google_compute_url_map-1.0' do\n  impact 1.0\n  title 'google_compute_url_map resource test'\n\n  describe google_compute_url_map(project: gcp_project_id, name: url_map['name']) do\n    it { should exist }\n    its('description') { should eq url_map['description'] }\n    its('default_service') { should match /\\/inspec-gcp-backend-service$/ }\n    its('host_rules.count') { should eq 1 }\n    its('host_rules.first.hosts') { should include url_map['host_rule_host'] }\n    its('path_matchers.count') { should eq 1 }\n    its('path_matchers.first.default_service') { should match /\\/inspec-gcp-backend-service$/ }\n    its('tests.count') { should eq 1 }\n    its('tests.first.host') { should eq url_map['test_host'] }\n    its('tests.first.path') { should eq url_map['test_path'] }\n  end\n\n  describe google_compute_url_map(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_url_maps.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_url_maps resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nurl_map = input('url_map', value: {\n  \"name\": \"inspec-gcp-url-map\",\n  \"description\": \"URL map description\",\n  \"host_rule_host\": \"site.com\",\n  \"path_matcher_name\": \"allpaths\",\n  \"path_rule_path\": \"/home\",\n  \"test_host\": \"test.com\",\n  \"test_path\": \"/home\"\n}, description: 'Compute URL map definition')\nbackend_service = input('backend_service', value: {\n  \"name\": \"inspec-gcp-backend-service\",\n  \"description\": \"A description\",\n  \"port_name\": \"http\",\n  \"protocol\": \"HTTP\",\n  \"timeout_sec\": 10,\n  \"enable_cdn\": true\n}, description: 'Backend service definition')\ncontrol 'google_compute_url_maps-1.0' do\n  impact 1.0\n  title 'google_compute_url_maps resource test'\n\n  describe google_compute_url_maps(project: gcp_project_id) do\n    its('names') { should include url_map['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vms.rb",
    "content": "title 'Virtual Machines Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\ngcp_ext_vm_data_disk_name = input(:gcp_ext_vm_data_disk_name, value: '', description: 'A valid GCP VM name to check for.')\ngcp_enable_gcloud_calls = input(:gcp_enable_gcloud_calls,value:0,description:'Flag to enable the use of gcloud command line to pull in live data to test against.')\n\ncontrol 'gcp-vms-1.0' do\n\n  only_if { gcp_enable_gcloud_calls.to_i == 1 }\n  impact 1.0\n  title 'Ensure VMs have the correct properties in bulk'\n\n  describe google_compute_instances(project: gcp_project_id, zone: gcp_zone) do\n    it { should exist }\n    its('count') { should be <= 100}\n    its('instance_ids.count') { should be > 0 }\n    its('instance_names') { should include gcp_ext_vm_data_disk_name }\n    # Only make the call if the configuration flag is specified and the test will run\n    gcp_instance_id = `gcloud compute instances list --filter=\"name=gcp-inspec-ext-linux-vm\" --format=json | grep id | grep -o '[0-9]\\\\+'`.chomp\n    its('instance_ids') { should include gcp_instance_id }\n  end\n\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vms_loop.rb",
    "content": "title 'Loop over all GCP Virtual Machines'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_zone = input(:gcp_zone, value: '', description: 'The GCP zone being used.')\n\ncontrol 'gcp-vms-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure VMs have the correct properties in bulk using google_compute_instance for detail.'\n\n  google_compute_instances(project: gcp_project_id, zone: gcp_zone).instance_names.each do |instance_name|\n    describe google_compute_instance(project: gcp_project_id, zone: gcp_zone, name: instance_name) do\n      it { should exist }\n      its('zone') { should match gcp_zone }\n      its('status') { should be_in ['RUNNING', 'PROVISIONING', 'STAGING', 'STOPPING', 'TERMINATED'] }\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vpn_gateway.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_vpn_gateway resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  vpn_gateway = input('vpn_gateway', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"vpn_gateway\": \"2245103640699591658\",\n  \"kind\": \"value_kind\",\n  \"id\": \"2245103640699591658\",\n  \"creation_timestamp\": \"2023-12-12T05:49:57.914-08:00\",\n  \"name\": \"inspec-vpn-gateway\",\n  \"description\": \"value_description\",\n  \"network\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/networks/network1\",\n  \"self_link\": \"value_selflink\",\n  \"label_fingerprint\": \"value_labelfingerprint\",\n  \"stack_type\": \"IPV4_ONLY\"\n}, description: 'vpn_gateway description')\ncontrol 'google_compute_vpn_gateway-1.0' do\n  impact 1.0\n  title 'google_compute_vpn_gateway resource test'\n\n  describe google_compute_vpn_gateway(project: gcp_project_id, region: vpn_gateway['region'], vpnGateway: vpn_gateway['vpnGateway']) do\n  \tit { should exist }\n  \tits('kind') { should cmp vpn_gateway['kind'] }\n  \tits('id') { should cmp vpn_gateway['id'] }\n  \tits('creation_timestamp') { should cmp vpn_gateway['creation_timestamp'] }\n  \tits('name') { should cmp vpn_gateway['name'] }\n  \tits('description') { should cmp vpn_gateway['description'] }\n  \tits('region') { should cmp vpn_gateway['region'] }\n  \tits('network') { should cmp vpn_gateway['network'] }\n  \tits('self_link') { should cmp vpn_gateway['self_link'] }\n  \tits('label_fingerprint') { should cmp vpn_gateway['label_fingerprint'] }\n  \tits('stack_type') { should cmp vpn_gateway['stack_type'] }\n\n  end\n\n  describe google_compute_vpn_gateway(project: gcp_project_id, region: vpn_gateway['region'], vpnGateway: vpn_gateway['vpnGateway']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vpn_gateways.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_vpn_gateways resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  vpn_gateway = input('vpn_gateway', value: {\n  \"project\": \"ppradhan\",\n  \"region\": \"us-central1\",\n  \"vpn_gateway\": \"2245103640699591658\",\n  \"kind\": \"value_kind\",\n  \"id\": \"2245103640699591658\",\n  \"creation_timestamp\": \"2023-12-12T05:49:57.914-08:00\",\n  \"name\": \"inspec-vpn-gateway\",\n  \"description\": \"value_description\",\n  \"network\": \"https://www.googleapis.com/compute/v1/projects/ppradhan/global/networks/network1\",\n  \"self_link\": \"value_selflink\",\n  \"label_fingerprint\": \"value_labelfingerprint\",\n  \"stack_type\": \"IPV4_ONLY\"\n}, description: 'vpn_gateway description')\ncontrol 'google_compute_vpn_gateways-1.0' do\n  impact 1.0\n  title 'google_compute_vpn_gateways resource test'\n\n      describe google_compute_vpn_gateways(project: gcp_project_id, region: vpn_gateway['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vpn_tunnel.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_vpn_tunnel resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nvpn_tunnel = input('vpn_tunnel', value: {\n  \"name\": \"inspec-vpn-tunnel\",\n  \"peer_ip\": \"15.0.0.120\",\n  \"shared_secret\": \"super secret\"\n}, description: 'Compute VPN tunnel description')\ncontrol 'google_compute_vpn_tunnel-1.0' do\n  impact 1.0\n  title 'google_compute_vpn_tunnel resource test'\n\n  describe google_compute_vpn_tunnel(project: gcp_project_id, region: gcp_location, name: vpn_tunnel['name']) do\n    it { should exist }\n    its('peer_ip') { should eq vpn_tunnel['peer_ip'] }\n  end\n\n  describe google_compute_vpn_tunnel(project: gcp_project_id, region: gcp_location, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_vpn_tunnels.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_vpn_tunnels resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\nvpn_tunnel = input('vpn_tunnel', value: {\n  \"name\": \"inspec-vpn-tunnel\",\n  \"peer_ip\": \"15.0.0.120\",\n  \"shared_secret\": \"super secret\"\n}, description: 'Compute VPN tunnel description')\ncontrol 'google_compute_vpn_tunnels-1.0' do\n  impact 1.0\n  title 'google_compute_vpn_tunnels resource test'\n\n  describe google_compute_vpn_tunnels(project: gcp_project_id, region: gcp_location) do\n  \tits('vpn_tunnel_names') { should include vpn_tunnel['name'] }\n    its('peer_ips') { should include vpn_tunnel['peer_ip'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_xpn_resources.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_xpn_resources resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nxpn_resources = input('xpn_resources', value: {\n  \"id\": \"skilled-circle-407309\",\n  \"type\": \"PROJECT\"\n}, description: 'xpn_resources description')\n\ncontrol 'google_compute_xpn_resources-1.0' do\n  impact 1.0\n  title 'google_compute_xpn_resources resource test'\n\n    describe google_compute_xpn_resources(project: gcp_project_id) do\n      it { should exist }\n      its('ids') { should include xpn_resources['id']}\n      its('types') { should include xpn_resources['type']}\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_zone.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_zone resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_zone-1.0' do\n  impact 1.0\n  title 'google_compute_zone resource test'\n\n  describe google_compute_zone(project: gcp_project_id, name: \"us-central1-a\") do\n    it { should exist }\n    it { should be_up }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_zone_operation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_zone_operation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nzone_operation = input('zone_operation', value: {\n  \"name\": \"operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69\",\n  \"zone\": \"us-central1-a\",\n  \"operation_type\": \"compute.instanceGroupManagers.insert\",\n  \"status\": \"DONE\",\n  \"progress\": 100\n}, description: 'Operation resources contained within the specified zone')\ncontrol 'google_compute_zone_operation-1.0' do\n  impact 1.0\n  title 'google_compute_zone_operation resource test'\n\n  describe google_compute_zone_operation(project: gcp_project_id, zone: zone_operation['zone'], name: zone_operation['name']) do\n  it { should exist }\n  its('name') { should eq zone_operation['name'] }\n  its('status') { should eq zone_operation['status'] }\n  its('progress') { should eq zone_operation['progress'] }\n  end\n\n  describe google_compute_zone_operation(project: gcp_project_id, zone: zone_operation['zone'], name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_zone_operations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_zone_operations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nzone_operation = input('zone_operation', value: {\n  \"name\": \"operation-1641188179305-5d4a6e66fe2bd-8fd1812d-d97f3b69\",\n  \"zone\": \"us-central1-a\",\n  \"operation_type\": \"compute.instanceGroupManagers.insert\",\n  \"status\": \"DONE\",\n  \"progress\": 100\n}, description: 'Operation resources contained within the specified zone')\ncontrol 'google_compute_zone_operations-1.0' do\n  impact 1.0\n  title 'google_compute_zone_operations resource test'\n\n  describe google_compute_zone_operations(project: gcp_project_id, zone: zone_operation['zone']) do\n  \tit { should exist }\n  \tits('names') { should include zone_operation['name'] }\n  \tits('progresses') { should include zone_operation['progress'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_zones.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_compute_zones resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_compute_zones-1.0' do\n  impact 1.0\n  title 'google_compute_zones resource test'\n\n  google_compute_zones(project: gcp_project_id).zone_names.each do |zone_name|\n    describe google_compute_zone(project: gcp_project_id, name: zone_name) do\n      it { should exist }\n      it { should be_up }\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_compute_zones_loop.rb",
    "content": "title 'Loop over all GCP Zones'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\n\ncontrol 'gcp-zones-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure zones have the correct properties in bulk using google_compute_zone for detail.'\n\n  google_compute_zones(project: gcp_project_id).zone_names.each do |zone_name|\n    describe google_compute_zone(project: gcp_project_id, name: zone_name) do\n      it { should exist }\n      its('status') { should eq 'UP' }\n      # or equivalently\n      it { should be_up }\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_container_cluster.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_container_cluster resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: 'gcp_kube_cluster_name', description: 'GCP container cluster name')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: 'gcp_kube_cluster_zone', description: 'GCP container cluster zone')\ngcp_kube_cluster_size = input(:gcp_kube_cluster_size, value: 'gcp_kube_cluster_size', description: 'GCP container cluster size')\ngcp_kube_cluster_zone_extra1 = input(:gcp_kube_cluster_zone_extra1, value: 'gcp_kube_cluster_zone_extra1', description: 'First extra zone for the cluster')\ngcp_kube_cluster_zone_extra2 = input(:gcp_kube_cluster_zone_extra2, value: 'gcp_kube_cluster_zone_extra2', description: 'Second extra zone for the cluster')\ngcp_kube_cluster_master_user = input(:gcp_kube_cluster_master_user, value: 'gcp_kube_cluster_master_user', description: 'GCP container cluster admin username')\ncontrol 'google_container_cluster-1.0' do\n  impact 1.0\n  title 'google_container_cluster resource test'\n\n  describe google_container_cluster(project: gcp_project_id, location: gcp_kube_cluster_zone, name: gcp_kube_cluster_name) do\n    it { should exist }\n    its('locations.sort'){ should cmp [ gcp_kube_cluster_zone, gcp_kube_cluster_zone_extra1, gcp_kube_cluster_zone_extra2 ].sort }\n    its('private_cluster_config.enable_private_endpoint') { should eq true}\n    its('master_auth.username') { should eq gcp_kube_cluster_master_user }\n    its('fleet.project') { should eq nil }\n    its('fleet.membership') { should eq nil }\n    its('fleet.to_s') { should include \"ClusterFleet\" }\n  end\n\n  describe google_container_cluster(project: gcp_project_id, location: gcp_kube_cluster_zone, name: 'nonexistent') do\n    it { should_not exist }\n  end\n\n  describe google_container_cluster(project: gcp_project_id, location: gcp_kube_cluster_zone, name: gcp_kube_cluster_name, beta: true) do\n    it { should exist }\n    its('release_channel.channel') { should cmp \"RAPID\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_container_clusters.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_container_clusters resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: 'gcp_kube_cluster_name', description: 'GCP container cluster name')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: 'gcp_kube_cluster_zone', description: 'GCP container cluster zone')\ngcp_kube_cluster_size = input(:gcp_kube_cluster_size, value: 'gcp_kube_cluster_size', description: 'GCP container cluster size')\ngcp_kube_cluster_zone_extra1 = input(:gcp_kube_cluster_zone_extra1, value: 'gcp_kube_cluster_zone_extra1', description: 'First extra zone for the cluster')\ngcp_kube_cluster_zone_extra2 = input(:gcp_kube_cluster_zone_extra2, value: 'gcp_kube_cluster_zone_extra2', description: 'Second extra zone for the cluster')\ngcp_kube_cluster_master_user = input(:gcp_kube_cluster_master_user, value: 'gcp_kube_cluster_master_user', description: 'GCP container cluster admin username')\ncontrol 'google_container_clusters-1.0' do\n  impact 1.0\n  title 'google_container_clusters resource test'\n\n  describe google_container_clusters(project: gcp_project_id, location: gcp_kube_cluster_zone) do\n    its('cluster_names') { should include gcp_kube_cluster_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_container_node_pool.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_container_node_pool resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: 'gcp_kube_cluster_zone', description: 'The zone that the kube cluster resides in.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: 'gcp_kube_cluster_name', description: 'The parent container clusters name.')\nregional_node_pool = input('regional_node_pool', value: {\n  \"name\": \"inspec-gcp-regional-node-pool\",\n  \"cluster_name\": \"inspec-gcp-regional-node-pool-cluster\",\n  \"node_count\": 1,\n  \"initial_node_count\": 1\n}, description: 'Regional Node Pool definition')\ncontrol 'google_container_node_pool-1.0' do\n  impact 1.0\n  title 'google_container_node_pool resource test'\n\n  describe google_container_node_pool(project: gcp_project_id, location: gcp_kube_cluster_zone, cluster_name: gcp_kube_cluster_name, nodepool_name: regional_node_pool['name']) do\n    it { should exist }\n    its('initial_node_count') { should eq regional_node_pool['initial_node_count']}\n  end\n\n  describe google_container_node_pool(project: gcp_project_id, location: gcp_kube_cluster_zone, cluster_name: gcp_kube_cluster_name, nodepool_name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_container_node_pools.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_container_node_pools resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: 'gcp_kube_cluster_zone', description: 'The zone that the kube cluster resides in.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: 'gcp_kube_cluster_name', description: 'The parent container clusters name.')\nregional_node_pool = input('regional_node_pool', value: {\n  \"name\": \"inspec-gcp-regional-node-pool\",\n  \"cluster_name\": \"inspec-gcp-regional-node-pool-cluster\",\n  \"node_count\": 1,\n  \"initial_node_count\": 1\n}, description: 'Regional Node Pool definition')\ncontrol 'google_container_node_pools-1.0' do\n  impact 1.0\n  title 'google_container_node_pools resource test'\n\n  describe google_container_node_pools(project: gcp_project_id, location: gcp_kube_cluster_zone, cluster_name: gcp_kube_cluster_name) do\n    its('initial_node_counts') { should include regional_node_pool['initial_node_count']}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_container_server_config.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_container_server_config resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_kube_cluster_zone = input(:gcp_kube_cluster_zone, value: 'gcp_kube_cluster_zone', description: 'The zone that the kube cluster resides in.')\ngcp_kube_cluster_name = input(:gcp_kube_cluster_name, value: 'gcp_kube_cluster_name', description: 'The parent container clusters name.')\ncontainer_engine_versions = input('container_engine_versions', value: {\n  \"valid_master_version\": \"1.21.5-gke.1802\",\n  \"valid_node_version\": \"1.21.5-gke.1802\"\n}, description: 'Google Kubernetes Engine versions in a zone or region for a given project.')\ncontrol 'google_container_server_config-1.0' do\n  impact 1.0\n  title 'google_container_server_config resource test'\n\n\n  describe google_container_server_config(project: gcp_project_id, location: gcp_kube_cluster_zone) do\n    its('valid_master_versions') { should include container_engine_versions['valid_master_version']}\n    its('valid_node_versions') { should include container_engine_versions['valid_node_version']}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_data_fusion_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_data_fusion_instance resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  instance = input('instance', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/instances/inspec-instance\",\n\t\"parent\": \"projects/ppradhan/locations/us-central1\",\n\t\"type\": \"DEVELOPER\",\n\t\"state\": \"ACTIVE\",\n\t\"create_time\": \"2024-10-09T12:34:49.544484250Z\",\n\t\"update_time\": \"2024-10-09T12:53:56.928042766Z\",\n  \"version\": \"6.10.1\",\n  \"service_account\": \"cloud-datafusion-management-sa@b0ed40f9567706323-tp.iam.gserviceaccount.com\",\n  \"p4_service_account\": \"service-165434197229@gcp-sa-datafusion.iam.gserviceaccount.com\",\n\t\"serviceEndpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.googleusercontent.com\",\n\t\"zone\": \"us-central1-c\",\n\t\"api_endpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.googleusercontent.com/api\",\n\t\"gcs_bucket\": \"gs://df-1770363587862806578-7atlcp4ghmi67nkzaizbbqaaaa\",\n\t\"tenant_project_id\": \"b0ed40f9567706323-tp\",\n\t\"workforce_identity_service_endpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.byoid.googleusercontent.com.\",\n\t\"patch_revision\": \"6.10.1.1\"\n}, description: 'instance description')\ncontrol 'google_data_fusion_instance-1.0' do\n  impact 1.0\n  title 'google_data_fusion_instance resource test'\n\n  describe google_data_fusion_instance(name: instance['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp instance['name'] }\n  \tits('description') { should cmp instance['description'] }\n  \tits('type') { should cmp instance['type'] }\n  \tits('create_time') { should cmp instance['create_time'] }\n  \tits('update_time') { should cmp instance['update_time'] }\n  \tits('state') { should cmp instance['state'] }\n  \tits('service_account') { should cmp instance['service_account'] }\n  \tits('p4_service_account') { should cmp instance['p4_service_account'] }\n  \tits('tenant_project_id') { should cmp instance['tenant_project_id'] }\n  \tits('dataproc_service_account') { should cmp instance['dataproc_service_account'] }\n  \tits('workforce_identity_service_endpoint') { should cmp instance['workforce_identity_service_endpoint'] }\n  \tits('patch_revision') { should cmp instance['patch_revision'] }\n  \tits('tenant_project_id') { should cmp instance['tenant_project_id'] }\n\t\tits('api_endpoint') { should cmp instance['api_endpoint'] }\n  \tits('gcs_bucket') { should cmp instance['gcs_bucket'] }\n\t\tits('zone') { should cmp instance['zone'] }\n  end\n\n  describe google_data_fusion_instance(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_data_fusion_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_data_fusion_instances resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  instance = input('instance', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/instances/inspec-instance\",\n\t\"parent\": \"projects/ppradhan/locations/us-central1\",\n\t\"type\": \"DEVELOPER\",\n\t\"state\": \"ACTIVE\",\n\t\"create_time\": \"2024-10-09T12:34:49.544484250Z\",\n\t\"update_time\": \"2024-10-09T12:53:56.928042766Z\",\n  \"version\": \"6.10.1\",\n  \"service_account\": \"cloud-datafusion-management-sa@b0ed40f9567706323-tp.iam.gserviceaccount.com\",\n  \"p4_service_account\": \"service-165434197229@gcp-sa-datafusion.iam.gserviceaccount.com\",\n\t\"serviceEndpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.googleusercontent.com\",\n\t\"zone\": \"us-central1-c\",\n\t\"api_endpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.googleusercontent.com/api\",\n\t\"gcs_bucket\": \"gs://df-1770363587862806578-7atlcp4ghmi67nkzaizbbqaaaa\",\n\t\"tenant_project_id\": \"b0ed40f9567706323-tp\",\n\t\"workforce_identity_service_endpoint\": \"https://inspec-instance-ppradhan-dot-usc1.datafusion.byoid.googleusercontent.com.\",\n\t\"patch_revision\": \"6.10.1.1\"\n}, description: 'instance description')\ncontrol 'google_data_fusion_instances-1.0' do\n  impact 1.0\n  title 'google_data_fusion_instances resource test'\n\n    describe google_data_fusion_instances(parent: instance['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataflow_project_location_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataflow_project_location_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_location_job = input('project_location_job', value: {\n  \"location\": \"us-central1\",\n  \"project_id\": \"ppradhan\",\n  \"id\": \"2024-02-06_06_34_50-7804426594194635797\",\n  \"name\": \"inspec-test-job\",\n  \"type\": \"value_type\",\n  \"steps_location\": \"value_stepslocation\",\n  \"current_state\": \"value_currentstate\",\n  \"current_state_time\": \"value_currentstatetime\",\n  \"requested_state\": \"value_requestedstate\",\n  \"create_time\": \"value_createtime\",\n  \"replace_job_id\": \"value_replacejobid\",\n  \"client_request_id\": \"value_clientrequestid\",\n  \"replaced_by_job_id\": \"value_replacedbyjobid\",\n  \"start_time\": \"value_starttime\",\n  \"created_from_snapshot_id\": \"value_createdfromsnapshotid\"\n}, description: 'project_location_job description')\ncontrol 'google_dataflow_project_location_job-1.0' do\n  impact 1.0\n  title 'google_dataflow_project_location_job resource test'\n\n  describe google_dataflow_project_location_job(job: project_location_job['id'], location: project_location_job['location'], projectId: project_location_job['project_id']) do\n  \tit { should exist }\n  \tits('id') { should cmp project_location_job['id'] }\n  \tits('project_id') { should cmp project_location_job['project_id'] }\n  \tits('name') { should cmp project_location_job['name'] }\n  \tits('type') { should cmp project_location_job['type'] }\n  \tits('steps_location') { should cmp project_location_job['steps_location'] }\n  \tits('current_state') { should cmp project_location_job['current_state'] }\n  \tits('current_state_time') { should cmp project_location_job['current_state_time'] }\n  \tits('requested_state') { should cmp project_location_job['requested_state'] }\n  \tits('create_time') { should cmp project_location_job['create_time'] }\n  \tits('replace_job_id') { should cmp project_location_job['replace_job_id'] }\n  \tits('client_request_id') { should cmp project_location_job['client_request_id'] }\n  \tits('replaced_by_job_id') { should cmp project_location_job['replaced_by_job_id'] }\n  \tits('location') { should cmp project_location_job['location'] }\n  \tits('start_time') { should cmp project_location_job['start_time'] }\n  \tits('created_from_snapshot_id') { should cmp project_location_job['created_from_snapshot_id'] }\n\n  end\n\n  describe google_dataflow_project_location_job(job: project_location_job['id'], location: project_location_job['location'], projectId: project_location_job['project_id']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataflow_project_location_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataflow_project_location_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_location_job = input('project_location_job', value: {\n  \"location\": \"us-central1\",\n  \"project_id\": \"ppradhan\",\n  \"id\": \"2024-02-06_06_34_50-7804426594194635797\",\n  \"name\": \"inspec-test-job\",\n  \"type\": \"value_type\",\n  \"steps_location\": \"value_stepslocation\",\n  \"current_state\": \"value_currentstate\",\n  \"current_state_time\": \"value_currentstatetime\",\n  \"requested_state\": \"value_requestedstate\",\n  \"create_time\": \"value_createtime\",\n  \"replace_job_id\": \"value_replacejobid\",\n  \"client_request_id\": \"value_clientrequestid\",\n  \"replaced_by_job_id\": \"value_replacedbyjobid\",\n  \"start_time\": \"value_starttime\",\n  \"created_from_snapshot_id\": \"value_createdfromsnapshotid\"\n}, description: 'project_location_job description')\ncontrol 'google_dataflow_project_location_jobs-1.0' do\n  impact 1.0\n  title 'google_dataflow_project_location_jobs resource test'\n\n      describe google_dataflow_project_location_jobs(location: project_location_job['location'], project: project_location_job['project_id']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_autoscaling_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_autoscaling_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  autoscaling_policy = input('autoscaling_policy', value: {\n  \"name\": \"projects/ppradhan/regions/us-central1/autoscalingPolicies/inspec-policy-cf1d\",\n  \"parent\": \"projects/ppradhan/regions/us-central1\",\n  \"id\": \"inspec-policy-cf1d\"\n}, description: 'autoscaling_policy description')\ncontrol 'google_dataproc_autoscaling_policies-1.0' do\n  impact 1.0\n  title 'google_dataproc_autoscaling_policies resource test'\n\n    describe google_dataproc_autoscaling_policies(parent: autoscaling_policy['parent']) do\n      it { should exist }\n      its('ids') { should include autoscaling_policy['id'] }\n      its('names') { should include autoscaling_policy['name'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_autoscaling_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_autoscaling_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  autoscaling_policy = input('autoscaling_policy', value: {\n  \"name\": \"projects/ppradhan/regions/us-central1/autoscalingPolicies/inspec-policy-cf1d\",\n  \"parent\": \"projects/ppradhan/regions/us-central1\",\n  \"id\": \"inspec-policy-cf1d\"\n}, description: 'autoscaling_policy description')\ncontrol 'google_dataproc_autoscaling_policy-1.0' do\n  impact 1.0\n  title 'google_dataproc_autoscaling_policy resource test'\n\n  describe google_dataproc_autoscaling_policy(name: autoscaling_policy['name']) do\n  \tit { should exist }\n  \tits('id') { should cmp autoscaling_policy['id'] }\n  \tits('name') { should cmp autoscaling_policy['name'] }\n  end\n\n  describe google_dataproc_autoscaling_policy(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_batch.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_batch resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nbatch = input('batch', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/batches/inspec-test-batch-0052\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uuid\": \"5a1b8402-2aa5-4578-98ee-2ff12ff2a14e\",\n  \"create_time\": \"2024-10-15T06:42:29.671473Z\",\n  \"state\": \"SUCCEEDED\",\n  \"state_time\": \"2024-10-15T06:44:55.114445Z\",\n  \"creator\": \"bala-local@ppradhan.iam.gserviceaccount.com\",\n  \"operation\": \"projects/ppradhan/regions/us-central1/operations/19a2ac29-3564-49b8-8116-c36dd98d9cd5\"\n}, description: 'batch description')\ncontrol 'google_dataproc_batch-1.0' do\n  impact 1.0\n  title 'google_dataproc_batch resource test'\n\n  describe google_dataproc_batch(name: batch['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp batch['name'] }\n  \tits('uuid') { should cmp batch['uuid'] }\n  \tits('create_time') { should cmp batch['create_time'] }\n  \tits('state') { should cmp batch['state'] }\n  \tits('state_message') { should cmp batch['state_message'] }\n  \tits('state_time') { should cmp batch['state_time'] }\n  \tits('creator') { should cmp batch['creator'] }\n  \tits('operation') { should cmp batch['operation'] }\n\n  end\n\n  describe google_dataproc_batch(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_batches.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_batches resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nbatch = input('batch', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/batches/inspec-test-batch-0052\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uuid\": \"5a1b8402-2aa5-4578-98ee-2ff12ff2a14e\",\n  \"create_time\": \"2024-10-15T06:42:29.671473Z\",\n  \"state\": \"SUCCEEDED\",\n  \"state_time\": \"2024-10-15T06:44:55.114445Z\",\n  \"creator\": \"bala-local@ppradhan.iam.gserviceaccount.com\",\n  \"operation\": \"projects/ppradhan/regions/us-central1/operations/19a2ac29-3564-49b8-8116-c36dd98d9cd5\"\n}, description: 'batch description')\ncontrol 'google_dataproc_batches-1.0' do\n  impact 1.0\n  title 'google_dataproc_batches resource test'\n\n      describe google_dataproc_batches(parent: batch['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_cluster.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_cluster resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ndataproc_cluster = input('dataproc_cluster', value: {\n  \"name\": \"inspec-dataproc-cluster\",\n  \"label_key\": \"label\",\n  \"label_value\": \"value\",\n  \"config\": {\n    \"master_config\": {\n      \"num_instances\": 1,\n      \"machine_type\": \"n1-standard-1\",\n      \"boot_disk_type\": \"pd-ssd\",\n      \"boot_disk_size_gb\": 15\n    },\n    \"worker_config\": {\n      \"num_instances\": 2,\n      \"machine_type\": \"n1-standard-1\",\n      \"boot_disk_size_gb\": 20,\n      \"num_local_ssds\": 1\n    },\n    \"preemptible_worker_config\": {\n      \"num_instances\": 0\n    },\n    \"software_config\": {\n      \"prop_key\": \"dataproc:dataproc.allow.zero.workers\",\n      \"prop_value\": \"true\"\n    },\n    \"gce_cluster_config\": {\n      \"tag\": \"foo\"\n    }\n  }\n}, description: 'Dataproc cluster definition')\ncontrol 'google_dataproc_cluster-1.0' do\n  impact 1.0\n  title 'google_dataproc_cluster resource test'\n\n  describe google_dataproc_cluster(project: gcp_project_id, region: gcp_location, cluster_name: dataproc_cluster['name']) do\n    it { should exist }\n    its('labels') { should include(dataproc_cluster['label_key'] => dataproc_cluster['label_value']) }\n    its('config.master_config.num_instances') { should cmp dataproc_cluster['config']['master_config']['num_instances'] }\n    its('config.worker_config.num_instances') { should cmp dataproc_cluster['config']['worker_config']['num_instances'] }\n    its('config.master_config.machine_type_uri') { should match dataproc_cluster['config']['master_config']['machine_type'] }\n    its('config.worker_config.machine_type_uri') { should match dataproc_cluster['config']['worker_config']['machine_type'] }\n    its('config.software_config.properties') { should include(dataproc_cluster['config']['software_config']['prop_key'] => dataproc_cluster['config']['software_config']['prop_value']) }\n    its('project_id') { should eq gcp_project_id }\n    its('cluster_uuid') { should eq \"test-uuid-67ff7c8e-558a-45ad-97c7\" }\n  end\n\n  describe google_dataproc_cluster(project: gcp_project_id, region: gcp_location, cluster_name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_clusters.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_clusters resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'The GCP project region.')\ndataproc_cluster = input('dataproc_cluster', value: {\n  \"name\": \"inspec-dataproc-cluster\",\n  \"label_key\": \"label\",\n  \"label_value\": \"value\",\n  \"config\": {\n    \"master_config\": {\n      \"num_instances\": 1,\n      \"machine_type\": \"n1-standard-1\",\n      \"boot_disk_type\": \"pd-ssd\",\n      \"boot_disk_size_gb\": 15\n    },\n    \"worker_config\": {\n      \"num_instances\": 2,\n      \"machine_type\": \"n1-standard-1\",\n      \"boot_disk_size_gb\": 20,\n      \"num_local_ssds\": 1\n    },\n    \"preemptible_worker_config\": {\n      \"num_instances\": 0\n    },\n    \"software_config\": {\n      \"prop_key\": \"dataproc:dataproc.allow.zero.workers\",\n      \"prop_value\": \"true\"\n    },\n    \"gce_cluster_config\": {\n      \"tag\": \"foo\"\n    }\n  }\n}, description: 'Dataproc cluster definition')\ncontrol 'google_dataproc_clusters-1.0' do\n  impact 1.0\n  title 'google_dataproc_clusters resource test'\n\n  describe google_dataproc_clusters(project: gcp_project_id, region: gcp_location) do\n    its('count') { should be >= 1 }\n    its('cluster_names') { should include dataproc_cluster['name'] }\n    its('project_ids') { should include gcp_project_id }\n    its('cluster_uuids') { should include \"test-uuid-67ff7c8e-558a-45ad-97c7\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\njob = input('job', value: {\n  \"job_id\": \"job-46b1a728\",\n  \"project_id\": \"ppradhan\",\n  \"region\": \"europe-west2\",\n  \"driver_output_resource_uri\": \"gs://dataproc-staging-europe-west2-165434197229-ycz8tbcn/google-cloud-dataproc-metainfo/0c01e2dd-85d5-4bac-9e53-b7c4ebd1c6b8/jobs/job-46b1a728/driveroutput\",\n  \"driver_control_files_uri\": \"gs://dataproc-staging-europe-west2-165434197229-ycz8tbcn/google-cloud-dataproc-metainfo/0c01e2dd-85d5-4bac-9e53-b7c4ebd1c6b8/jobs/job-46b1a728/\",\n  \"job_uuid\": \"96a1cb4b-1083-416b-ac8a-3ebd39e478c3\"\n}, description: 'job description')\ncontrol 'google_dataproc_job-1.0' do\n  impact 1.0\n  title 'google_dataproc_job resource test'\n\n  describe google_dataproc_job(job_id: job['job_id'], project_id: job['project_id'], region: job['region']) do\n  \tit { should exist }\n  \tits('driver_output_resource_uri') { should cmp job['driver_output_resource_uri'] }\n  \tits('driver_control_files_uri') { should cmp job['driver_control_files_uri'] }\n  \tits('job_uuid') { should cmp job['job_uuid'] }\n  end\n\n  describe google_dataproc_job(job_id: job['jobId'], project_id: job['project_id'], region: job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\njob = input('job', value: {\n  \"job_id\": \"job-46b1a728\",\n  \"project_id\": \"ppradhan\",\n  \"region\": \"europe-west2\",\n  \"driver_output_resource_uri\": \"gs://dataproc-staging-europe-west2-165434197229-ycz8tbcn/google-cloud-dataproc-metainfo/0c01e2dd-85d5-4bac-9e53-b7c4ebd1c6b8/jobs/job-46b1a728/driveroutput\",\n  \"driver_control_files_uri\": \"gs://dataproc-staging-europe-west2-165434197229-ycz8tbcn/google-cloud-dataproc-metainfo/0c01e2dd-85d5-4bac-9e53-b7c4ebd1c6b8/jobs/job-46b1a728/\",\n  \"job_uuid\": \"96a1cb4b-1083-416b-ac8a-3ebd39e478c3\"\n}, description: 'job description')\ncontrol 'google_dataproc_jobs-1.0' do\n  impact 1.0\n  title 'google_dataproc_jobs resource test'\n\n    describe google_dataproc_jobs(project_id: job['project_id'], region: job['region']) do\n      it { should exist }\n      its('driver_output_resource_uris') { should include job['driver_output_resource_uri'] }\n      its('driver_control_files_uris') { should include job['driver_control_files_uri'] }\n      its('job_uuids') { should include job['job_uuid'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_federation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_federation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfederation = input('federation', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/federations/inspec-federation\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"create_time\": \"2024-07-23T11:59:46.629125267Z\",\n  \"update_time\": \"2024-07-23T12:01:30.424230443Z\",\n  \"version\": \"3.1.2\",\n  \"endpoint_uri\": \"https://standalone-federation-inspec-federation-4082ad6a-ct6cldpepa-uc.a.run.app:443\",\n  \"state\": \"ACTIVE\",\n  \"state_message\": \"value_statemessage\",\n  \"uid\": \"d9600d29-81c5-47f1-8db6-4ffe194841fe\"\n}, description: 'federation description')\ncontrol 'google_dataproc_metastore_federation-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_federation resource test'\n\n  describe google_dataproc_metastore_federation(name: federation['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp federation['name'] }\n  \tits('create_time') { should cmp federation['create_time'] }\n  \tits('update_time') { should cmp federation['update_time'] }\n  \tits('version') { should cmp federation['version'] }\n  \tits('endpoint_uri') { should cmp federation['endpoint_uri'] }\n  \tits('state') { should cmp federation['state'] }\n  \tits('state_message') { should cmp federation['state_message'] }\n  \tits('uid') { should cmp federation['uid'] }\n\n  end\n\n  describe google_dataproc_metastore_federation(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_federations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_federations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfederation = input('federation', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/federations/inspec-federation\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"create_time\": \"2024-07-23T11:59:46.629125267Z\",\n  \"update_time\": \"2024-07-23T12:01:30.424230443Z\",\n  \"version\": \"3.1.2\",\n  \"endpoint_uri\": \"https://standalone-federation-inspec-federation-4082ad6a-ct6cldpepa-uc.a.run.app:443\",\n  \"state\": \"ACTIVE\",\n  \"state_message\": \"value_statemessage\",\n  \"uid\": \"d9600d29-81c5-47f1-8db6-4ffe194841fe\"\n}, description: 'federation description')\ncontrol 'google_dataproc_metastore_federations-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_federations resource test'\n\n    describe google_dataproc_metastore_federations(parent: federation['parent']) do\n      it { should exist }\n      its('names') { should include federation['name'] }\n      its('create_times') { should include federation['create_time'] }\n      its('update_times') { should include federation['update_time'] }\n      its('versions') { should include federation['version'] }\n      its('endpoint_uris') { should include federation['endpoint_uri'] }\n      its('states') { should include federation['state'] }\n      its('uids') { should include federation['uid'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_location_service = input('project_location_service', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/metastore-srv\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"create_time\": \"2024-07-11T10:37:41.096165514Z\",\n  \"update_time\": \"2024-07-11T11:17:30.112145404Z\",\n  \"network\": \"projects/ppradhan/global/networks/default\",\n  \"endpoint_uri\": \"thrift://10.104.64.28:9080\",\n  \"state\": \"ACTIVE\",\n  \"state_message\": \"The service is ready to use\",\n  \"artifact_gcs_uri\": \"gs://gcs-bucket-metastore-srv-2a1c2d78-1aab-4f1b-b6cd-388796854ab8\",\n  \"tier\": \"DEVELOPER\",\n  \"uid\": \"2a1c2d78-1aab-4f1b-b6cd-388796854ab8\",\n  \"release_channel\": \"STABLE\",\n  \"database_type\": \"MYSQL\"\n}, description: 'project_location_service description')\ncontrol 'google_dataproc_metastore_service-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_service resource test'\n\n  describe google_dataproc_metastore_service(name: project_location_service['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp project_location_service['name'] }\n  \tits('create_time') { should cmp project_location_service['create_time'] }\n  \tits('update_time') { should cmp project_location_service['update_time'] }\n  \tits('network') { should cmp project_location_service['network'] }\n  \tits('endpoint_uri') { should cmp project_location_service['endpoint_uri'] }\n  \tits('state') { should cmp project_location_service['state'] }\n  \tits('state_message') { should cmp project_location_service['state_message'] }\n  \tits('artifact_gcs_uri') { should cmp project_location_service['artifact_gcs_uri'] }\n  \tits('tier') { should cmp project_location_service['tier'] }\n  \tits('uid') { should cmp project_location_service['uid'] }\n  \tits('release_channel') { should cmp project_location_service['release_channel'] }\n  \tits('database_type') { should cmp project_location_service['database_type'] }\n  end\n\n  describe google_dataproc_metastore_service(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_service_backup.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_service_backup resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nservice_backup = input('service_backup', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/inspec-test/backups/inspec-backup-fa90\",\n  \"parent\": \"projects/ppradhan/locations/us-central1/services/inspec-test\",\n  \"create_time\": \"2024-08-19T12:06:12.158023685Z\",\n  \"end_time\": \"2024-08-19T12:09:42.670413Z\",\n  \"state\": \"ACTIVE\",\n  \"description\": \"value_description\"\n}, description: 'service_backup description')\ncontrol 'google_dataproc_metastore_service_backup-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_service_backup resource test'\n\n  describe google_dataproc_metastore_service_backup(name: service_backup['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp service_backup['name'] }\n  \tits('create_time') { should cmp service_backup['create_time'] }\n  \tits('end_time') { should cmp service_backup['end_time'] }\n  \tits('state') { should cmp service_backup['state'] }\n  \tits('description') { should cmp service_backup['description'] }\n\n  end\n\n  describe google_dataproc_metastore_service_backup(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_service_backups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_service_backups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nservice_backup = input('service_backup', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/inspec-test/backups/inspec-backup-fa90\",\n  \"parent\": \"projects/ppradhan/locations/us-central1/services/inspec-test\",\n  \"create_time\": \"2024-08-19T12:06:12.158023685Z\",\n  \"end_time\": \"2024-08-19T12:09:42.670413Z\",\n  \"state\": \"ACTIVE\",\n  \"description\": \"value_description\"\n}, description: 'service_backup description')\ncontrol 'google_dataproc_metastore_service_backups-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_service_backups resource test'\n\n    describe google_dataproc_metastore_service_backups(parent: service_backup['parent']) do\n      it { should exist }\n      its('names') { should include service_backup['name'] }\n      its('create_times') { should include service_backup['create_time'] }\n      its('end_times') { should include service_backup['end_time'] }\n      its('states') { should include service_backup['state'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_metastore_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_metastore_services resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_location_service = input('project_location_service', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/metastore-srv\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"create_time\": \"2024-07-11T10:37:41.096165514Z\",\n  \"update_time\": \"2024-07-11T11:17:30.112145404Z\",\n  \"network\": \"projects/ppradhan/global/networks/default\",\n  \"endpoint_uri\": \"thrift://10.104.64.28:9080\",\n  \"state\": \"ACTIVE\",\n  \"state_message\": \"The service is ready to use\",\n  \"artifact_gcs_uri\": \"gs://gcs-bucket-metastore-srv-2a1c2d78-1aab-4f1b-b6cd-388796854ab8\",\n  \"tier\": \"DEVELOPER\",\n  \"uid\": \"2a1c2d78-1aab-4f1b-b6cd-388796854ab8\",\n  \"release_channel\": \"STABLE\",\n  \"database_type\": \"MYSQL\"\n}, description: 'project_location_service description')\ncontrol 'google_dataproc_metastore_services-1.0' do\n  impact 1.0\n  title 'google_dataproc_metastore_services resource test'\n\n    describe google_dataproc_metastore_services(parent: project_location_service['parent']) do\n      it { should exist }\n      its('names') { should include project_location_service['name'] }\n      its('create_times') { should include project_location_service['create_time'] }\n      its('update_times') { should include project_location_service['update_time'] }\n      its('networks') { should include project_location_service['network'] }\n      its('endpoint_uris') { should include project_location_service['endpoint_uri'] }\n      its('states') { should include project_location_service['state'] }\n      its('state_messages') { should include project_location_service['state_message'] }\n      its('artifact_gcs_uris') { should include project_location_service['artifact_gcs_uri'] }\n      its('tiers') { should include project_location_service['tier'] }\n      its('uids') { should include project_location_service['uid'] }\n      its('release_channels') { should include project_location_service['release_channel'] }\n      its('database_types') { should include project_location_service['database_type'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_session.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_session resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nsession = input('session', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/sessions/inspec-runtime-0ae1-b98f4174\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uuid\": \"0b8d8483-b1ff-4f67-8e34-8d57987430a2\",\n  \"create_time\": \"2024-08-19T06:59:23.721658Z\",\n  \"state\": \"value_state\",\n  \"state_message\": \"value_statemessage\",\n  \"state_time\": \"value_statetime\",\n  \"creator\": \"balasubramanian.s@chef.io\",\n  \"user\": \"value_user\",\n  \"session_template\": \"projects/ppradhan/locations/us-central1/sessionTemplates/inspec-runtime-0ae1\"\n}, description: 'session description')\ncontrol 'google_dataproc_session-1.0' do\n  impact 1.0\n  title 'google_dataproc_session resource test'\n\n  describe google_dataproc_session(name: session['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp session['name'] }\n  \tits('uuid') { should cmp session['uuid'] }\n  \tits('create_time') { should cmp session['create_time'] }\n  \tits('state') { should cmp session['state'] }\n  \tits('state_message') { should cmp session['state_message'] }\n  \tits('state_time') { should cmp session['state_time'] }\n  \tits('creator') { should cmp session['creator'] }\n  \tits('user') { should cmp session['user'] }\n  \tits('session_template') { should cmp session['session_template'] }\n  end\n\n  describe google_dataproc_session(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_sessions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_sessions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nsession = input('session', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/sessions/inspec-runtime-0ae1-b98f4174\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uuid\": \"0b8d8483-b1ff-4f67-8e34-8d57987430a2\",\n  \"create_time\": \"2024-08-19T06:59:23.721658Z\",\n  \"state\": \"value_state\",\n  \"state_message\": \"value_statemessage\",\n  \"state_time\": \"value_statetime\",\n  \"creator\": \"balasubramanian.s@chef.io\",\n  \"user\": \"value_user\",\n  \"session_template\": \"projects/ppradhan/locations/us-central1/sessionTemplates/inspec-runtime-0ae1\"\n}, description: 'session description')\ncontrol 'google_dataproc_sessions-1.0' do\n  impact 1.0\n  title 'google_dataproc_sessions resource test'\n\n    describe google_dataproc_sessions(parent: session['parent']) do\n      it { should exist }\n      its('names') { should include session['name'] }\n      its('uuids') { should include session['uuid'] }\n      its('create_times') { should include session['create_time'] }\n      its('creators') { should include session['creator'] }\n      its('session_templates') { should include session['session_template'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_workflow_template.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_workflow_template resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  workflow_template = input('workflow_template', value: {\n  \"project\": \"ppradhan\",\n  \"reservation\": \"value_reservation\",\n  \"zone\": \"value_zone\",\n  \"id\": \"template-8b819\",\n  \"parent\": \"projects/ppradhan/regions/us-central1\",\n  \"name\": \"projects/ppradhan/regions/us-central1/workflowTemplates/template-8b819\",\n  \"create_time\": \"2024-06-17T09:08:05.009118Z\",\n  \"update_time\": \"2024-06-17T09:08:05.009118Z\",\n  \"dag_timeout\": \"value_dagtimeout\"\n}, description: 'workflow_template description')\ncontrol 'google_dataproc_workflow_template-1.0' do\n  impact 1.0\n  title 'google_dataproc_workflow_template resource test'\n\n  describe google_dataproc_workflow_template(name: workflow_template['name']) do\n  \tit { should exist }\n  \tits('id') { should cmp workflow_template['id'] }\n  \tits('name') { should cmp workflow_template['name'] }\n  \tits('create_time') { should cmp workflow_template['create_time'] }\n  \tits('update_time') { should cmp workflow_template['update_time'] }\n  \tits('dag_timeout') { should cmp workflow_template['dag_timeout'] }\n\n  end\n\n  describe google_dataproc_workflow_template(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dataproc_workflow_templates.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dataproc_workflow_templates resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  workflow_template = input('workflow_template', value: {\n  \"project\": \"ppradhan\",\n  \"reservation\": \"value_reservation\",\n  \"zone\": \"value_zone\",\n  \"id\": \"template-8b819\",\n  \"parent\": \"projects/ppradhan/regions/us-central1\",\n  \"name\": \"projects/ppradhan/regions/us-central1/workflowTemplates/template-8b819\",\n  \"create_time\": \"2024-06-17T09:08:05.009118Z\",\n  \"update_time\": \"2024-06-17T09:08:05.009118Z\",\n  \"dag_timeout\": \"value_dagtimeout\"\n}, description: 'workflow_template description')\ncontrol 'google_dataproc_workflow_templates-1.0' do\n  impact 1.0\n  title 'google_dataproc_workflow_templates resource test'\n\n    describe google_dataproc_workflow_templates(parent: workflow_template['parent']) do\n      it { should exist }\n      its('ids') { should include project_location_workflow_template['id'] }\n      its('names') { should include project_location_workflow_template['name'] }\n      its('create_times') { should include project_location_workflow_template['create_time'] }\n      its('update_times') { should include project_location_workflow_template['update_time'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_dt.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_dt resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_dt-1.0' do\n  impact 1.0\n  title 'google_dlp_dt resource test'\n\n\n\n  describe google_dlp_dts(parent: \"projects/#{gcp_project_id}/locations/#{dlp['deidentify_templates'][:location]}\") do\n    it { should exist }\n    its('display_names') { should include dlp['deidentify_templates'][:name] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_dts.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_dts resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_dts-1.0' do\n  impact 1.0\n  title 'google_dlp_dts resource test'\n\n\n  describe google_dlp_dt(parent: \"projects/#{gcp_project_id}/locations/#{dlp['deidentify_templates'][:location]}\", name: dlp['deidentify_templates'][:name]) do\n    it { should exist }\n    its('display_name') { should cmp dlp['deidentify_templates'][:name] }\n  end\n\n  describe google_dlp_dt(parent: \"projects/#{gcp_project_id}/locations/#{dlp['deidentify_templates'][location]}\", name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_inspect_template.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_inspect_template resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_inspect_template-1.0' do\n  impact 1.0\n  title 'google_dlp_inspect_template resource test'\n\n\n  describe google_dlp_inspect_template(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\", name: dlp['name']) do\n  it { should exist }\n  its('name') { should cmp dlp['name'] }\n  its('type') { should cmp dlp['type'] }\n  its('state') { should cmp dlp['state'] }\n  its('inspectDetails.requestedOptions.snapshotInspectTemplate') { should cmp dlp['inspectDetails']['requestedOptions']['snapshotInspectTemplate'] }\n  end\n\n  describe google_dlp_inspect_template(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\", name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_inspect_templates.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_inspect_templates resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_inspect_templates-1.0' do\n  impact 1.0\n  title 'google_dlp_inspect_templates resource test'\n\n\n\n  describe google_dlp_inspect_templates(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\") do\n  it { should exist }\n  its('names') { should include dlp['name'] }\n  its('types') { should include dlp['type'] }\n  its('states') { should include dlp['state'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_job-1.0' do\n  impact 1.0\n  title 'google_dlp_job resource test'\n\n\n  describe google_dlp_job(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\", name: dlp['name']) do\n    it { should exist }\n    its('name') { should cmp dlp['name'] }\n    its('type') { should cmp dlp['type'] }\n    its('state') { should cmp dlp['state'] }\n    its('inspectDetails.requestedOptions.snapshotInspectTemplate') { should cmp dlp['inspectDetails']['requestedOptions']['snapshotInspectTemplate'] }\n  end\n\n  describe google_dlp_job(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\", name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_job_trigger.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_job_trigger resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_job_trigger-1.0' do\n  impact 1.0\n  title 'google_dlp_job_trigger resource test'\n\n\n  describe google_dlp_job_trigger(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\",name: dlp['job_trigger_name']) do\n  it { should exist }\n  its('name') { should cmp dlp['job_trigger_name'] }\n  its('display_name') { should cmp dlp['job_trigger_display_name'] }\n  its('description') { should cmp dlp['job_trigger_description'] }\n  its('status') { should cmp dlp['job_trigger_status'] }\n  end\n\n  describe google_dlp_job_trigger(parent: gcp_project_id, name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_job_triggers.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_job_triggers resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_job_triggers-1.0' do\n  impact 1.0\n  title 'google_dlp_job_triggers resource test'\n\n\n\n  describe google_dlp_job_triggers(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\") do\n  it { should exist }\n  its('names') { should include dlp['job_trigger_name'] }\n  its('display_name') { should include dlp['job_trigger_display_name'] }\n  its('descriptions') { should include dlp['job_trigger_description'] }\n  its('status') { should include dlp['job_trigger_status'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_jobs-1.0' do\n  impact 1.0\n  title 'google_dlp_jobs resource test'\n\n\n\n  describe google_dlp_jobs(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\") do\n    it { should exist }\n    its('names') { should include dlp['name'] }\n    its('types') { should include dlp['type'] }\n    its('states') { should include dlp['state'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_stored_info_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_stored_info_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_stored_info_type-1.0' do\n  impact 1.0\n  title 'google_dlp_stored_info_type resource test'\n\n\n  describe google_dlp_stored_info_type(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\",name: dlp['stored_info_type_name']) do\n  it { should exist }\n  its('name') { should cmp dlp['name'] }\n  its('type') { should cmp dlp['type'] }\n  its('state') { should cmp dlp['state'] }\n  end\n\n  describe google_dlp_stored_info_type(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\", name: 'nonexistent') do\n  it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dlp_stored_info_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dlp_stored_info_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ndlp = input('dlp', value: {\n  \"name\": \"i-inspec-gcp-dlp\",\n  \"location\": \"us-east-2\",\n  \"type\": \"INSPECT_JOB\",\n  \"state\": \"ACTIVE\",\n  \"inspectDetails\": {\n    \"requestedOptions\": {\n      \"snapshotInspectTemplate\": \"\",\n      \"jobConfig\": {\n        \"storageConfig\": {\n          \"hybridOptions\": {\n            \"description\": \"test\",\n            \"tableOptions\": \"\"\n          }\n        }\n      }\n    }\n  },\n  \"description\": \"Description\",\n  \"display_name\": \"Displayname\",\n  \"job_attribute_name\": \"job_attribute-1\",\n  \"job_trigger_status\": \"HEALTHY\",\n  \"job_trigger_name\": \"name1\",\n  \"job_trigger_display_name\": \"dp\",\n  \"job_trigger_description\": \"description\",\n  \"deidentify_templates\": {\n    \"name\": \"dlp-template-inspec\",\n    \"location\": \"europe-west2\",\n    \"type\": \"Infotype\"\n  }\n}, description: 'DLP ')\ncontrol 'google_dlp_stored_info_types-1.0' do\n  impact 1.0\n  title 'google_dlp_stored_info_types resource test'\n\n\n\n  describe google_dlp_stored_info_types(parent: \"projects/#{gcp_project_id}/locations/#{dlp['location']}\") do\n  it { should exist }\n  its('names') { should include dlp['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dns_managed_zone.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dns_managed_zone resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_dns_zone_name = input(:gcp_dns_zone_name, value: 'gcp_dns_zone_name', description: 'The DNS name of the DNS zone.')\ndns_managed_zone = input('dns_managed_zone', value: {\"name\"=>\"example-zone\", \"description\"=>\"example description\", \"dnssec_config_state\"=>\"on\"})\ncontrol 'google_dns_managed_zone-1.0' do\n  impact 1.0\n  title 'google_dns_managed_zone resource test'\n\n  describe google_dns_managed_zone(project: gcp_project_id, zone: dns_managed_zone['name']) do\n    it { should exist }\n    its('dns_name') { should cmp gcp_dns_zone_name }\n\n    its('description') { should cmp dns_managed_zone['description'] }\n    its('zone_signing_key_algorithm') { should cmp 'rsasha256' }\n    its('key_signing_key_algorithm') { should cmp 'rsasha512' }\n  end\n\n  describe google_dns_managed_zone(project: gcp_project_id, zone: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dns_managed_zones.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dns_managed_zones resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_dns_zone_name = input(:gcp_dns_zone_name, value: 'gcp_dns_zone_name', description: 'The DNS name of the DNS zone.')\ndns_managed_zone = input('dns_managed_zone', value: {\"name\"=>\"example-zone\", \"description\"=>\"example description\", \"dnssec_config_state\"=>\"on\"})\ncontrol 'google_dns_managed_zones-1.0' do\n  impact 1.0\n  title 'google_dns_managed_zones resource test'\n\n  describe google_dns_managed_zones(project: gcp_project_id) do\n    it { should exist }\n    its('zone_names') { should include dns_managed_zone['name'] }\n    its('zone_dns_names') { should include gcp_dns_zone_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dns_resource_record_set.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dns_resource_record_set resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nrecord_set = input('record_set', value: {\n  \"name\": \"backend.my.domain.com.\",\n  \"type\": \"A\",\n  \"ttl\": 300,\n  \"rrdatas1\": \"8.8.8.8\",\n  \"rrdatas2\": \"8.8.4.4\"\n})\nmanaged_zone = input('managed_zone', value: {\n  \"name\": \"inspec-gcp-managed-zone\",\n  \"dns_name\": \"my.domain.com.\",\n  \"description\": \"A test DNS zone\",\n  \"label_key\": \"key\",\n  \"label_value\": \"value\"\n})\ncontrol 'google_dns_resource_record_set-1.0' do\n  impact 1.0\n  title 'google_dns_resource_record_set resource test'\n\n  describe google_dns_resource_record_set(project: gcp_project_id, name: record_set['name'], type: record_set['type'], managed_zone: managed_zone['name']) do\n    it { should exist }\n    its('type') { should eq record_set['type'] }\n    its('ttl') { should eq record_set['ttl'] }\n    its('target') { should include record_set['rrdatas1'] }\n    its('target') { should include record_set['rrdatas2'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_dns_resource_record_sets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_dns_resource_record_sets resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nrecord_set = input('record_set', value: {\n  \"name\": \"backend.my.domain.com.\",\n  \"type\": \"A\",\n  \"ttl\": 300,\n  \"rrdatas1\": \"8.8.8.8\",\n  \"rrdatas2\": \"8.8.4.4\"\n})\nmanaged_zone = input('managed_zone', value: {\n  \"name\": \"inspec-gcp-managed-zone\",\n  \"dns_name\": \"my.domain.com.\",\n  \"description\": \"A test DNS zone\",\n  \"label_key\": \"key\",\n  \"label_value\": \"value\"\n})\ncontrol 'google_dns_resource_record_sets-1.0' do\n  impact 1.0\n  title 'google_dns_resource_record_sets resource test'\n\n  describe google_dns_resource_record_sets(project: gcp_project_id, name: record_set['name'], managed_zone: managed_zone['name']) do\n    its('count') { should eq 3 }\n    its('types') { should include record_set['type'] }\n    its('ttls') { should include record_set['ttl'] }\n    its('targets.flatten') { should include record_set['rrdatas1'] }\n    its('targets.flatten') { should include record_set['rrdatas2'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_filestore_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_filestore_instance resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfilestore_instance = input('filestore_instance', value: {\"name\"=>\"inspecgcp\", \"zone\"=>\"us-central1-b\", \"tier\"=>\"PREMIUM\", \"fileshare_capacity_gb\"=>2660, \"fileshare_name\"=>\"inspecgcp\", \"network_name\"=>\"default\", \"network_mode\"=>\"MODE_IPV4\"})\ncontrol 'google_filestore_instance-1.0' do\n  impact 1.0\n  title 'google_filestore_instance resource test'\n\n  describe google_filestore_instance(project: gcp_project_id, zone: filestore_instance['zone'], name: filestore_instance['name']) do\n    it { should exist }\n    its('tier') { should cmp filestore_instance['tier'] }\n    its('file_shares.count') { should cmp 1 }\n    its('file_shares.first.capacity_gb') { should cmp filestore_instance['fileshare_capacity_gb'] }\n    its('file_shares.first.name') { should cmp filestore_instance['fileshare_name'] }\n    its('networks.count') { should cmp 1 }\n    its('networks.first.network') { should cmp filestore_instance['network_name'] }\n    its('networks.first.modes') { should include filestore_instance['network_mode'] }\n  end\n\n  describe google_filestore_instance(project: gcp_project_id, zone: filestore_instance['zone'], name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_filestore_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_filestore_instances resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\nfilestore_instance = input('filestore_instance', value: {\"name\"=>\"inspecgcp\", \"zone\"=>\"us-central1-b\", \"tier\"=>\"PREMIUM\", \"fileshare_capacity_gb\"=>2660, \"fileshare_name\"=>\"inspecgcp\", \"network_name\"=>\"default\", \"network_mode\"=>\"MODE_IPV4\"})\ncontrol 'google_filestore_instances-1.0' do\n  impact 1.0\n  title 'google_filestore_instances resource test'\n\n  describe google_filestore_instances(project: gcp_project_id, zone: filestore_instance['zone']) do\n    its('tiers') { should include filestore_instance['tier'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_iam_organization_custom_role.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_iam_organization_custom_role resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_organization_iam_custom_role_id = input(:gcp_organization_iam_custom_role_id, value: 'gcp_organization_iam_custom_role_id', description: 'The IAM custom role identifier.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_iam_organization_custom_role-1.0' do\n  impact 1.0\n  title 'google_iam_organization_custom_role resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_iam_organization_custom_role(org_id: gcp_organization_id, name: gcp_organization_iam_custom_role_id) do\n    it { should exist }\n    its('stage') { should eq 'GA' }\n    its('included_permissions') { should eq [\"iam.roles.list\"] }\n  end\n\n  describe google_iam_organization_custom_role(org_id: gcp_organization_id, name: gcp_organization_iam_custom_role_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_iam_organization_custom_roles.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_iam_organization_custom_roles resource.'\n\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_organization_iam_custom_role_id = input(:gcp_organization_iam_custom_role_id, value: 'gcp_organization_iam_custom_role_id', description: 'The IAM custom role identifier.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_iam_organization_custom_roles-1.0' do\n  impact 1.0\n  title 'google_iam_organization_custom_roles resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_iam_organization_custom_roles(org_id: gcp_organization_id) do\n    its('names') { should include \"organizations/#{gcp_organization_id}/roles/#{gcp_organization_iam_custom_role_id}\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_crypto_key resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name, value: 'gcp_kms_key_ring_policy_name', description: 'Key ring name')\ngcp_kms_crypto_key_name_policy = input(:gcp_kms_crypto_key_name_policy, value: 'gcp_kms_crypto_key_name_policy', description: 'Key name')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_kms_crypto_key-1.0' do\n  impact 1.0\n  title 'google_kms_crypto_key resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_kms_crypto_key(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name, name: gcp_kms_crypto_key_name_policy) do\n    it { should exist }\n    its('crypto_key_name') { should cmp gcp_kms_crypto_key_name_policy }\n    its('primary_state') { should eq \"ENABLED\" }\n    its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n    its('next_rotation_time') { should be > Time.now - 100000 }\n    its('create_time') { should be > Time.now - 365*60*60*24*10 }\n  end\n\n  describe google_kms_crypto_key(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name, name: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key_handwritten.rb",
    "content": "title 'Test single GCP KMS Crypto Key'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name,value:'',description:'GCP key ring name to test against.')\ngcp_location = input(:gcp_location, value: '', description: 'The GCP region being used.')\ngcp_kms_crypto_key_name_policy = input(:gcp_kms_crypto_key_name_policy, value: '', description: 'The GCP cryto key name.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources,value:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-kms-crypto-key-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure single GCP KMS Crypto Key has the correct properties.'\n\n  describe google_kms_crypto_key(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name, name: gcp_kms_crypto_key_name_policy) do\n    it { should exist }\n    its('create_time') { should be > Time.now - 365*60*60*24*10 }\n    its('crypto_key_name'){ should eq gcp_kms_crypto_key_name_policy }\n    its('primary_state') { should eq \"ENABLED\" }\n    its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n    its('next_rotation_time') { should be > Time.now - 100000 }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key_iam_binding.rb",
    "content": "title 'GCP KMS Crypto Key IAM Binding Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: '', description: 'The GCP region being used.')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name,value:'',description:'GCP key ring name to test against.')\ngcp_kms_crypto_key_name_policy = input(:gcp_kms_crypto_key_name_policy, value: '', description: 'The GCP cryto key name.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources,value:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_kms_crypto_key_name_binding = input(:gcp_kms_crypto_key_name_binding,value:'',description:'GCP key ring name to test against.')\ngcp_kms_key_ring_binding_member_name = input(:gcp_kms_key_ring_binding_member_name, value: '', description: 'The GCP cryto key name.')\n\n\ncontrol 'gcp-crypto-key-iam-binding-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure single KMS Crypto Key IAM Binding has the correct properties'\n\n  describe google_kms_crypto_key_iam_binding(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name, crypto_key_name: gcp_kms_crypto_key_name_binding, role: \"roles/editor\") do\n    it { should exist }\n    its('members.count') { should eq 1}\n  end\n\n  describe google_kms_crypto_key_iam_binding(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name, crypto_key_name: gcp_kms_crypto_key_name_policy, role: \"roles/editor\") do\n    it { should exist }\n    its('members.count') { should eq 1}\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key_iam_policy.rb",
    "content": "title 'GCP KMS Crypto Key IAM Bindings Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: '', description: 'The GCP region being used.')\ngcp_kms_key_ring_binding_member_name = input(:gcp_kms_key_ring_binding_member_name,value:'',description:'GCP key ring name to test against.')\ngcp_kms_crypto_key_name_binding = input(:gcp_kms_crypto_key_name_binding,value:'',description:'Key in key ring to test.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources,value:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-kms-crypto-key-iam-bindings-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure GCP KMS Crypto Key IAM Bindings have the correct properties in bulk'\n\n  describe google_kms_crypto_key_iam_policy(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name, crypto_key_name: gcp_kms_crypto_key_name_binding) do\n    it { should exist }\n    its('count') { should be <= 100}\n    its('iam_binding_roles') { should include \"roles/editor\" }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key_version.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_crypto_key_version resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'ppradhan', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'us-central1', description: 'GCP location')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name, value: 'gcp-inspec-kms-key-ring-aytsuncucfsfrvochsuubyovf', description: 'Key ring name')\ngcp_kms_crypto_key = input(:gcp_kms_crypto_key, value: 'gcp-inspec-kms-crypto-key-policy-rbgvmohbidtgdzfatbzwckttd', description: 'Key name')\ngcp_kms_crypto_key_version = input(:gcp_kms_crypto_key_version, value: '1', description: 'Version name')\ncontrol 'google_kms_crypto_key_version-1.0' do\n  impact 1.0\n  title 'google_kms_crypto_key_version resource test'\n\n  describe google_kms_crypto_key_version(project: gcp_project_id, location: gcp_location, key_ring: gcp_kms_key_ring_policy_name, crypto_key: gcp_kms_crypto_key, name: gcp_kms_crypto_key_version) do\n    it { should exist }\n    its('crypto_key_name') { should cmp gcp_kms_crypto_key }\n    its('primary_state') { should eq \"ENABLED\" }\n    its('purpose') { should eq \"ENCRYPT_DECRYPT\" }\n    its('next_rotation_time') { should be > Time.now - 100000 }\n    its('create_time') { should be > Time.now - 365*60*60*24*10 }\n  end\n\n  describe google_kms_crypto_key_version(project: gcp_project_id, location: gcp_location, key_ring: gcp_kms_key_ring_policy_name, crypto_key: gcp_kms_crypto_key, name: gcp_kms_crypto_key_version) do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_key_versions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_crypto_key_versions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'ppradhan', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'us-central1', description: 'GCP location')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name, value: 'gcp-inspec-kms-key-ring-aytsuncucfsfrvochsuubyovf', description: 'Key ring name')\ngcp_kms_crypto_key = input(:gcp_kms_crypto_key, value: 'gcp-inspec-kms-crypto-key-policy-rbgvmohbidtgdzfatbzwckttd', description: 'Key name')\ngcp_kms_crypto_key_version = input(:gcp_kms_crypto_key_version, value: '1', description: 'Version name')\n\ncontrol 'google_kms_crypto_key_versions-1.0' do\n  impact 1.0\n  title 'google_kms_crypto_key_versions resource test'\n\n  describe google_kms_crypto_key_versions(project: gcp_project_id, location: gcp_location, key_ring: gcp_kms_key_ring_policy_name, crypto_key: gcp_kms_crypto_key) do\n    its('count') { should be >= 1 }\n    its('crypto_key_names') { should include gcp_kms_crypto_key_name_policy }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_keys.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_crypto_keys resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name, value: 'gcp_kms_key_ring_policy_name', description: 'Key ring name')\ngcp_kms_crypto_key_name_policy = input(:gcp_kms_crypto_key_name_policy, value: 'gcp_kms_crypto_key_name_policy', description: 'Key name')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_kms_crypto_keys-1.0' do\n  impact 1.0\n  title 'google_kms_crypto_keys resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_kms_crypto_keys(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name) do\n    its('count') { should be >= 1 }\n    its('crypto_key_names') { should include gcp_kms_crypto_key_name_policy }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_crypto_keys_handwritten.rb",
    "content": "title 'GCP KMS Crypto Keys Properties'\n\ngcp_project_id = input(:gcp_project_id, value: '', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: '', description: 'The GCP region being used.')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name,value:'',description:'GCP key ring name to test against.')\ngcp_kms_crypto_key_name_policy = input(:gcp_kms_crypto_key_name_policy, value: '', description: 'The GCP cryto key name.')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources,value:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_kms_crypto_key_name_binding = input(:gcp_kms_crypto_key_name_binding,value:'',description:'GCP key ring name to test against.')\ngcp_kms_key_ring_binding_member_name = input(:gcp_kms_key_ring_binding_member_name, value: '', description: 'The GCP cryto key name.')\n\n\ncontrol 'gcp-crypto-keys-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure KMS crypto keys have the correct properties in bulk'\n\n  describe google_kms_crypto_keys(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name) do\n    it { should exist }\n    its('count') { should eq 1}\n    its ('crypto_key_names') { should include gcp_kms_crypto_key_name_policy }\n  end\n\n  describe google_kms_crypto_keys(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name) do\n    it { should exist }\n    its('count') { should eq 1}\n    its ('crypto_key_names') { should include gcp_kms_crypto_key_name_binding }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_ekm_connection.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_ekm_connection resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_kms_connection_name = input(:gcp_kms_connection_name, value: 'gcp_kms_connection_name', description: 'GCP location')\ncontrol 'google_kms_ekm_connection-1.0' do\n  impact 1.0\n  title 'google_kms_ekm_connection resource test'\n\n  describe google_kms_ekm_connection(project: gcp_project_id, location: gcp_location, name: gcp_kms_connection_name) do\n    it { should exist }\n    its('name') { should cmp gcp_kms_connection_name }\n  end\n\n  describe google_kms_ekm_connection(project: gcp_project_id, location: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_ekm_connections.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_ekm_connections resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_kms_connection_name = input(:gcp_kms_connection_name, value: 'gcp_kms_connection_name', description: 'GCP location')\ncontrol 'google_kms_ekm_connections-1.0' do\n  impact 1.0\n  title 'google_kms_ekm_connections resource test'\n\n  describe google_kms_ekm_connections(project: gcp_project_id, location: gcp_location) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_key_ring resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_kms_key_ring_policy_name = input(:gcp_kms_key_ring_policy_name, value: 'gcp_kms_key_ring_policy_name', description: 'Key ring name')\ngcp_enable_privileged_resources = input(:gcp_enable_privileged_resources, value: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = input(:gcp_organization_id, value: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_kms_key_ring-1.0' do\n  impact 1.0\n  title 'google_kms_key_ring resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_kms_key_ring(project: gcp_project_id, location: gcp_location, name: gcp_kms_key_ring_policy_name) do\n    it { should exist }\n    its('create_time') { should be > Time.now - 365*60*60*24*10 }\n    its('key_ring_name'){ should eq gcp_kms_key_ring_policy_name }\n    its('key_ring_url'){ should match gcp_kms_key_ring_policy_name }\n  end\n\n  describe google_kms_key_ring(project: gcp_project_id, location: gcp_location, name: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring_handwritten.rb",
    "content": "title 'Test single GCP KMS Key Ring'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: '', description: 'The GCP region being used.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_kms_key_ring_policy_name = attribute(:gcp_kms_key_ring_policy_name,default:'',description:'GCP key ring name to test against.')\n\ncontrol 'gcp-key-ring-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure single KMS Key Ring has the correct properties.'\n\n  describe google_kms_key_ring(project: gcp_project_id, location: gcp_location, name: gcp_kms_key_ring_policy_name) do\n    it { should exist }\n    its('create_time') { should be > Time.now - 365*60*60*24*10 }\n    its('key_ring_name'){ should eq gcp_kms_key_ring_policy_name }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring_iam_binding.rb",
    "content": "title 'Test single GCP KMS Key Ring IAM Binding'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_kms_key_ring_policy_name = attribute(:gcp_kms_key_ring_policy_name,default:'',description:'GCP key ring name to test against.')\ngcp_kms_key_ring_binding_member_name = attribute(:gcp_kms_key_ring_binding_member_name,default:'',description:'GCP key ring name to test against.')\ngcp_location = attribute(:gcp_location, default: '', description: 'The GCP region being used.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-kms-key-ring-iam-binding-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure single GCP GCP KMS Key Ring IAM bindings have the correct properties.  Examples below include attaching an IAM policy, binding and member to a key ring.'\n\n  describe google_kms_key_ring_iam_binding(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_policy_name, role: \"roles/editor\") do\n    it { should exist }\n    its ('members.count'){ should eq 1 }\n  end\n\n  describe google_kms_key_ring_iam_binding(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name, role: \"roles/editor\") do\n    it { should exist }\n    its ('members.count'){ should eq 1 }\n  end\n\n  describe google_kms_key_ring_iam_binding(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name, role: \"roles/owner\") do\n    it { should exist }\n    its ('members.count'){ should eq 1 }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring_iam_policy.rb",
    "content": "title 'GCP KMS Key Ring IAM Binding Properties'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: '', description: 'The GCP region being used.')\ngcp_kms_key_ring_binding_member_name = attribute(:gcp_kms_key_ring_binding_member_name,default:'',description:'GCP key ring name to test against.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-kms-key-ring-iam-bindings-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure GCP KMS Key Ring IAM bindings have the correct properties in bulk'\n\n  describe google_kms_key_ring_iam_policy(project: gcp_project_id, location: gcp_location, key_ring_name: gcp_kms_key_ring_binding_member_name) do\n    it { should exist }\n    its('count') { should be <= 100}\n    its('iam_binding_roles') { should include \"roles/owner\" }\n    its('iam_binding_roles') { should include \"roles/editor\" }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring_import_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_key_ring_import_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_name = input(:gcp_name, value: 'gcp_name', description: 'GCP Name')\ncontrol 'google_kms_key_ring_import_job-1.0' do\n  impact 1.0\n  title 'google_kms_key_ring_import_job resource test'\n\n  describe google_kms_key_ring_import_job(project: gcp_project_id, location: gcp_location, name: gcp_name) do\n    it { should exist }\n  end\n\n  describe google_kms_key_ring_import_job(project: gcp_project_id, location: 'nonexistent', name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_ring_import_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_key_ring_import_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ngcp_name = input(:gcp_name, value: 'gcp_name', description: 'GCP Name')\ncontrol 'google_kms_key_ring_import_jobs-1.0' do\n  impact 1.0\n  title 'google_kms_key_ring_import_jobs resource test'\n\n  describe google_kms_key_ring_import_job(project: gcp_project_id,  location: gcp_location) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_rings.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_key_rings resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'GCP location')\ngcp_kms_key_ring_policy_name = attribute(:gcp_kms_key_ring_policy_name, default: 'gcp_kms_key_ring_policy_name', description: 'Key ring name')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_kms_key_rings-1.0' do\n  impact 1.0\n  title 'google_kms_key_rings resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_kms_key_rings(project: gcp_project_id, location: gcp_location) do\n    its('key_ring_names'){ should include gcp_kms_key_ring_policy_name }\n  end\n\n  describe.one do\n    google_kms_key_rings(project: gcp_project_id, location: gcp_location).key_ring_urls do |url|\n      describe url do\n        it { should match gcp_kms_key_ring_policy_name }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_key_rings_handwritten.rb",
    "content": "title 'GCP KMS Key Rings Properties'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: '', description: 'The GCP region being used.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_kms_key_ring_policy_name = attribute(:gcp_kms_key_ring_policy_name,default:'',description:'GCP key ring name to test against.')\ngcp_kms_key_ring_binding_member_name = attribute(:gcp_kms_key_ring_binding_member_name,default:'',description:'GCP key ring name to test against.')\n\ncontrol 'gcp-key-rings-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure KMS key rings have the correct properties in bulk'\n\n  describe google_kms_key_rings(project: gcp_project_id, location: gcp_location) do\n    it { should exist }\n    its ('key_ring_names') { should include gcp_kms_key_ring_policy_name }\n    its ('key_ring_names') { should include gcp_kms_key_ring_binding_member_name }\n  end\n\nend"
  },
  {
    "path": "test/integration/verify/controls/google_kms_location.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_location resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ncontrol 'google_kms_location-1.0' do\n  impact 1.0\n  title 'google_kms_location resource test'\n\n  describe google_kms_location(project: gcp_project_id, location: gcp_location) do\n    it { should exist }\n  end\n\n  describe google_kms_location(project: gcp_project_id, location: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_kms_locations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_kms_locations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = input(:gcp_location, value: 'gcp_location', description: 'GCP location')\ncontrol 'google_kms_locations-1.0' do\n  impact 1.0\n  title 'google_kms_locations resource test'\n\n  describe google_kms_locations(project: gcp_project_id) do\n    it { should exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_lb_firewall_ip_ranges.rb",
    "content": "title 'Firewall Rule Properties'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\n\ncontrol 'google-lb-internal-firewall-rule-ip-ranges-1.0' do\n\n  impact 1.0\n  title 'Ensure that the Firewall Rule has been configured correctly with extra focus on expected IP ranges'\n\n  describe google_compute_firewall(project: gcp_project_id, name: \"vm-hc-inspec-gcp\") do\n    its('name') { should eq \"vm-hc-inspec-gcp\" }\n    # For the currently in scope rule, SSH should not be allowed\n    its('allowed_ssh?')  { should be false }\n    # For the currently in scope rule, HTTP should be allowed\n    its('allowed_http?')  { should be true }\n\n    # equivalently to the above helpers\n    it { should_not allow_port_protocol(\"22\", \"tcp\") }\n    it { should allow_port_protocol(\"80\", \"tcp\") }\n\n    # the rule direction - ingress/egress\n    its('direction') { should eq \"INGRESS\" }\n\n    # source IP range list for the rule e.g. these are hard-coded in the underlying terraform template\n    # source_ranges = [\"130.211.0.0/22\", \"35.191.0.0/16\"]\n\n    # using the expected property directly\n    its('source_ranges') { should_not eq [\"0.0.0.0/0\"] }\n\n    # using the IP range helpers\n    #\n    # ensure rule is not exposed to the world\n    it { should_not allow_ip_ranges [\"0.0.0.0/0\"] }\n    # test for single known range being present\n    it { should allow_ip_ranges [\"130.211.0.0/22\"] }\n    # test for two known ranges being present\n    it { should allow_ip_ranges [\"130.211.0.0/22\",\"35.191.0.0/16\"] }\n    # stricter, enforce only those ip ranges are present\n    it { should allow_ip_ranges_only [\"130.211.0.0/22\",\"35.191.0.0/16\"] }\n    # ensure partial match fails\n    it { should_not allow_ip_ranges_only [\"130.211.0.0/22\"] }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_lb_firewall_source_target_tags.rb",
    "content": "title 'Firewall Rule Properties'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\n\ncontrol 'google-lb-internal-firewall-rule-target-tags-1.0' do\n\n  impact 1.0\n  title 'Ensure that the Firewall Rule has been configured correctly and has expected source and target tags'\n\n  describe google_compute_firewall(project: gcp_project_id, name: \"inspec-gcp-tag-test-fw\") do\n    its('name') { should eq \"inspec-gcp-tag-test-fw\" }\n    # For the currently in scope rule, SSH should not be allowed\n    its('allowed_ssh?')  { should be false }\n    # For the currently in scope rule, HTTP should not be allowed\n    its('allowed_http?')  { should be true }\n\n    # equivalently to the above helpers\n    it { should_not allow_port_protocol(\"22\", \"tcp\") }\n    it { should allow_port_protocol(\"80\", \"tcp\") }\n\n    # the rule direction - ingress/egress\n    its('direction') { should eq \"INGRESS\" }\n\n    # now let's specifically concentrate on source and target tags for this rule\n    # here we know the following should be true:\n    #     source tags => [\"allow-gcp-inspec-app-mig1\"]\n    #     target tags => [\"allow-gcp-inspec-app-mig2\", \"allow-gcp-inspec-app-mig3\"]\n    # allow single tag - other tags present\n    it { should allow_target_tags [\"allow-gcp-inspec-app-mig2\"] }\n    # allow only specified tagss\n    it { should allow_target_tags_only [\"allow-gcp-inspec-app-mig2\",\"allow-gcp-inspec-app-mig3\"] }\n    # should not allow non-existing tag\n    it { should_not allow_target_tags [\"not-present\"] }\n    # similarly for source tags\n    it { should_not allow_source_tags [\"not-present\"] }\n    # allow specified tag - could be others present\n    it { should allow_source_tags [\"allow-gcp-inspec-app-mig1\"] }\n    # allow only specified tag\n    it { should allow_source_tags_only [\"allow-gcp-inspec-app-mig1\"] }\n    # not allow a non-existing tag\n    it { should_not allow_source_tags_only [\"allow-gcp-inspec-app-mig1\",\"not_existing\"] }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_logging_folder_exclusion.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_folder_exclusion resource.'\n\nfolder_exclusion = attribute('folder_exclusion', default: {\"name\"=>\"inspec-folder-exclusion\", \"description\"=>\"My folder exclusion description\", \"filter\"=>\"resource.type = gce_instance AND severity <= DEBUG\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_folder_exclusion-1.0' do\n  impact 1.0\n  title 'google_logging_folder_exclusion resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  # Getting folder exclusions is complicated due to the name being generated by the server.\n  # This can be drastically simplified if you have the name when writing the test\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").names.each do |folder_name|\n      # name on a folder is in the form `folders/12345`\n      google_logging_folder_exclusions(folder: folder_name.split('/')[1]).names.each do |exclusion_name|\n        describe google_logging_folder_exclusion(folder: folder_name.split('/')[1], name: exclusion_name) do\n          its('name'){ should cmp folder_exclusion['name'] }\n          its('description'){ should cmp folder_exclusion['description'] }\n          its('filter'){ should cmp folder_exclusion['filter'] }\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_folder_exclusions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_folder_exclusions resource.'\n\nfolder_exclusion = attribute('folder_exclusion', default: {\"name\"=>\"inspec-folder-exclusion\", \"description\"=>\"My folder exclusion description\", \"filter\"=>\"resource.type = gce_instance AND severity <= DEBUG\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_folder_exclusions-1.0' do\n  impact 1.0\n  title 'google_logging_folder_exclusions resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  # Getting folder exclusions is complicated due to the name being generated by the server.\n  # This can be drastically simplified if you have the name when writing the test\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").names.each do |name|\n      # name on a folder is in the form `folders/12345`\n      describe google_logging_folder_exclusions(folder: name.split('/')[1]) do\n        its('names'){ should include folder_exclusion['name'] }\n        its('descriptions'){ should include folder_exclusion['description'] }\n        its('filters'){ should include folder_exclusion['filter'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_folder_log_sink.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_folder_log_sink resource.'\n\nfolder_sink = attribute('folder_sink', default: {\"name\"=>\"inspec-gcp-folder-sink\", \"filter\"=>\"resource.type = gce_instance AND severity >= ERROR\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_folder_log_sink-1.0' do\n  impact 1.0\n  title 'google_logging_folder_log_sink resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  # Getting folder sinks is complicated due to the name being generated by the server.\n  # This can be drastically simplified if you have the folder name when writing the test\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").names.each do |folder_name|\n      # name on a folder is in the form `folders/12345`\n      describe google_logging_folder_log_sink(folder: folder_name.split('/')[1], name: folder_sink['name']) do\n        it { should exist }\n        its('filter') { should cmp folder_sink['filter'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_folder_log_sinks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_folder_log_sinks resource.'\n\nfolder_sink = attribute('folder_sink', default: {\"name\"=>\"inspec-gcp-folder-sink\", \"filter\"=>\"resource.type = gce_instance AND severity >= ERROR\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of the folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_folder_log_sinks-1.0' do\n  impact 1.0\n  title 'google_logging_folder_log_sinks resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  # Getting folder sinks is complicated due to the name being generated by the server.\n  # This can be drastically simplified if you have the folder name when writing the test\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").names.each do |folder_name|\n      # name on a folder is in the form `folders/12345`\n      describe google_logging_folder_log_sinks(folder: folder_name.split('/')[1]) do\n        its('names') { should include folder_sink['name'] }\n        its('filters') { should include folder_sink['filter'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_organization_log_sink.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_organization_log_sink resource.'\n\norg_sink = attribute('org_sink', default: {\"name\"=>\"inspec-gcp-org-sink\", \"filter\"=>\"resource.type = gce_instance\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_organization_log_sink-1.0' do\n  impact 1.0\n  title 'google_logging_organization_log_sink resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_logging_organization_log_sink(organization: gcp_organization_id, name: org_sink['name']) do\n    it { should exist }\n    its('filter') { should cmp org_sink['filter'] }\n  end\n\n  describe google_logging_organization_log_sink(organization: gcp_organization_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_organization_log_sinks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_organization_log_sinks resource.'\n\norg_sink = attribute('org_sink', default: {\"name\"=>\"inspec-gcp-org-sink\", \"filter\"=>\"resource.type = gce_instance\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_logging_organization_log_sinks-1.0' do\n  impact 1.0\n  title 'google_logging_organization_log_sinks resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_logging_organization_log_sinks(organization: gcp_organization_id) do\n    its('names') { should include org_sink['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_project_exclusion.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_project_exclusion resource.'\n\nproject_exclusion = attribute('project_exclusion', default: {\"name\"=>\"inspec-project-exclusion\", \"description\"=>\"My project exclusion description\", \"filter\"=>\"resource.type = gce_instance AND severity <= DEBUG\"})\ngcp_project_id = attribute(:gcp_project_id, default: gcp_project_id, description: 'The project identifier')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_logging_project_exclusion-1.0' do\n  impact 1.0\n  title 'google_logging_project_exclusion resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_logging_project_exclusion(project: gcp_project_id, name: project_exclusion['name']) do\n  \tit { should exist }\n    its('description'){ should cmp project_exclusion['description'] }\n    its('filter'){ should cmp project_exclusion['filter'] }\n  end\n\n  describe google_logging_project_exclusion(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_project_exclusions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_project_exclusions resource.'\n\nproject_exclusion = attribute('project_exclusion', default: {\"name\"=>\"inspec-project-exclusion\", \"description\"=>\"My project exclusion description\", \"filter\"=>\"resource.type = gce_instance AND severity <= DEBUG\"})\ngcp_project_id = attribute(:gcp_project_id, default: gcp_project_id, description: 'The project identifier')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_logging_project_exclusions-1.0' do\n  impact 1.0\n  title 'google_logging_project_exclusions resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_logging_project_exclusions(project: gcp_project_id) do\n    its('names'){ should include project_exclusion['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_project_sink.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_project_sink resource.'\n\nproject_sink = attribute('project_sink', default: {\"name\"=>\"inspec-gcp-org-sink\", \"filter\"=>\"resource.type = gce_instance AND severity = DEBUG\"})\ngcp_project_id = attribute(:gcp_project_id, default: gcp_project_id, description: 'The project id.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_logging_project_sink-1.0' do\n  impact 1.0\n  title 'google_logging_project_sink resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_logging_project_sink(project: gcp_project_id, name: project_sink['name']) do\n    it { should exist }\n    its('filter') { should cmp project_sink['filter'] }\n  end\n\n  describe google_logging_project_sink(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_logging_project_sinks.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_logging_project_sinks resource.'\n\nproject_sink = attribute('project_sink', default: {\"name\"=>\"inspec-gcp-org-sink\", \"filter\"=>\"resource.type = gce_instance AND severity = DEBUG\"})\ngcp_project_id = attribute(:gcp_project_id, default: gcp_project_id, description: 'The project id.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_logging_project_sinks-1.0' do\n  impact 1.0\n  title 'google_logging_project_sinks resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_logging_project_sinks(project: gcp_project_id) do\n    its('names') { should include project_sink['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_memcache_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_memcache_instance resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project region.')\nmemcache_instance = attribute('memcache_instance', default: {\n  \"name\": \"mem-instance\"\n}, description: 'Memcache settings')\ncontrol 'google_memcache_instance-1.0' do\n  impact 1.0\n  title 'google_memcache_instance resource test'\n\n  describe google_memcache_instance(project: gcp_project_id, region: gcp_location, name: memcache_instance['name']) do\n    it { should exist }\n    its('node_count') { should cmp 1 }\n  end\n\n  describe google_memcache_instance(project: gcp_project_id, region: gcp_location, name: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_memcache_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_memcache_instances resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project region.')\nmemcache_instance = attribute('memcache_instance', default: {\n  \"name\": \"mem-instance\"\n}, description: 'Memcache settings')\ncontrol 'google_memcache_instances-1.0' do\n  impact 1.0\n  title 'google_memcache_instances resource test'\n\n  describe google_memcache_instances(project: gcp_project_id, region: gcp_location) do\n  \tits('count') { should be >= 1 }\n    its('node_counts') { should include 1 }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_ml_engine_model.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_ml_engine_model resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project region.')\nml_model = attribute('ml_model', default: {\n  \"name\": \"ml_model\",\n  \"region\": \"us-central1\",\n  \"description\": \"My awesome ML model\",\n  \"online_prediction_logging\": true,\n  \"online_prediction_console_logging\": true\n}, description: 'Machine learning model definition')\ncontrol 'google_ml_engine_model-1.0' do\n  impact 1.0\n  title 'google_ml_engine_model resource test'\n\n  describe google_ml_engine_model(project: gcp_project_id, name: ml_model['name']) do\n    it { should exist }\n    its('description') { should cmp ml_model['description'] }\n    its('regions') { should include ml_model['region'] }\n    its('online_prediction_logging') { should cmp ml_model['online_prediction_logging'] }\n    its('online_prediction_console_logging') { should cmp ml_model['online_prediction_console_logging'] }\n  end\n\n  describe google_ml_engine_model(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_ml_engine_models.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_ml_engine_models resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project region.')\nml_model = attribute('ml_model', default: {\n  \"name\": \"ml_model\",\n  \"region\": \"us-central1\",\n  \"description\": \"My awesome ML model\",\n  \"online_prediction_logging\": true,\n  \"online_prediction_console_logging\": true\n}, description: 'Machine learning model definition')\ncontrol 'google_ml_engine_models-1.0' do\n  impact 1.0\n  title 'google_ml_engine_models resource test'\n\n  describe google_ml_engine_models(project: gcp_project_id) do\n    its('descriptions') { should include ml_model['description'] }\n    its('online_prediction_loggings') { should include ml_model['online_prediction_logging'] }\n    its('online_prediction_console_loggings') { should include ml_model['online_prediction_console_logging'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_monitoring_group.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_monitoring_group resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ngroup = input('group', value: {\n  \"name\": \"projects/ppradhan/groups/1973775459523949291\",\n  \"display_name\": \"inspec-test-group\",\n  \"parent_name\": \"projects/ppradhan\",\n  \"filter\": \"resource.metadata.name = has_substring(\\\"inspec\\\")\"\n}, description: 'group description')\ncontrol 'google_monitoring_group-1.0' do\n  impact 1.0\n  title 'google_monitoring_group resource test'\n\n  describe google_monitoring_group(name: group['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp group['name'] }\n  \tits('display_name') { should cmp group['display_name'] }\n  \tits('filter') { should cmp group['filter'] }\n  end\n\n  describe google_monitoring_group(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_monitoring_groups.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_monitoring_groups resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\ngroup = input('group', value: {\n  \"name\": \"projects/ppradhan/groups/1973775459523949291\",\n  \"display_name\": \"inspec-test-group\",\n  \"parent_name\": \"projects/ppradhan\",\n  \"filter\": \"resource.metadata.name = has_substring(\\\"inspec\\\")\"\n}, description: 'group description')\ncontrol 'google_monitoring_groups-1.0' do\n  impact 1.0\n  title 'google_monitoring_groups resource test'\n\n    describe google_monitoring_groups(name: group['name']) do\n      it { should exist }\n      its('names') { should include group['name'] }\n      its('display_names') { should include group['display_name'] }\n      its('filters') { should include group['filter'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_organization.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_organization resource.'\n\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_organization-1.0' do\n  impact 1.0\n  title 'google_organization resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_organization(name: \"organizations/#{gcp_organization_id}\") do\n    its('name') { should eq \"organizations/#{gcp_organization_id}\" }\n    its('lifecycle_state') { should cmp 'ACTIVE' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_organizations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_organizations resource.'\n\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_organizations-1.0' do\n  impact 1.0\n  title 'google_organizations resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n\n  describe google_organizations do\n    its('names') { should include \"organizations/#{gcp_organization_id}\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_folder_constraints.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_folder_constraints resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  folder_constraint = input('folder_constraint', value: {\n  \"parent\": \"organizations/827482578277\",\n  \"name\": \"organizations/827482578277/constraints/ainotebooks.accessMode\",\n  \"displayName\": \"Disable Create Default Service Account (Cloud Build)\",\n  \"description\": \"This boolean constraint, when enforced, prevents the legacy Cloud Build service account from being created.\",\n  \"constraintDefault\": \"DENY\",\n  \"listConstraint\": {\n    \"supportsUnder\": true\n  }\n}, description: 'folder_constraint description')\ncontrol 'google_orgpolicy_folder_constraints-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_folder_constraints resource test'\n\n    describe google_orgpolicy_folder_constraints(parent: folder_constraint['parent']) do\n      it { should exist }\n      its('names') { should include folder_constraint['name']}\n      its('display_names') { should include folder_constraint['displayName']}\n      its('descriptions') { should include folder_constraint['description']}\n      its('constraint_defaults') { should include folder_constraint['constraintDefault']}\n      its('list_constraints.first.supports_under') { should be true }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_folder_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_folder_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  folder_policy = input('folder_policy', value: {\n  \"name\": \"dataproc.enforceComputeDefaultServiceAccountCheck\",\n  \"parent\": \"organizations/827482578277\"\n}, description: 'folder_policy description')\ncontrol 'google_orgpolicy_folder_policies-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_folder_policies resource test'\n\n    describe google_orgpolicy_folder_policies(parent: folder_policy['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_folder_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_folder_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  folder_policy = input('folder_policy', value: {\n  \"name\": \"dataproc.enforceComputeDefaultServiceAccountCheck\",\n  \"parent\": \"organizations/827482578277\"\n}, description: 'folder_policy description')\ncontrol 'google_orgpolicy_folder_policy-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_folder_policy resource test'\n\n  describe google_orgpolicy_folder_policy(parent: folder_policy['parent'], name: folder_policy['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp organization_policy['name'] }\n  end\n\n  describe google_orgpolicy_folder_policy(parent: folder_policy['parent'], name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_organization_constraints.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_organization_constraints resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_constraint = input('organization_constraint', value: {\n  \"parent\": \"organizations/827482578277\",\n  \"name\": \"organizations/827482578277/constraints/ainotebooks.accessMode\",\n  \"displayName\": \"Disable Create Default Service Account (Cloud Build)\",\n  \"description\": \"This boolean constraint, when enforced, prevents the legacy Cloud Build service account from being created.\",\n  \"constraintDefault\": \"DENY\",\n  \"listConstraint\": {\n    \"supportsUnder\": true\n  }\n}, description: 'organization_constraint description')\ncontrol 'google_orgpolicy_organization_constraints-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_organization_constraints resource test'\n\n    describe google_orgpolicy_organization_constraints(parent: organization_constraint['parent']) do\n      it { should exist }\n      its('names') { should include organization_constraint['name']}\n      its('display_names') { should include organization_constraint['displayName']}\n      its('descriptions') { should include organization_constraint['description']}\n      its('constraint_defaults') { should include organization_constraint['constraintDefault']}\n      its('list_constraints.first.supports_under') { should be true }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_organization_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_organization_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_policy = input('organization_policy', value: {\n  \"name\": \"dataproc.enforceComputeDefaultServiceAccountCheck\",\n  \"parent\": \"organizations/827482578277\"\n}, description: 'organization_policy description')\ncontrol 'google_orgpolicy_organization_policies-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_organization_policies resource test'\n\n    describe google_orgpolicy_organization_policies(parent: organization_policy['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_organization_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_organization_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  organization_policy = input('organization_policy', value: {\n  \"name\": \"dataproc.enforceComputeDefaultServiceAccountCheck\",\n  \"parent\": \"organizations/827482578277\"\n}, description: 'organization_policy description')\ncontrol 'google_orgpolicy_organization_policy-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_organization_policy resource test'\n\n  describe google_orgpolicy_organization_policy(parent: organization_policy['parent'], name: organization_policy['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp organization_policy['name'] }\n  end\n\n  describe google_orgpolicy_organization_policy(parent: organization_policy['parent'], name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_project_constraints.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_project_constraints resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\norganization_constraint = input('organization_constraint', value: {\n  \"parent\": \"projects/ppradhan\",\n  \"name\": \"projects/ppradhan/constraints/ainotebooks.accessMode\",\n  \"displayName\": \"Disable Create Default Service Account (Cloud Build)\",\n  \"description\": \"This boolean constraint, when enforced, prevents the legacy Cloud Build service account from being created.\",\n  \"constraintDefault\": \"DENY\",\n  \"listConstraint\": {\n    \"supportsUnder\": true\n  }, description: 'project_constraint description')\ncontrol 'google_orgpolicy_project_constraints-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_project_constraints resource test'\n\n  describe google_orgpolicy_project_constraints(parent: organization_constraint['parent']) do\n    it { should exist }\n    its('names') { should include organization_constraint['name']}\n    its('display_names') { should include organization_constraint['displayName']}\n    its('descriptions') { should include organization_constraint['description']}\n    its('constraint_defaults') { should include organization_constraint['constraintDefault']}\n    its('list_constraints.first.supports_under') { should be nil}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_project_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_project_policies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_policy = input('project_policy', value: {\n  \"parent\": \"projects/583826338486\",\n  \"name\": \"iam.allowServiceAccountCredentialLifetimeExtension\"\n}, description: 'project_policy description')\ncontrol 'google_orgpolicy_project_policies-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_project_policies resource test'\n\n    describe google_orgpolicy_project_policies(parent: project_policy['parent']) do\n      it { should exist }\n      its('name'){ should cmp project_policy['name']}\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_orgpolicy_project_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_orgpolicy_project_policy resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  project_policy = input('project_policy', value: {\n  \"parent\": \"projects/583826338486\",\n  \"name\": \"iam.allowServiceAccountCredentialLifetimeExtension\"\n}, description: 'project_policy description')\ncontrol 'google_orgpolicy_project_policy-1.0' do\n  impact 1.0\n  title 'google_orgpolicy_project_policy resource test'\n\n  describe google_orgpolicy_project_policy(parent: project_policy['parent'],name: project_policy['name']) do\n  \tit { should exist }\n    its('name'){ should cmp project_policy['name']}\n  end\n\n  describe google_orgpolicy_project_policy(parent: project_policy['parent'],name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_project-1.0' do\n  impact 1.0\n  title 'google_project resource test'\n\n  describe google_project(project: gcp_project_id) do\n    it { should exist }\n    its('project_id') { should cmp gcp_project_id }\n    its('lifecycle_state') { should cmp 'ACTIVE' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_alert_policies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_alert_policies resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nalert_policy = attribute('alert_policy', default: {\n  \"display_name\": \"Display\",\n  \"combiner\": \"OR\",\n  \"condition_display_name\": \"condition\",\n  \"condition_filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n  \"condition_duration\": \"60s\",\n  \"condition_comparison\": \"COMPARISON_GT\"\n}, description: 'Alert Policy description')\ncontrol 'google_project_alert_policies-1.0' do\n  impact 1.0\n  title 'google_project_alert_policies resource test'\n\n  describe google_project_alert_policies(project: gcp_project_id) do\n    it { should exist }\n    its('policy_display_names') { should include alert_policy['display_name']}\n    its('combiners') { should include alert_policy['combiner']}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_alert_policy.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_alert_policy resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nalert_policy = attribute('alert_policy', default: {\n  \"display_name\": \"Display\",\n  \"combiner\": \"OR\",\n  \"condition_display_name\": \"condition\",\n  \"condition_filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n  \"condition_duration\": \"60s\",\n  \"condition_comparison\": \"COMPARISON_GT\"\n}, description: 'Alert Policy description')\ncontrol 'google_project_alert_policy-1.0' do\n  impact 1.0\n  title 'google_project_alert_policy resource test'\n\n  describe.one do\n    google_project_alert_policies(project: gcp_project_id).policy_names do |policy_name|\n      describe google_project_alert_policy(project: gcp_project_id, name: policy_name) do\n        it { should exist }\n        its('display_name') { should cmp alert_policy['display_name']}\n        its('combiner') { should cmp alert_policy['combiner']}\n        it { should be_enabled }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_iam_binding.rb",
    "content": "title 'Test single GCP project IAM Binding'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-project-iam-binding-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure single GCP project IAM binding has the correct properties.'\n\n  describe google_project_iam_binding(project: gcp_project_id, role: \"roles/compute.admin\") do\n    it { should exist }\n    its ('members.count'){ should be >= 1 }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_project_iam_custom_role.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_iam_custom_role resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_project_iam_custom_role_id = attribute(:gcp_project_iam_custom_role_id, default: 'gcp_project_iam_custom_role_id', description: 'The IAM custom role identifier.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_project_iam_custom_role-1.0' do\n  impact 1.0\n  title 'google_project_iam_custom_role resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_project_iam_custom_role(project: gcp_project_id, name: gcp_project_iam_custom_role_id) do\n    it { should exist }\n    its('stage') { should eq 'GA' }\n    its('included_permissions') { should eq [\"iam.roles.list\"] }\n  end\n\n  describe google_project_iam_custom_role(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_iam_custom_roles.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_iam_custom_roles resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_project_iam_custom_role_id = attribute(:gcp_project_iam_custom_role_id, default: 'gcp_project_iam_custom_role_id', description: 'The IAM custom role identifier.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_project_iam_custom_roles-1.0' do\n  impact 1.0\n  title 'google_project_iam_custom_roles resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_project_iam_custom_roles(project: gcp_project_id) do\n    its('names') { should include \"projects/#{gcp_project_id}/roles/#{gcp_project_iam_custom_role_id}\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_logging_audit_config.rb",
    "content": "title 'Test GCP project logging audit configuration'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\n\ncontrol 'gcp-project-audit-logging-config-1.0' do\n\n  impact 1.0\n  title 'Ensure GCP project logging audit configuration has the correct properties.'\n\n  describe google_project_logging_audit_config(project: gcp_project_id) do\n    its('default_types') { should_not match /notthere/ }\n    its('default_exempted_members') { should_not match /notthere/ }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_project_metric.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_metric resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nlogging_metric = attribute('logging_metric', default: {\n  \"name\": \"some/metric\",\n  \"filter\": \"resource.type=gae_app AND severity>=ERROR\",\n  \"metric_kind\": \"DELTA\",\n  \"value_type\": \"INT64\"\n}, description: 'Logging metric definition')\ncontrol 'google_project_metric-1.0' do\n  impact 1.0\n  title 'google_project_metric resource test'\n\n  describe google_project_metric(project: gcp_project_id, name: logging_metric['name']) do\n    it { should exist }\n    its('filter') { should cmp logging_metric['filter'] }\n    its('metric_descriptor.metric_kind') { should cmp logging_metric['metric_kind'] }\n    its('metric_descriptor.value_type') { should cmp logging_metric['value_type'] }\n  end\n\n  describe google_project_metric(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_metrics.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_metrics resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nlogging_metric = attribute('logging_metric', default: {\n  \"name\": \"some/metric\",\n  \"filter\": \"resource.type=gae_app AND severity>=ERROR\",\n  \"metric_kind\": \"DELTA\",\n  \"value_type\": \"INT64\"\n}, description: 'Logging metric definition')\ncontrol 'google_project_metrics-1.0' do\n  impact 1.0\n  title 'google_project_metrics resource test'\n\n  describe google_project_metrics(project: gcp_project_id) do\n    it { should exist }\n    its('metric_filters') { should include logging_metric['filter'] }\n    its('metric_names') { should include logging_metric['name'] }\n  end\n\n  describe.one do\n    google_project_metrics(project: gcp_project_id).metric_types.each do |metric_type|\n      describe metric_type do\n        it { should match logging_metric['name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_service resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nservice = attribute('service', default: {\n  \"name\": \"maps-android-backend.googleapis.com\"\n}, description: 'Service description')\ncontrol 'google_project_service-1.0' do\n  impact 1.0\n  title 'google_project_service resource test'\n\n  describe google_project_service(project: gcp_project_id, name: service['name']) do\n    it { should exist }\n    its('state') { should cmp \"ENABLED\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_project_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_project_services resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nservice = attribute('service', default: {\n  \"name\": \"maps-android-backend.googleapis.com\"\n}, description: 'Service description')\ncontrol 'google_project_services-1.0' do\n  impact 1.0\n  title 'google_project_services resource test'\n\n  describe.one do\n    google_project_services(project: gcp_project_id).names.each do |name|\n      describe name do\n        it { should match service['name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_projects.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_projects resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ncontrol 'google_projects-1.0' do\n  impact 1.0\n  title 'google_projects resource test'\n\n  describe google_projects() do\n    its('count') { should be >= 1 }\n    its('project_ids') { should include gcp_project_id }\n    its('lifecycle_states') { should include 'ACTIVE' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_projects_firewalls_loop.rb",
    "content": "title 'Loop over all GCP Projects and look at firewalls in INGRESS direction'\n\ncontrol 'gcp-projects-firewalls-loop-1.0' do\n\n  impact 1.0\n  title 'Ensure INGRESS firewalls in all projects have the correct properties using google_compute_firewall for detail.'\n\n  google_projects.project_ids.each do |project_name|\n    google_compute_firewalls(project: project_name).where(firewall_direction: 'INGRESS').firewall_names.each do |firewall_name|\n      describe google_compute_firewall(project: project_name, name: firewall_name) do\n        it { should exist }\n        its('direction') { should eq \"INGRESS\" }\n#  below uncommented is the same as the example in the README\n#  leaving out as some of the terraform resources have SSH open\n#        its('allowed_ssh?')  { should be false }\n      end\n    end\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_pubsub_subscription.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_pubsub_subscription resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nsubscription = attribute('subscription', default: {\"name\"=>\"inspec-gcp-subscription\", \"ack_deadline_seconds\"=>20})\n\ncontrol 'google_pubsub_subscription-1.0' do\n  impact 1.0\n  title 'google_pubsub_subscription resource test'\n\n  describe google_pubsub_subscription(project: gcp_project_id, name: subscription['name']) do\n    it { should exist }\n  end\n\n  describe google_pubsub_subscription(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_pubsub_subscriptions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_pubsub_subscriptions resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nsubscription = attribute('subscription', default: {\"name\"=>\"inspec-gcp-subscription\", \"ack_deadline_seconds\"=>20})\n\ncontrol 'google_pubsub_subscriptions-1.0' do\n  impact 1.0\n  title 'google_pubsub_subscriptions resource test'\n\n  describe google_pubsub_subscriptions(project: gcp_project_id) do\n    its('count') { should be >= 1 }\n  end\n\n  google_pubsub_subscriptions(project: gcp_project_id).names.each do |subscription_name|\n    describe google_pubsub_subscription(project: gcp_project_id, name: subscription_name) do\n      it { should exist }\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_pubsub_topic.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_pubsub_topic resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ntopic = attribute('topic', default: {\"name\"=>\"inspec-gcp-topic\"})\n\ncontrol 'google_pubsub_topic-1.0' do\n  impact 1.0\n  title 'google_pubsub_topic resource test'\n\n  describe google_pubsub_topic(project: gcp_project_id, name: topic['name']) do\n    it { should exist }\n  end\n\n  describe google_pubsub_topic(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_pubsub_topics.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_pubsub_topics resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ntopic = attribute('topic', default: {\"name\"=>\"inspec-gcp-topic\"})\n\ncontrol 'google_pubsub_topics-1.0' do\n  impact 1.0\n  title 'google_pubsub_topics resource test'\n\n  describe google_pubsub_topics(project: gcp_project_id) do\n    it { should exist }\n    its('names') { should include topic['name'] }\n    its('count') { should be >=1 }\n  end\n\n  describe.one do\n    google_pubsub_topics(project: gcp_project_id).names.each do |topic_name|\n      describe google_pubsub_topic(project: gcp_project_id, name: topic_name) do\n        it { should exist }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_redis_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_redis_instance resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nredis = attribute('redis', default: {\"name\"=>\"my-redis-cache\", \"tier\"=>\"STANDARD_HA\", \"memory_size_gb\"=>1, \"region\"=>\"us-central1\", \"location_id\"=>\"us-central1-a\", \"alternative_location_id\"=>\"us-central1-f\", \"redis_version\"=>\"REDIS_3_2\", \"display_name\"=>\"InSpec test instance\", \"reserved_ip_range\"=>\"192.168.0.0/29\", \"label_key\"=>\"key\", \"label_value\"=>\"value\"})\n\ncontrol 'google_redis_instance-1.0' do\n  impact 1.0\n  title 'google_redis_instance resource test'\n\n  describe google_redis_instance(project: gcp_project_id, region: redis['region'], name: redis['name']) do\n    it { should exist }\n    its('tier') { should cmp redis['tier'] }\n    its('memory_size_gb') { should cmp redis['memory_size_gb'] }\n    its('alternative_location_id') { should cmp redis['alternative_location_id'] }\n    its('redis_version') { should cmp redis['redis_version'] }\n    its('display_name') { should cmp redis['display_name'] }\n    its('reserved_ip_range') { should cmp redis['reserved_ip_range'] }\n    its('labels') { should include(redis['label_key'] => redis['label_value']) }\n  end\n\n  describe google_redis_instance(project: gcp_project_id, region: redis['region'], name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_redis_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_redis_instances resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nredis = attribute('redis', default: {\"name\"=>\"my-redis-cache\", \"tier\"=>\"STANDARD_HA\", \"memory_size_gb\"=>1, \"region\"=>\"us-central1\", \"location_id\"=>\"us-central1-a\", \"alternative_location_id\"=>\"us-central1-f\", \"redis_version\"=>\"REDIS_3_2\", \"display_name\"=>\"InSpec test instance\", \"reserved_ip_range\"=>\"192.168.0.0/29\", \"label_key\"=>\"key\", \"label_value\"=>\"value\"})\n\ncontrol 'google_redis_instances-1.0' do\n  impact 1.0\n  title 'google_redis_instances resource test'\n\n  describe google_redis_instances(project: gcp_project_id, region: redis['region']) do\n    its('tiers') { should include redis['tier'] }\n    its('memory_size_gbs') { should include redis['memory_size_gb'] }\n    its('alternative_location_ids') { should include redis['alternative_location_id'] }\n    its('redis_versions') { should include redis['redis_version'] }\n    its('display_names') { should include redis['display_name'] }\n    its('reserved_ip_ranges') { should include redis['reserved_ip_range'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_resourcemanager_folder.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_resourcemanager_folder resource.'\n\nfolder = attribute('folder', default: {\"display_name\"=>\"inspec-gcp-folder\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_resourcemanager_folder-1.0' do\n  impact 1.0\n  title 'google_resourcemanager_folder resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").names.each do |name|\n      describe google_resourcemanager_folder(name: name) do\n        it { should exist }\n        its('display_name') { should eq folder['display_name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_resourcemanager_folders.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_resourcemanager_folders resource.'\n\nfolder = attribute('folder', default: {\"display_name\"=>\"inspec-gcp-folder\"})\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization that is the parent of this folder')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ncontrol 'google_resourcemanager_folders-1.0' do\n  impact 1.0\n  title 'google_resourcemanager_folders resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe.one do\n    google_resourcemanager_folders(parent: \"organizations/#{gcp_organization_id}\").display_names.each do |display_name|\n      describe display_name do\n        it { should eq folder['display_name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_run_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_run_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  job = input('job', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/jobs/inspec-tutorial1-20230915-182543\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uid\": \"605bd3e1-4bf0-4a9d-85ea-23eae08f51dc\",\n  \"generation\": \"1\",\n  \"create_time\": \"2024-10-10T13:34:58.675033Z\",\n  \"client\": \"cloud-console\",\n  \"update_time\": \"value_updatetime\",\n  \"delete_time\": \"value_deletetime\",\n  \"expire_time\": \"value_expiretime\",\n  \"creator\": \"value_creator\",\n  \"last_modifier\": \"value_lastmodifier\",\n  \"client_version\": \"value_clientversion\",\n  \"launch_stage\": \"GA\",\n  \"observed_generation\": \"1\",\n  \"start_execution_token\": \"value_startexecutiontoken\",\n  \"run_execution_token\": \"value_runexecutiontoken\",\n  \"etag\": \"value_etag\"\n}, description: 'job description')\ncontrol 'google_run_job-1.0' do\n  impact 1.0\n  title 'google_run_job resource test'\n\n  describe google_run_job(name: job['name']) do\n  \tit { should exist }\n  \tits('name') { should cmp job['name'] }\n  \tits('uid') { should cmp job['uid'] }\n  \tits('generation') { should cmp job['generation'] }\n  \tits('create_time') { should cmp job['create_time'] }\n  \tits('update_time') { should cmp job['update_time'] }\n  \tits('delete_time') { should cmp job['delete_time'] }\n  \tits('expire_time') { should cmp job['expire_time'] }\n  \tits('creator') { should cmp job['creator'] }\n  \tits('last_modifier') { should cmp job['last_modifier'] }\n  \tits('client') { should cmp job['client'] }\n  \tits('client_version') { should cmp job['client_version'] }\n  \tits('launch_stage') { should cmp job['launch_stage'] }\n  \tits('observed_generation') { should cmp job['observed_generation'] }\n  \tits('start_execution_token') { should cmp job['start_execution_token'] }\n  \tits('run_execution_token') { should cmp job['run_execution_token'] }\n  \tits('etag') { should cmp job['etag'] }\n\n  end\n\n  describe google_run_job(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_run_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_run_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\njob = input('job', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/jobs/inspec-tutorial1-20230915-182543\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uid\": \"605bd3e1-4bf0-4a9d-85ea-23eae08f51dc\",\n  \"generation\": \"1\",\n  \"create_time\": \"2024-10-10T13:34:58.675033Z\",\n  \"client\": \"cloud-console\",\n  \"update_time\": \"value_updatetime\",\n  \"delete_time\": \"value_deletetime\",\n  \"expire_time\": \"value_expiretime\",\n  \"creator\": \"value_creator\",\n  \"last_modifier\": \"value_lastmodifier\",\n  \"client_version\": \"value_clientversion\",\n  \"launch_stage\": \"GA\",\n  \"observed_generation\": \"1\",\n  \"start_execution_token\": \"value_startexecutiontoken\",\n  \"run_execution_token\": \"value_runexecutiontoken\",\n  \"etag\": \"value_etag\"\n}, description: 'job description')\ncontrol 'google_run_jobs-1.0' do\n  impact 1.0\n  title 'google_run_jobs resource test'\n\n    describe google_run_jobs(parent: job['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_run_service.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_run_service resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nservice = input('service', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/inspec-function-1\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uri\": \"https://inspec-function-1-a6zd2ygfca-uc.a.run.app\",\n  \"generation\": \"1\",\n  \"createTime\": \"2024-07-22T10:31:56.322132Z\",\n  \"updateTime\": \"2024-07-22T10:31:56.322132Z\",\n  \"creator\": \"service-165434197229@gcf-admin-robot.iam.gserviceaccount.com\",\n  \"ingress\": \"INGRESS_TRAFFIC_ALL\"\n}, description: 'service description')\ncontrol 'google_run_service-1.0' do\n  impact 1.0\n  title 'google_run_service resource test'\n\n  describe google_run_service(name: service['name']) do\n  \tit { should exist }\n    its('name') { should cmp service['name'] }\n    its('uri') { should cmp service['uri'] }\n    its('generation') { should cmp service['generation'] }\n    its('create_time') { should cmp service['createTime'] }\n    its('update_time') { should cmp service['updateTime'] }\n    its('creator') { should cmp service['creator'] }\n    its('ingress') { should cmp service['ingress'] }\n  end\n\n  describe google_run_service(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_run_services.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_run_services resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nservice = input('service', value: {\n  \"name\": \"projects/ppradhan/locations/us-central1/services/inspec-function-1\",\n  \"parent\": \"projects/ppradhan/locations/us-central1\",\n  \"uri\": \"https://inspec-function-1-a6zd2ygfca-uc.a.run.app\",\n  \"generation\": \"1\",\n  \"createTime\": \"2024-07-22T10:31:56.322132Z\",\n  \"updateTime\": \"2024-07-22T10:31:56.322132Z\",\n  \"creator\": \"service-165434197229@gcf-admin-robot.iam.gserviceaccount.com\",\n  \"ingress\": \"INGRESS_TRAFFIC_ALL\"\n}, description: 'service description')\ncontrol 'google_run_services-1.0' do\n  impact 1.0\n  title 'google_run_services resource test'\n\n    describe google_run_services(parent: service['parent']) do\n      it { should exist }\n      its('names') { should include service['name'] }\n      its('uris') { should include service['uri'] }\n      its('generations') { should include service['generation'] }\n      its('create_times') { should include service['createTime'] }\n      its('update_times') { should include service['updateTime'] }\n      its('creators') { should include service['creator'] }\n      its('ingresses') { should include service['ingress'] }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_runtime_config_config.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_runtime_config_config resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nruntimeconfig_config = attribute('runtimeconfig_config', default: {\"name\"=>\"inspec-gcp-runtime-config\", \"description\"=>\"My runtime configurations\"})\n\ncontrol 'google_runtime_config_config-1.0' do\n  impact 1.0\n  title 'google_runtime_config_config resource test'\n\n  describe google_runtime_config_config(project: gcp_project_id, name: runtimeconfig_config['name']) do\n    it { should exist }\n    its('description') { should cmp runtimeconfig_config['description'] }\n  end\n\n  describe google_runtime_config_config(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_runtime_config_configs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_runtime_config_configs resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nruntimeconfig_config = attribute('runtimeconfig_config', default: {\"name\"=>\"inspec-gcp-runtime-config\", \"description\"=>\"My runtime configurations\"})\n\ncontrol 'google_runtime_config_configs-1.0' do\n  impact 1.0\n  title 'google_runtime_config_configs resource test'\n\n  describe google_runtime_config_configs(project: gcp_project_id) do\n    its('descriptions') { should include runtimeconfig_config['description'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_runtime_config_variable.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_runtime_config_variable resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nruntimeconfig_config = attribute('runtimeconfig_config', default: {\"name\"=>\"inspec-gcp-runtime-config\", \"description\"=>\"My runtime configurations\"})\nruntimeconfig_variable = attribute('runtimeconfig_variable', default: {\"name\"=>\"prod-variables/hostname\", \"text\"=>\"example.com\"})\n\ncontrol 'google_runtime_config_variable-1.0' do\n  impact 1.0\n  title 'google_runtime_config_variable resource test'\n\n  describe google_runtime_config_variable(project: gcp_project_id, config: runtimeconfig_config['name'], name: runtimeconfig_variable['name']) do\n    it { should exist }\n    its('text') { should cmp runtimeconfig_variable['text'] }\n  end\n\n  describe google_runtime_config_variable(project: gcp_project_id, config: runtimeconfig_config['name'], name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_runtime_config_variables.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_runtime_config_variables resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nruntimeconfig_config = attribute('runtimeconfig_config', default: {\"name\"=>\"inspec-gcp-runtime-config\", \"description\"=>\"My runtime configurations\"})\nruntimeconfig_variable = attribute('runtimeconfig_variable', default: {\"name\"=>\"prod-variables/hostname\", \"text\"=>\"example.com\"})\n\ncontrol 'google_runtime_config_variables-1.0' do\n  impact 1.0\n  title 'google_runtime_config_variables resource test'\n\n  describe google_runtime_config_variables(project: gcp_project_id, config: runtimeconfig_config['name']) do\n    its('texts') { should include runtimeconfig_variable['text'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_secret_manager_secret.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_secret_manager_secret resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nproject_secret = input('project_secret', value: {\n  \"name\": \"projects/ppradhan/secrets/inspec-gcp-secret\",\n  \"parent\": \"projects/ppradhan\",\n}, description: 'project_secret description')\n\ncontrol 'google_secret_manager_secret-1.0' do\n  impact 1.0\n  title 'google_secret_manager_secret resource test'\n\n  describe google_secret_manager_secret(name: project_secret['name']) do\n  \tit { should exist }\n\n  end\n\n  describe google_secret_manager_secret(name: \"does_not_exit\") do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_secret_manager_secrets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_secret_manager_secrets resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\nproject_secret = input('project_secret', value: {\n  \"name\": \"projects/ppradhan/secrets/inspec-gcp-secret\",\n  \"parent\": \"projects/ppradhan\",\n}, description: 'project_secret description')\n\ncontrol 'google_secret_manager_secrets-1.0' do\n  impact 1.0\n  title 'google_secret_manager_secrets resource test'\n\n      describe google_secret_manager_secrets(parent: project_secret['parent']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_service_account.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_service_account resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The IAM service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_service_account-1.0' do\n  impact 1.0\n  title 'google_service_account resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_service_account(project: gcp_project_id, name: \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    it { should exist }\n    its('display_name') { should cmp gcp_service_account_display_name }\n  end\n\n  describe google_service_account(project: gcp_project_id, name: \"nonexistent@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_service_account_key.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_service_account_key resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The IAM service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_service_account_key-1.0' do\n  impact 1.0\n  title 'google_service_account_key resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  google_service_account_keys(project: gcp_project_id, service_account: \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\").key_names.each do |sa_key_name|\n  \tdescribe google_service_account_key(project: gcp_project_id, service_account: \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\", name: sa_key_name.split('/').last) do\n  \t\tit { should exist }\n  \t\tits('key_type') { should_not cmp 'USER_MANAGED' }\n  \tend\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_service_account_keys.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_service_account_keys resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The IAM service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_service_account_keys-1.0' do\n  impact 1.0\n  title 'google_service_account_keys resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_service_account_keys(project: gcp_project_id, service_account: \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    its('count') { should be <= 1000 }\n    its('key_types') { should_not include 'USER_MANAGED' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_service_accounts.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_service_accounts resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The IAM service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default:0, description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_service_accounts-1.0' do\n  impact 1.0\n  title 'google_service_accounts resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_service_accounts(project: gcp_project_id, name: \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    its('service_account_emails') { should include \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n    its('count') { should be <= 1000 }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_service_networking_service_connections.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_service_networking_service_connections resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  service_connection = input('service_connection', value: {\n  \"parent\": \"services/servicenetworking.googleapis.com\",\n  \"network\": \"projects/ppradhan/global/networks/inspec-network\"\n}, description: 'service_connection description')\ncontrol 'google_service_networking_service_connections-1.0' do\n  impact 1.0\n  title 'google_service_networking_service_connections resource test'\n\n      describe google_servicenetworking_service_connections(parent: service_connection['parent'],service_connection['network']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sourcerepo_repositories.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sourcerepo_repositories resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nrepository = attribute('repository', default: {\n  \"name\": \"inspec-gcp-repository\"\n}, description: 'Source Repository definition')\ncontrol 'google_sourcerepo_repositories-1.0' do\n  impact 1.0\n  title 'google_sourcerepo_repositories resource test'\n\n  repo_name = repository['name']\n  describe.one do\n    google_sourcerepo_repositories(project: gcp_project_id).names.each do |name|\n      describe name do\n        it { should match /\\/repos\\/#{repo_name}$/ }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sourcerepo_repository.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sourcerepo_repository resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nrepository = attribute('repository', default: {\n  \"name\": \"inspec-gcp-repository\"\n}, description: 'Source Repository definition')\ncontrol 'google_sourcerepo_repository-1.0' do\n  impact 1.0\n  title 'google_sourcerepo_repository resource test'\n\n  describe google_sourcerepo_repository(project: gcp_project_id, name: repository['name']) do\n    it { should exist }\n  end\n\n  describe google_sourcerepo_repository(project: gcp_project_id, name: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_spanner_database.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_spanner_database resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nspannerdatabase = attribute('spannerdatabase', default: {\n  \"name\": \"spdatabase\",\n  \"instance\": \"spinstance\",\n  \"ddl\": \"CREATE TABLE test (test STRING(MAX),) PRIMARY KEY (test)\"\n}, description: 'Cloud Spanner definition') \n\ncontrol 'google_spanner_database-1.0' do\n  impact 1.0\n  title 'google_spanner_database resource test'\n\n\n  describe google_spanner_database(project: gcp_project_id, instance: spannerdatabase['instance'], name: spannerdatabase['name']) do\n    it { should exist }\n    its('name') { should match spannerdatabase['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_spanner_databases.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_spanner_databases resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nspannerdatabase = attribute('spannerdatabase', default: {\n  \"name\": \"spdatabase\",\n  \"instance\": \"spinstance\",\n  \"ddl\": \"CREATE TABLE test (test STRING(MAX),) PRIMARY KEY (test)\"\n}, description: 'Cloud Spanner definition') \n\ncontrol 'google_spanner_databases-1.0' do\n  impact 1.0\n  title 'google_spanner_databases resource test'\n\n\n  describe.one do\n  \tgoogle_spanner_databases(project: gcp_project_id, instance: spannerdatabase['instance']).names.each do |name|\n  \t  describe name do\n  \t  \tit { should match spannerdatabase['name'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_spanner_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_spanner_instance resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nspannerinstance = attribute('spannerinstance', default: {\n  \"config\": \"regional-us-east1\",\n  \"name\": \"spinstance\",\n  \"display_name\": \"inspectest\",\n  \"num_nodes\": 1,\n  \"label_key\": \"env\",\n  \"label_value\": \"test\"\n}, description: 'Cloud Spanner definition') \n\ncontrol 'google_spanner_instance-1.0' do\n  impact 1.0\n  title 'google_spanner_instance resource test'\n\n\n  describe google_spanner_instance(project: gcp_project_id, name: spannerinstance['name'], config: spannerinstance['config']) do\n    it { should exist }\n    its('config') { should match spannerinstance['config'] }\n    its('name') { should match spannerinstance['name'] }\n    its('display_name') { should eq spannerinstance['display_name'] }\n    its('node_count') { should eq spannerinstance['num_nodes'] }\n    its('labels') { should include(spannerinstance['label_key'] => spannerinstance['label_value']) }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_spanner_instance_iam_policy.rb",
    "content": "title 'Test GCP google_spanner_instance_iam_policy resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nspannerinstance = attribute('spannerinstance', default: {\n  \"config\": \"regional-us-east1\",\n  \"name\": \"spinstance\",\n  \"display_name\": \"inspectest\",\n  \"num_nodes\": 1,\n  \"label_key\": \"env\",\n  \"label_value\": \"test\"\n}, description: 'Cloud Spanner definition') \n\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default:'', description: 'Service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'google_spanner_instance_iam_policy-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'google_spanner_instance_iam_policy resource test'\n\n  describe.one do\n    google_spanner_instance_iam_policy(project: gcp_project_id, name: spannerinstance['name']).bindings.each do |binding|\n      describe binding do\n        its('role') { should eq \"roles/editor\" }\n        its('members') { should include \"serviceAccount:#{gcp_service_account_display_name}-sp@#{gcp_project_id}.iam.gserviceaccount.com\" }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_spanner_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_spanner_instances resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nspannerinstance = attribute('spannerinstance', default: {\n  \"config\": \"regional-us-east1\",\n  \"name\": \"spinstance\",\n  \"display_name\": \"inspectest\",\n  \"num_nodes\": 1,\n  \"label_key\": \"env\",\n  \"label_value\": \"test\"\n}, description: 'Cloud Spanner definition') \n\ncontrol 'google_spanner_instances-1.0' do\n  impact 1.0\n  title 'google_spanner_instances resource test'\n\n\n  describe.one do\n    google_spanner_instances(project: gcp_project_id, config: spannerinstance['config']).configs.each do |config|\n      describe config do\n        it { should match spannerinstance['config'] }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_connect.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_connect resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nsql_connect = attribute('sql_connect', default: {\n  \"region\": \"us-central1\",\n  \"database_version\": \"POSTGRES_13\",\n  \"backend_type\": \"SECOND_GEN\",\n  \"cert_serial_number\": 0,\n  \"common_name\": \"C=US,O=Google\\\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=68c79386-b63e-4998-8254-ba59729cdf78\",\n  \"instance\": \"test-pg\"\n}, description: 'Sql connect settings about a Cloud SQL instance')\n\ncontrol 'google_sql_connect-1.0' do\n  impact 1.0\n  title 'google_sql_connect resource test'\n\n\n  describe google_sql_connect(project: gcp_project_id, instance: sql_connect['instance'], name: 'test') do\n    it { should exist }\n    its('region') { should include sql_connect['region'] }\n    its('database_version') { should include sql_connect['database_version'] }\n    its('backend_type') { should include sql_connect['backend_type'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_database.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_database resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ngcp_db_name = attribute(:gcp_db_name, default: 'gcp_db_name', description: 'Database instance name.')\n\ncontrol 'google_sql_database-1.0' do\n  impact 1.0\n  title 'google_sql_database resource test'\n\n  describe google_sql_database(project: gcp_project_id, instance: gcp_db_instance_name, name: gcp_db_name) do\n    it { should exist }\n    its('name') { should eq gcp_db_name }\n    its('instance') { should eq gcp_db_instance_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_database_instance.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_database_instance resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ncontrol 'google_sql_database_instance-1.0' do\n  impact 1.0\n  title 'google_sql_database_instance resource test'\n\n\n  describe google_sql_database_instance(project: gcp_project_id, database: gcp_db_instance_name) do\n    it { should exist }\n    its('settings.activation_policy') { should eq 'ALWAYS' }\n    its('settings.data_disk_size_gb') { should eq \"10\" }\n    its('settings.data_disk_type') { should eq \"PD_SSD\"}\n    its('settings.kind') { should eq \"sql#settings\"}\n    its('settings.pricing_plan') { should eq \"PER_USE\"}\n    its('settings.replication_type') { should eq \"SYNCHRONOUS\"}\n    its('settings.storage_auto_resize') { should eq true}\n    its('settings.storage_auto_resize_limit') { should eq \"0\"}\n    its('settings.tier') { should eq 'db-custom-2-8192' }\n    its('state') { should eq 'RUNNABLE' }\n    its('backend_type') { should eq 'SECOND_GEN' }\n    its('database_version') { should eq 'MYSQL_8_0_26' }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_database_instances.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_database_instances resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ncontrol 'google_sql_database_instances-1.0' do\n  impact 1.0\n  title 'google_sql_database_instances resource test'\n\n\n  describe google_sql_database_instances(project: gcp_project_id) do\n    its('instance_states') { should include 'RUNNABLE' }\n    its('instance_names') { should include gcp_db_instance_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_databases.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_databases resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ngcp_db_name = attribute(:gcp_db_name, default: 'gcp_db_name', description: 'Database instance name.')\ncontrol 'google_sql_databases-1.0' do\n  impact 1.0\n  title 'google_sql_databases resource test'\n\n\n  describe google_sql_databases(project: gcp_project_id, instance: gcp_db_instance_name) do\n    it { should exist }\n    its('names') { should include gcp_db_name }\n    its('instances') { should include gcp_db_instance_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_flags.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_flags resource.'\n\nsql_database_flag = attribute('sql_database_flag', default: {\n  \"name\": \"audit_log\",\n  \"type\": \"STRING\",\n  \"applies_to\": \"MYSQL_5_6\",\n  \"allowed_string_values\": true,\n  \"requires_restart\": true\n}, description: 'Database flags for Cloud SQL instances')\n\ncontrol 'google_sql_flags-1.0' do\n  impact 1.0\n  title 'google_sql_flags resource test'\n\n\n  describe google_sql_flags do\n  its('names') { should include , sql_database_flag['name'] }\n  its('types') { should include , sql_database_flag['type'] }\n  its('applies_tos.first') { should include , sql_database_flag['applies_to'] }\n  its('allowed_string_values.first') { should include , sql_database_flag['allowed_string_values'] }\n  its('requires_restarts') { should include , sql_database_flag['requires_restart'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_operation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_operation resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\nsql_operation = attribute('sql_operation', default: {\n  \"name\": \"e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5\",\n  \"status\": \"DONE\",\n  \"operation_type\": \"CREATE\"\n}, description: 'An Operation resource. For successful operations that return an Operation resource, only the fields relevant to the operation are populated in the resource.')\n\ncontrol 'google_sql_operation-1.0' do\n  impact 1.0\n  title 'google_sql_operation resource test'\n\n  describe google_sql_operation(project: gcp_project_id, operation: sql_operation['name']) do\n    it { should exist }\n    its('name') { should eq sql_operation['name'] }\n    its('status') { should eq sql_operation['status'] }\n    its('operation_type') { should eq sql_operation['operation_type'] }\n  end\n\n  describe google_sql_operation(project: gcp_project_id, operation: 'nonexistant') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_operations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_operations resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\nsql_operation = attribute('sql_operation', default: {\n  \"name\": \"e5c522f1-8391-4830-a8ff-ff1cc4a7b2a5\",\n  \"status\": \"DONE\",\n  \"operation_type\": \"CREATE\"\n}, description: 'An Operation resource. For successful operations that return an Operation resource, only the fields relevant to the operation are populated in the resource.')\n\ncontrol 'google_sql_operations-1.0' do\n  impact 1.0\n  title 'google_sql_operations resource test'\n\n\n  describe google_sql_operations(project: gcp_project_id, instance: gcp_db_instance_name) do\n    it { should exist }\n    its('names') { should include sql_operation['name'] }\n    its('statuses') { should include sql_operation['status'] }\n    its('operation_types') { should include sql_operation['operation_type'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_ssl_cert.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_ssl_cert resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nsql_connect = attribute('sql_connect', default: {\n  \"region\": \"us-central1\",\n  \"database_version\": \"POSTGRES_13\",\n  \"backend_type\": \"SECOND_GEN\",\n  \"cert_serial_number\": 0,\n  \"common_name\": \"C=US,O=Google\\\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=68c79386-b63e-4998-8254-ba59729cdf78\",\n  \"sha1_fingerprint\": \"80c5c611c0a591db967c7dda3467e23127288fed\",\n  \"instance\": \"test-pg\"\n}, description: 'Sql connect settings about a Cloud SQL instance')\n\ncontrol 'google_sql_ssl_cert-1.0' do\n  impact 1.0\n  title 'google_sql_ssl_cert resource test'\n\n  describe google_sql_ssl_cert(project: gcp_project_id, instance: sql_connect['instance'], sha1_fingerprint:  sql_connect['sha1_fingerprint']) do\n    it { should exist }\n    its('instance') { should eq sql_connect['instance'] }\n    its('common_name') { should eq sql_connect['common_name'] }\n    its('sha1_fingerprint') { should eq sql_connect['sha1_fingerprint'] }\n  end\n\n  describe google_sql_ssl_cert(project: gcp_project_id, instance: 'nonexistent', sha1_fingerprint:  sql_connect['sha1_fingerprint']) do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_ssl_certs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_ssl_certs resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\nsql_connect = attribute('sql_connect', default: {\n  \"region\": \"us-central1\",\n  \"database_version\": \"POSTGRES_13\",\n  \"backend_type\": \"SECOND_GEN\",\n  \"cert_serial_number\": 0,\n  \"common_name\": \"C=US,O=Google\\\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=68c79386-b63e-4998-8254-ba59729cdf78\",\n  \"sha1_fingerprint\": \"80c5c611c0a591db967c7dda3467e23127288fed\",\n  \"instance\": \"test-pg\"\n}, description: 'Sql connect settings about a Cloud SQL instance')\n\ncontrol 'google_sql_ssl_certs-1.0' do\n  impact 1.0\n  title 'google_sql_ssl_certs resource test'\n\n  describe google_sql_ssl_certs(project: gcp_project_id, instance: sql_connect['instance']) do\n    it { should exist }\n    its('instances') { should include sql_connect['instance'] }\n    its('common_names') { should include sql_connect['common_name'] }\n    its('sha1_fingerprints') { should include sql_connect['sha1_fingerprint'] }\n  end\n\n  describe google_sql_ssl_certs(project: gcp_project_id, instance: 'nonexistent') do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_user.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_user resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ngcp_db_user_name = attribute(:gcp_db_user_name, default: 'gcp_db_user_name', description: 'SQL database user name.')\ncontrol 'google_sql_user-1.0' do\n  impact 1.0\n  title 'google_sql_user resource test'\n\n\n  describe google_sql_user(project: gcp_project_id, database: gcp_db_instance_name, name: gcp_db_user_name, host: \"example.com\") do\n    it { should exist }\n    its('name') { should cmp gcp_db_user_name }\n    its('instance') { should cmp gcp_db_instance_name }\n  end\n\n  describe google_sql_user(project: gcp_project_id, database: gcp_db_instance_name, name: \"nonexistent\", host: \"example.com\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_sql_users.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_sql_users resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'The GCP project location.')\ngcp_db_instance_name = attribute(:gcp_db_instance_name, default: 'gcp_db_instance_name', description: 'Database instance name.')\ngcp_db_user_name = attribute(:gcp_db_user_name, default: 'gcp_db_user_name', description: 'SQL database user name.')\ncontrol 'google_sql_users-1.0' do\n  impact 1.0\n  title 'google_sql_users resource test'\n\n\n  describe google_sql_users(project: gcp_project_id, database: gcp_db_instance_name) do\n    its('user_names') { should include gcp_db_user_name }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_bucket resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'GCP location')\ncontrol 'google_storage_bucket-1.0' do\n  impact 1.0\n  title 'google_storage_bucket resource test'\n\n  describe google_storage_bucket(name: \"inspec-gcp-static-#{gcp_project_id}\") do\n    it { should exist }\n    its('location') { should cmp gcp_location.upcase }\n\n    its('storage_class') { should eq \"STANDARD\" }\n    its('labels') { should include(\"key\" => \"value\") }\n    its('retention_policy.retention_period') { should cmp 1000 }\n  end\n\n  describe google_storage_bucket(name: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket_acl.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_bucket_acl resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_acl = attribute(:gcp_storage_bucket_acl, default: 'gcp_storage_bucket_acl', description: 'The name of the storage bucket with ACLs attached')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The name of the service account assigned permissions')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_storage_bucket_acl-1.0' do\n  impact 1.0\n  title 'google_storage_bucket_acl resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_storage_bucket_acl(bucket: gcp_storage_bucket_acl, entity: \"user-#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    it { should exist }\n    its('role') { should cmp \"OWNER\" }\n\n    its('bucket') { should eq gcp_storage_bucket_acl }\n    its('email') { should include \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\n\n  describe google_storage_bucket_acl(bucket: gcp_storage_bucket_acl, entity: \"allUsers\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket_iam_binding.rb",
    "content": "title 'Test single GCP storage bucket IAM binding'\n\ngcp_project_id = attribute(:gcp_project_id, default: '', description: 'The GCP project identifier.')\ngcp_storage_bucket_binding = attribute(:gcp_storage_bucket_binding, default: '', description: 'The GCP bucket with IAM binding.')\ngcp_storage_bucket_member = attribute(:gcp_storage_bucket_member, default: '', description: 'The GCP bucket with IAM member.')\ngcp_storage_bucket_policy = attribute(:gcp_storage_bucket_policy, default: '', description: 'The GCP bucket with IAM policy.')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default:'', description: 'Service account display name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-storage-bucket-iam-binding-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure storage bucket IAM binding has the correct properties.'\n\n  describe google_storage_bucket_iam_binding(bucket: gcp_storage_bucket_binding, role: 'roles/storage.objectViewer') do\n    it { should exist }\n    its ('members.count'){ should eq 1 } # i.e. our service account\n    # below is brittle, could extract service account email from tf in the future...\n    its('members') {should include \"serviceAccount:#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\n\n  describe google_storage_bucket_iam_binding(bucket: gcp_storage_bucket_member, role: 'roles/storage.objectViewer') do\n    it { should exist }\n    its ('members.count'){ should eq 1 } # i.e. our service account\n    # below is brittle, could extract service account email from tf in the future...\n    its('members') {should include \"serviceAccount:#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\n\n  describe google_storage_bucket_iam_binding(bucket: gcp_storage_bucket_policy, role: 'roles/storage.admin') do\n    it { should exist }\n    its ('members.count'){ should eq 1 } # i.e. our service account\n    # below is brittle, could extract service account email from tf in the future...\n    its('members') {should include \"serviceAccount:#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket_object.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_bucket_object resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_object = attribute(:gcp_storage_bucket_object, default: 'gcp_storage_bucket_object', description: 'The name of the storage bucket with an object')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The name of the service account assigned permissions')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_storage_bucket_object_name = attribute(:gcp_storage_bucket_object_name, default: 'gcp_storage_bucket_object_name', description: 'The name of the object')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_storage_bucket_object-1.0' do\n  impact 1.0\n  title 'google_storage_bucket_object resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_storage_bucket_object(bucket: gcp_storage_bucket_object, object: gcp_storage_bucket_object_name) do\n    it { should exist }\n    its('size.to_i') { should be > 0 }\n\n    its('time_created') { should be > Time.now - 60*60*24*10 }\n    its('time_updated') { should be > Time.now - 60*60*24*10 }\n  end\n\n  describe google_storage_bucket_object(bucket: gcp_storage_bucket_object, object: \"nonexistent\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket_object_handwritten.rb",
    "content": "title 'Storage Bucket Object Properties'\n\ngcp_storage_bucket_object = attribute(:gcp_storage_bucket_object, default: '', description: 'The GCP bucket with objects.')\ngcp_storage_bucket_object_name = attribute(:gcp_storage_bucket_object_name, default: '', description: 'The GCP bucket object name.')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources,default:0,description:'Flag to enable privileged resources requiring elevated privileges in GCP.')\n\ncontrol 'gcp-storage-bucket-object-1.0' do\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 }\n  impact 1.0\n  title 'Ensure that the Storage Bucket Object has been created correctly'\n\n  describe google_storage_bucket_object(bucket: gcp_storage_bucket_object, object: gcp_storage_bucket_object_name) do\n    it { should exist }\n    its('name') { should eq gcp_storage_bucket_object_name }\n    its('size') { should be > 0 }\n    its('content_type') { should eq \"text/plain; charset=utf-8\" }\n    its('time_created') { should be > Time.now - 365*60*60*24*10 }\n    its('time_updated') { should be > Time.now - 365*60*60*24*10 }\n  end\nend"
  },
  {
    "path": "test/integration/verify/controls/google_storage_bucket_objects.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_bucket_objects resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_object = attribute(:gcp_storage_bucket_object, default: 'gcp_storage_bucket_object', description: 'The name of the storage bucket with an object')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The name of the service account assigned permissions')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_storage_bucket_object_name = attribute(:gcp_storage_bucket_object_name, default: 'gcp_storage_bucket_object_name', description: 'The name of the object')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_storage_bucket_objects-1.0' do\n  impact 1.0\n  title 'google_storage_bucket_objects resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_storage_bucket_objects(bucket: gcp_storage_bucket_object) do\n  \tits('object_names') { should include gcp_storage_bucket_object_name }\n  \tits('count') { should be <= 10 }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_buckets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_buckets resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_location = attribute(:gcp_location, default: 'gcp_location', description: 'GCP location')\ncontrol 'google_storage_buckets-1.0' do\n  impact 1.0\n  title 'google_storage_buckets resource test'\n\n  describe google_storage_buckets(project: gcp_project_id) do\n    its('bucket_names') { should include \"inspec-gcp-static-#{gcp_project_id}\" }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_default_object_acl.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_default_object_acl resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_name = attribute(:gcp_storage_bucket_name, default: 'gcp_storage_bucket_name', description: 'The name of the storage bucket with the default object ACL')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The name of the service account assigned permissions')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_storage_default_object_acl-1.0' do\n  impact 1.0\n  title 'google_storage_default_object_acl resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_storage_default_object_acl(bucket: gcp_storage_bucket_name, entity: \"user-#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    it { should exist }\n    its('role') { should cmp \"OWNER\" }\n\n    its('bucket') { should eq gcp_storage_bucket_name }\n    its('email') { should include \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\n\n  describe google_storage_default_object_acl(bucket: gcp_storage_bucket_name, entity: \"allUsers\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_storage_object_acl.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    AUTO GENERATED CODE     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_storage_object_acl resource.'\n\ngcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.')\ngcp_storage_bucket_object = attribute(:gcp_storage_bucket_object, default: 'gcp_storage_bucket_object', description: 'The name of the storage bucket with ACLs attached')\ngcp_service_account_display_name = attribute(:gcp_service_account_display_name, default: 'gcp_service_account_display_name', description: 'The name of the service account assigned permissions')\ngcp_enable_privileged_resources = attribute(:gcp_enable_privileged_resources, default: 'gcp_enable_privileged_resources', description: 'If we are running tests with escalated permissions(required for this test)')\ngcp_storage_bucket_object_name = attribute(:gcp_storage_bucket_object_name, default: 'gcp_storage_bucket_object_name', description: 'The name of the object with ACLs')\ngcp_organization_id = attribute(:gcp_organization_id, default: gcp_organization_id, description: 'The identifier of the organization')\ncontrol 'google_storage_object_acl-1.0' do\n  impact 1.0\n  title 'google_storage_object_acl resource test'\n\n  only_if { gcp_enable_privileged_resources.to_i == 1 && gcp_organization_id != '' }\n  describe google_storage_object_acl(bucket: gcp_storage_bucket_object, object: gcp_storage_bucket_object_name, entity: \"user-#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\") do\n    it { should exist }\n    its('role') { should cmp \"OWNER\" }\n\n    its('bucket') { should eq gcp_storage_bucket_object }\n    its('email') { should include \"#{gcp_service_account_display_name}@#{gcp_project_id}.iam.gserviceaccount.com\" }\n  end\n\n  describe google_storage_object_acl(bucket: gcp_storage_bucket_object, object: gcp_storage_bucket_object_name, entity: \"allUsers\") do\n    it { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_batch_prediction_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_batch_prediction_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  batch_prediction_job = input('batch_prediction_job', value: {\n  \"name\": \"5035574482811486208\",\n  \"region\": \"us-central1\",\n  \"parent\": \"value_parent\",\n  \"create_time\": \"2023-09-15T11:46:26.533131Z\",\n  \"model_version_id\": \"1\",\n  \"end_time\": \"2023-09-15T11:59:58.296734Z\",\n  \"start_time\": \"2023-09-15T11:48:37.092389Z\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"JOB_STATE_SUCCEEDED\",\n  \"model\": \"projects/165431197229/locations/us-central1/models/3496242467164913664\",\n  \"display_name\": \"testpreded\",\n  \"service_account\": \"value_serviceaccount\"\n}, description: 'batch_prediction_job description')\ncontrol 'google_vertex_ai_batch_prediction_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_batch_prediction_job resource test'\n\n  describe google_vertex_ai_batch_prediction_job(name: \"projects/#{gcp_project_id}/locations/#{batch_prediction_job['region']}/batchPredictionJobs/#{batch_prediction_job['name']}\", region: batch_prediction_job['region']) do\n  \tit { should exist }\n  \tits('create_time') { should cmp batch_prediction_job['create_time'] }\n  \tits('model_version_id') { should cmp batch_prediction_job['model_version_id'] }\n  \tits('end_time') { should cmp batch_prediction_job['end_time'] }\n  \tits('start_time') { should cmp batch_prediction_job['start_time'] }\n  \tits('state') { should cmp batch_prediction_job['state'] }\n  \tits('model') { should cmp batch_prediction_job['model'] }\n  \tits('display_name') { should cmp batch_prediction_job['display_name'] }\n  end\n\n  describe google_vertex_ai_batch_prediction_job(name: \"does_not_exit\", region: batch_prediction_job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_batch_prediction_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_batch_prediction_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  batch_prediction_job = input('batch_prediction_job', value: {\n  \"name\": \"value_name\",\n  \"region\": \"us-central1\",\n  \"parent\": \"value_parent\",\n  \"create_time\": \"value_createtime\",\n  \"model_version_id\": \"value_modelversionid\",\n  \"end_time\": \"value_endtime\",\n  \"start_time\": \"value_starttime\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"value_state\",\n  \"model\": \"value_model\",\n  \"display_name\": \"value_displayname\",\n  \"service_account\": \"value_serviceaccount\"\n}, description: 'batch_prediction_job description')\ncontrol 'google_vertex_ai_batch_prediction_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_batch_prediction_jobs resource test'\n      describe google_vertex_ai_batch_prediction_jobs(parent: \"projects/#{gcp_project_id}/locations/#{batch_prediction_job['region']}\", region: batch_prediction_job['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_custom_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_custom_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  custom_job = input('custom_job', value: {\n  \"name\": \"value_name\",\n  \"job_id\": \"job_id\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\"\n}, description: 'custom_job description')\ncontrol 'google_vertex_ai_custom_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_custom_job resource test'\n\n  describe google_vertex_ai_custom_job(name: \"projects/#{gcp_project_id}/locations/#{custom_job['region']}/customJobs/#{custom_job['job_id']}\", region: custom_job['region']) do\n    it { should exist }\n    its('display_name') { should cmp custom_job['name'] }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_custom_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_custom_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  custom_job = input('custom_job', value: {\n  \"name\": \"value_name\",\n  \"job_id\": \"job_id\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\"\n}, description: 'custom_job description')\ncontrol 'google_vertex_ai_custom_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_custom_jobs resource test'\n\n  describe google_vertex_ai_custom_jobs(name: \"projects/#{gcp_project_id}/locations/#{custom_job['region']}\", region: custom_job['region']) do\n      it { should exist }\n      its ('display_names') { should include custom_job['name']}\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_dataset.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_dataset resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  dataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'dataset description')\ncontrol 'google_vertex_ai_dataset-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_dataset resource test'\n\n        describe google_vertex_ai_dataset(name: dataset['name'], region: dataset['region']) do\n       it { should exist }\n     end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_dataset_data_item_annotations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_dataset_data_item_annotations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  dataset_data_item_annotation = input('dataset_data_item_annotation', value: {\n  \"name\": \"1746031646898913280\",\n  \"region\": \"us-central1\",\n  \"dataset\": \"1044994542735982592\",\n  \"dataItem\": \"75173735366921\",\n  \"parent\": \"projects/165434197229/locations/us-central1/datasets/1044994542735982592/dataItems/75173735366921/annotations/\",\n}, description: 'dataset_data_item_annotation description')\ncontrol 'google_vertex_ai_dataset_data_item_annotations-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_dataset_data_item_annotations resource test'\n\n      describe google_vertex_ai_dataset_data_item_annotations(parent: \"projects/#{gcp_project_id}/locations/#{dataset_data_item_annotation['region']}/datasets/#{dataset_data_item_annotation['dataset']}/dataItems/#{dataset_data_item_annotation['dataItem']}\", region: dataset_data_item_annotation['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_datasets.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_datasets resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  dataset = input('dataset', value: {\n  \"dataset_id\": \"inspec_gcp_dataset\",\n  \"friendly_name\": \"A BigQuery dataset test\",\n  \"description\": \"Test BigQuery dataset description\",\n  \"location\": \"EU\",\n  \"default_table_expiration_ms\": 3600000,\n  \"access_writer_role\": \"WRITER\",\n  \"access_writer_special_group\": \"projectWriters\"\n}, description: 'dataset description')\ncontrol 'google_vertex_ai_datasets-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_datasets resource test'\n\n      describe google_vertex_ai_dataset(parent: dataset['parent'], region: dataset['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_datasets_annotation_spec.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_datasets_annotation_spec resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  datasets_annotation_spec = input('datasets_annotation_spec', value: {\n  \"name\": \"5438527833485869056\",\n  \"parent\": \"projects/165434197229/locations/us-central1/datasets/1044994542735982592/annotationSpecs/\",\n  \"dataset\": \"1044994542735982592\",\n  \"region\": \"us-central1\",\n  \"display_name\": \"InSpec\",\n  \"etag\": \"value_etag\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'datasets_annotation_spec description')\ncontrol 'google_vertex_ai_datasets_annotation_spec-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_datasets_annotation_spec resource test'\n\n  describe google_vertex_ai_datasets_annotation_spec(name: \"projects/#{gcp_project_id}/locations/#{datasets_annotation_spec['region']}/datasets/#{datasets_annotation_spec['dataset']}/annotationSpecs/#{datasets_annotation_spec['name']}\", region: datasets_annotation_spec['region']) do\n  \tit { should exist }\n  \tits('display_name') { should cmp datasets_annotation_spec['display_name'] }\n  \tits('name') { should cmp datasets_annotation_spec['name'] }\n  \tits('etag') { should cmp datasets_annotation_spec['etag'] }\n  \tits('create_time') { should cmp datasets_annotation_spec['create_time'] }\n  \tits('update_time') { should cmp datasets_annotation_spec['update_time'] }\n\n  end\n\n  describe google_vertex_ai_datasets_annotation_spec(name: \"does_not_exit\", region: datasets_annotation_spec['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_datasets_data_items.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_datasets_data_items resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  datasets_data_item = input('datasets_data_item', value: {\n  \"parent\": \"value_parent\",\n  \"region\": \"us-central1\",\n  \"update_time\": \"value_updatetime\",\n  \"etag\": \"value_etag\",\n  \"name\": \"value\",\n  \"create_time\": \"value_createtime\",\n  \"dataset\": \"871737898477551616\"\n}, description: 'datasets_data_item description')\ncontrol 'google_vertex_ai_datasets_data_items-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_datasets_data_items resource test'\n\n      describe google_vertex_ai_datasets_data_items(parent: \"projects/#{gcp_project_id}/locations/#{datasets_data_item['region']}/datasets/#{datasets_data_item['dataset']}\", region: datasets_data_item['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_datasets_saved_queries.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_datasets_saved_queries resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  datasets_saved_query = input('datasets_saved_query', value: {\n  \"parent\": \"projects/165434197229/locations/us-central1/datasets/1044994542735982592/savedQueries/\",\n  \"region\": \"us-central1\",\n  \"dataset\": \"1044994542735982592\",\n  \"update_time\": \"value_updatetime\",\n  \"problem_type\": \"value_problemtype\",\n  \"name\": \"2236927819407949824\",\n  \"create_time\": \"value_createtime\",\n  \"etag\": \"value_etag\",\n  \"display_name\": \"inspec-annotation-test\",\n  \"annotation_filter\": \"value_annotationfilter\"\n}, description: 'datasets_saved_query description')\ncontrol 'google_vertex_ai_datasets_saved_queries-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_datasets_saved_queries resource test'\n\n      describe google_vertex_ai_datasets_saved_queries(parent: \"projects/#{gcp_project_id}/locations/#{datasets_saved_query['region']}/datasets/#{datasets_saved_query['dataset']}\", region: datasets_saved_query['region']) do\n        it { should exist }\n        its('names') { should include datasets_saved_query['parent']+ datasets_saved_query['name']}\n        its('display_names'){ should include datasets_saved_query['display_name']}\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_endpoint.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_endpoint resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  endpoint = input('endpoint', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"model_deployment_monitoring_job\": \"value_modeldeploymentmonitoringjob\",\n  \"description\": \"value_description\",\n  \"network\": \"value_network\",\n  \"display_name\": \"value_displayname\",\n  \"etag\": \"value_etag\",\n  \"create_time\": \"value_createtime\"\n}, description: 'endpoint description')\ncontrol 'google_vertex_ai_endpoint-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_endpoint resource test'\n\n  describe google_vertex_ai_endpoint(name: \"projects/#{gcp_project_id}/locations/#{endpoint['region']}/endpoints/#{endpoint['name']}\", region: endpoint['region']) do\n  it { should exist }\n  \tits('update_time') { should cmp endpoint['update_time'] }\n  \tits('model_deployment_monitoring_job') { should cmp endpoint['model_deployment_monitoring_job'] }\n  \tits('description') { should cmp endpoint['description'] }\n  \tits('network') { should cmp endpoint['network'] }\n  \tits('display_name') { should cmp endpoint['display_name'] }\n  \tits('etag') { should cmp endpoint['etag'] }\n  \tits('create_time') { should cmp endpoint['create_time'] }\n  \tits('name') { should cmp endpoint['name'] }\n\n  end\n\n  describe google_vertex_ai_endpoint(name: \"does_not_exit\", region: endpoint['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_endpoints.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_endpoints resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  endpoint = input('endpoint', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"model_deployment_monitoring_job\": \"value_modeldeploymentmonitoringjob\",\n  \"description\": \"value_description\",\n  \"network\": \"value_network\",\n  \"display_name\": \"value_displayname\",\n  \"etag\": \"value_etag\",\n  \"create_time\": \"value_createtime\"\n}, description: 'endpoint description')\ncontrol 'google_vertex_ai_endpoints-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_endpoints resource test'\n\n      describe google_vertex_ai_endpoints(parent: \"projects/#{gcp_project_id}/locations/#{endpoint['region']}\", region: endpoint['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestore.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestore resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestore = input('featurestore', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"etag\": \"value_etag\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'featurestore description')\ncontrol 'google_vertex_ai_featurestore-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestore resource test'\n\n  describe google_vertex_ai_featurestore(name: \"projects/#{gcp_project_id}/locations/#{featurestore['region']}/featurestores/#{featurestore['name']}\", region: featurestore['region']) do\n  \tit { should exist }\n  \tits('state') { should cmp featurestore['state'] }\n  \tits('create_time') { should cmp featurestore['create_time'] }\n  \tits('etag') { should cmp featurestore['etag'] }\n  \tits('update_time') { should cmp featurestore['update_time'] }\n  \tits('name') { should cmp featurestore['name'] }\n\n  end\n\n  describe google_vertex_ai_featurestore(name: \"does_not_exit\", region: featurestore['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestore_entity_type_feature.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestore_entity_type_feature resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestore_entity_type_feature = input('featurestore_entity_type_feature', value: {\n\t\t\"entityType\": \"entity_type_1\",\n\t\t\"region\": \"us-central1\",\n\t\t\"description\": \"true\",\n    \"value_type\": \"BOOL\",\n\t\t\"etag\": \"AMEw9yPfyvUh079MW1h0I-rYtVk6aTxzOIr490RcrO6sz3wVrh239BhOrhH0TBNci9Uo\",\n\t\t\"update_time\": \"2023-09-14T07:44:10.341724Z\",\n\t\t\"featurestore\": \"feature_store_1\"\n}, description: 'featurestore_entity_type_feature description')\ncontrol 'google_vertex_ai_featurestore_entity_type_feature-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestore_entity_type_feature resource test'\n\n  describe google_vertex_ai_featurestore_entity_type_feature(name: \"projects/#{gcp_project_id}/locations/#{featurestore_entity_type_feature['region']}/featurestores/#{featurestore_entity_type_feature['featurestore']}/entityTypes/#{featurestore_entity_type_feature['entityType']}\", region: featurestore_entity_type_feature['region']) do\n  \tit { should exist }\n  \tits('etag') { should cmp featurestore_entity_type_feature['etag'] }\n  \tits('name') { should cmp \"projects/165434197229/locations/us-central1/featurestores/feature_store_1/entityTypes/entity_type_1\" }\n  end\n\n  describe google_vertex_ai_featurestore_entity_type_feature(name: \"does_not_exit\", region: featurestore_entity_type_feature['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestore_entity_type_features.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestore_entity_type_features resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestore_entity_type_feature = input('featurestore_entity_type_feature', value: {\n    \"entityType\": \"entity_type_1\",\n    \"region\": \"us-central1\",\n    \"description\": \"value_description\",\n    \"create_time\": \"2023-09-14T07:42:36.438713Z\",\n    \"etag\": \"AMEw9yPMYJMlc3n6zzbc0vVMquWBrXyW-qjvfoHwzRQVGwFT3LU75lZIahPMBkYQlHzZ\",\n    \"update_time\": \"2023-09-14T07:42:36.438714Z\",\n    \"featurestore\": \"feature_store_1\",\n   \"value_type\":\"BOOL\",\n}, description: 'featurestore_entity_type_feature description')\ncontrol 'google_vertex_ai_featurestore_entity_type_features-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestore_entity_type_features resource test'\n      describe google_vertex_ai_featurestore_entity_type_features(parent: \"projects/#{gcp_project_id}/locations/#{featurestore_entity_type_feature['region']}/featurestores/#{featurestore_entity_type_feature['featurestore']}/entityTypes/#{featurestore_entity_type_feature['entityType']}\", region: featurestore_entity_type_feature['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestores.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestores resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestore = input('featurestore', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"etag\": \"value_etag\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'featurestore description')\ncontrol 'google_vertex_ai_featurestores-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestores resource test'\n\n      describe google_vertex_ai_featurestores(parent: \"projects/#{gcp_project_id}/locations/#{featurestore['region']}\", region: featurestore['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestores_entity_type.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestores_entity_type resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestores_entity_type = input('featurestores_entity_type', value: {\n    \"name\": \"entity_type_1\",\n    \"region\": \"us-central1\",\n    \"description\": \"value_description\",\n    \"create_time\": \"2023-09-14T07:42:36.438713Z\",\n    \"etag\": \"AMEw9yPMYJMlc3n6zzbc0vVMquWBrXyW-qjvfoHwzRQVGwFT3LU75lZIahPMBkYQlHzZ\",\n    \"update_time\": \"2023-09-14T07:42:36.438714Z\",\n    \"featurestore\": \"feature_store_1\"\n}, description: 'featurestores_entity_type description')\ncontrol 'google_vertex_ai_featurestores_entity_type-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestores_entity_type resource test'\n\n  describe google_vertex_ai_featurestores_entity_type(name: \"projects/#{gcp_project_id}/locations/#{featurestores_entity_type['region']}/featurestores/#{featurestores_entity_type['featurestore']}/entityTypes/#{featurestores_entity_type['name']}\", region: featurestores_entity_type['region']) do\n  \tit { should exist }\n  \tits('monitoring_config.snapshot_analysis.disabled') { should cmp true }\n    its('monitoring_config.snapshot_analysis.staleness_days') { should cmp 21 }\n    its('monitoring_config.numerical_threshold_config.value') { should cmp 0.3 }\n    its('monitoring_config.categorical_threshold_config.value') { should cmp 0.3 }\n  \tits('create_time') { should cmp featurestores_entity_type['create_time'] }\n  \tits('etag') { should cmp featurestores_entity_type['etag'] }\n  \tits('update_time') { should cmp featurestores_entity_type['update_time'] }\n\n  end\n\n  describe google_vertex_ai_featurestores_entity_type(name: \"does_not_exit\", region: featurestores_entity_type['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_featurestores_entity_types.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_featurestores_entity_types resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  featurestores_entity_type = input('featurestores_entity_type', value: {\n    \"name\": \"entity_type_1\",\n    \"region\": \"us-central1\",\n    \"parent\": \"value_parent\",\n    \"description\": \"value_description\",\n    \"create_time\": \"2023-09-14T07:42:36.438713Z\",\n    \"etag\": \"AMEw9yOTGVIBT_QQ17nzZOq_p46_Xnjm2ZnaYi__v3FPk_Ofs9zb_qoKYnz3CALlXqzV\",\n    \"update_time\": \"2023-09-14T07:42:36.438714Z\",\n    \"featurestore\": \"feature_store_1\"\n}, description: 'featurestores_entity_type description')\ncontrol 'google_vertex_ai_featurestores_entity_types-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_featurestores_entity_types resource test'\n\n  describe google_vertex_ai_featurestores_entity_types(parent: \"projects/#{gcp_project_id}/locations/#{featurestores_entity_type['region']}/featurestores/#{featurestores_entity_type['featurestore']}\", region: featurestores_entity_type['region']) do\n      it { should exist }\n  end\nend\ngoogle_vertex_ai_featurestores_entity_types(parent: \"projects/#{gcp_project_id}/locations/#{featurestores_entity_type['region']}/featurestores/gcp_feature_store_1\", region: featurestores_entity_type['region'])"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_hyperparameter_tuning_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_hyperparameter_tuning_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  hyperparameter_tuning_job = input('hyperparameter_tuning_job', value: {\n  \"name\": \"9200900561803673600\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/hyperparameterTuningJobs/\",\n  \"state\": \"JOB_STATE_RUNNING\",\n  \"end_time\": \"value_endtime\",\n  \"update_time\": \"value_updatetime\",\n  \"start_time\": \"value_starttime\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"inspec-hyper-test-hyperparameter-tuning-job\"\n}, description: 'hyperparameter_tuning_job description')\ncontrol 'google_vertex_ai_hyperparameter_tuning_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_hyperparameter_tuning_job resource test'\n\n  describe google_vertex_ai_hyperparameter_tuning_job(name: \"projects/#{gcp_project_id}/locations/#{hyperparameter_tuning_job['region']}/hyperparameterTuningJobs/#{hyperparameter_tuning_job['name']}\", region: hyperparameter_tuning_job['region']) do\n  \tit { should exist }\n  \tits('state') { should cmp hyperparameter_tuning_job['state'] }\n  \tits('end_time') { should cmp hyperparameter_tuning_job['end_time'] }\n  \tits('update_time') { should cmp hyperparameter_tuning_job['update_time'] }\n  \tits('start_time') { should cmp hyperparameter_tuning_job['start_time'] }\n  \tits('create_time') { should cmp hyperparameter_tuning_job['create_time'] }\n  \tits('display_name') { should cmp hyperparameter_tuning_job['display_name'] }\n  \tits('name') { should cmp hyperparameter_tuning_job['name'] }\n\n  end\n\n  describe google_vertex_ai_hyperparameter_tuning_job(name: \"does_not_exit\", region: hyperparameter_tuning_job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_hyperparameter_tuning_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_hyperparameter_tuning_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  hyperparameter_tuning_job = input('hyperparameter_tuning_job', value: {\n  \"name\": \"9200900561803673600\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/hyperparameterTuningJobs/\",\n  \"state\": \"JOB_STATE_RUNNING\",\n  \"end_time\": \"value_endtime\",\n  \"update_time\": \"value_updatetime\",\n  \"start_time\": \"value_starttime\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"inspec-hyper-test-hyperparameter-tuning-job\"\n}, description: 'hyperparameter_tuning_job description')\ncontrol 'google_vertex_ai_hyperparameter_tuning_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_hyperparameter_tuning_jobs resource test'\n\n      describe google_vertex_ai_hyperparameter_tuning_jobs(parent: \"projects/#{gcp_project_id}/locations/#{hyperparameter_tuning_job['region']}\", region: hyperparameter_tuning_job['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_index.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_index resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  index = input('index', value: {\n  \"name\": \"6386095475518341120\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/indexes/\",\n  \"description\": \"value_description\",\n  \"display_name\": \"test-index\",\n  \"metadata_schema_uri\": \"value_metadataschemauri\",\n  \"index_update_method\": \"value_indexupdatemethod\",\n  \"update_time\": \"value_updatetime\",\n  \"create_time\": \"value_createtime\",\n  \"etag\": \"value_etag\"\n}, description: 'index description')\ncontrol 'google_vertex_ai_index-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_index resource test'\n\n  describe google_vertex_ai_index(name: \"projects/#{gcp_project_id}/locations/#{index['region']}/indexes/#{index['name']}\", region: index['region']) do\n  \tit { should exist }\n  \tits('description') { should cmp index['description'] }\n  \tits('name') { should cmp index['name'] }\n  \tits('display_name') { should cmp index['display_name'] }\n  \tits('metadata_schema_uri') { should cmp index['metadata_schema_uri'] }\n  \tits('index_update_method') { should cmp index['index_update_method'] }\n  \tits('update_time') { should cmp index['update_time'] }\n  \tits('create_time') { should cmp index['create_time'] }\n  \tits('etag') { should cmp index['etag'] }\n\n  end\n\n  describe google_vertex_ai_index(name: \"does_not_exit\", region: index['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_index_endpoint.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_index_endpoint resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  index_endpoint = input('index_endpoint', value: {\n  \"name\": \"7761100736749895680\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/index-endpoints/\",\n  \"display_name\": \"inspec-index-endpoint\",\n  \"create_time\": \"value_createtime\",\n  \"network\": \"value_network\",\n  \"update_time\": \"value_updatetime\",\n  \"public_endpoint_domain_name\": \"value_publicendpointdomainname\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\"\n}, description: 'index_endpoint description')\ncontrol 'google_vertex_ai_index_endpoint-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_index_endpoint resource test'\n\n  describe google_vertex_ai_index_endpoint(name: \"projects/#{gcp_project_id}/locations/#{index_endpoint['region']}/indexEndpoints/#{index_endpoint['name']}\", region: index_endpoint['region']) do\n  \tit { should exist }\n  \tits('display_name') { should cmp index_endpoint['display_name'] }\n  \tits('create_time') { should cmp index_endpoint['create_time'] }\n  \tits('name') { should cmp index_endpoint['name'] }\n  \tits('network') { should cmp index_endpoint['network'] }\n  \tits('update_time') { should cmp index_endpoint['update_time'] }\n  \tits('public_endpoint_domain_name') { should cmp index_endpoint['public_endpoint_domain_name'] }\n  \tits('etag') { should cmp index_endpoint['etag'] }\n  \tits('description') { should cmp index_endpoint['description'] }\n\n  end\n\n  describe google_vertex_ai_index_endpoint(name: \"does_not_exit\", region: index_endpoint['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_index_endpoints.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_index_endpoints resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  index_endpoint = input('index_endpoint', value: {\n  \"name\": \"7761100736749895680\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/index-endpoints/\",\n  \"display_name\": \"inspec-index-endpoint\",\n  \"create_time\": \"value_createtime\",\n  \"network\": \"value_network\",\n  \"update_time\": \"value_updatetime\",\n  \"public_endpoint_domain_name\": \"value_publicendpointdomainname\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\"\n}, description: 'index_endpoint description')\ncontrol 'google_vertex_ai_index_endpoints-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_index_endpoints resource test'\n\n      describe google_vertex_ai_index_endpoints(parent: \"projects/#{gcp_project_id}/locations/#{index_endpoint['region']}\", region: index_endpoint['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_indices.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_indices resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  index = input('index', value: {\n  \"name\": \"6386095475518341120\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/indexes/\",\n  \"description\": \"value_description\",\n  \"display_name\": \"test-index\",\n  \"metadata_schema_uri\": \"value_metadataschemauri\",\n  \"index_update_method\": \"value_indexupdatemethod\",\n  \"update_time\": \"value_updatetime\",\n  \"create_time\": \"value_createtime\",\n  \"etag\": \"value_etag\"\n}, description: 'index description')\ncontrol 'google_vertex_ai_indices-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_indices resource test'\n\n      describe google_vertex_ai_indices(parent: \"projects/#{gcp_project_id}/locations/#{index['region']}\", region: index['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_store.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_store resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_store = input('metadata_store', value: {\n  \"name\": \"default\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/\",\n  \"description\": \"value_description\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_store description')\ncontrol 'google_vertex_ai_metadata_store-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_store resource test'\n\n  describe google_vertex_ai_metadata_store(name: \"projects/#{gcp_project_id}/locations/#{metadata_store['region']}/metadataStores/#{metadata_store['name']}\", region: metadata_store['region']) do\n  \tit { should exist }\n  \tits('description') { should cmp metadata_store['description'] }\n  \tits('create_time') { should cmp metadata_store['create_time'] }\n  \tits('update_time') { should cmp metadata_store['update_time'] }\n  \tits('name') { should cmp metadata_store['name'] }\n\n  end\n\n  describe google_vertex_ai_metadata_store(name: \"does_not_exit\", region: metadata_store['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_store = input('metadata_store', value: {\n  \"name\": \"default\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/\",\n  \"description\": \"value_description\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_store description')\ncontrol 'google_vertex_ai_metadata_stores-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores resource test'\n\n      describe google_vertex_ai_metadata_stores(parent: \"projects/#{gcp_project_id}/locations/#{metadata_store['region']}\", region: metadata_store['region']) do\n      it { should exist }\n      its('names') { should include metadata_store['name']}\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_artifact.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_artifact resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_artifact = input('metadata_stores_artifact', value: {\n  \"name\": \"2811503570633325756\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/artifacts/\",\n  \"schema_version\": \"value_schemaversion\",\n  \"display_name\": \"batchpredictionjob\",\n  \"metadataStore\": \"default\",\n  \"etag\": \"value_etag\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"value_state\",\n  \"uri\": \"value_uri\",\n  \"create_time\": \"value_createtime\",\n  \"schema_title\": \"value_schematitle\",\n  \"description\": \"value_description\"\n}, description: 'metadata_stores_artifact description')\ncontrol 'google_vertex_ai_metadata_stores_artifact-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_artifact resource test'\n\n  describe google_vertex_ai_metadata_stores_artifact(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_artifact['region']}/metadataStores/#{metadata_stores_artifact['metadataStore']}/artifacts/#{metadata_stores_artifact['name']}\", region: metadata_stores_artifact['region']) do\n  \tit { should exist }\n  \tits('schema_version') { should cmp metadata_stores_artifact['schema_version'] }\n  \tits('display_name') { should cmp metadata_stores_artifact['display_name'] }\n  \tits('etag') { should cmp metadata_stores_artifact['etag'] }\n  \tits('name') { should cmp metadata_stores_artifact['name'] }\n  \tits('update_time') { should cmp metadata_stores_artifact['update_time'] }\n  \tits('state') { should cmp metadata_stores_artifact['state'] }\n  \tits('uri') { should cmp metadata_stores_artifact['uri'] }\n  \tits('create_time') { should cmp metadata_stores_artifact['create_time'] }\n  \tits('schema_title') { should cmp metadata_stores_artifact['schema_title'] }\n  \tits('description') { should cmp metadata_stores_artifact['description'] }\n\n  end\n\n  describe google_vertex_ai_metadata_stores_artifact(name: \"does_not_exit\", region: metadata_stores_artifact['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_artifacts.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_artifacts resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_artifact = input('metadata_stores_artifact', value: {\n  \"name\": \"2811503570633325756\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/artifacts/\",\n  \"schema_version\": \"value_schemaversion\",\n  \"display_name\": \"batchpredictionjob\",\n  \"metadataStore\": \"default\",\n  \"etag\": \"value_etag\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"value_state\",\n  \"uri\": \"value_uri\",\n  \"create_time\": \"value_createtime\",\n  \"schema_title\": \"value_schematitle\",\n  \"description\": \"value_description\"\n}, description: 'metadata_stores_artifact description')\ncontrol 'google_vertex_ai_metadata_stores_artifacts-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_artifacts resource test'\n\n      describe google_vertex_ai_metadata_stores_artifacts(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_artifact['region']}/metadataStores/#{metadata_stores_artifact['metadataStore']}\", region: metadata_stores_artifact['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_context.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_context resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_context = input('metadata_stores_context', value: {\n  \"name\": \"autologging-experiment-w0apl7la-autologging-tf-experiment-w0apl7la\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/contexts/\",\n  \"metadataStore\": \"default\",\n  \"schema_title\": \"system.ExperimentRun\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"display_name\": \"autologging-tf-experiment-w0apl7la\",\n  \"schema_version\": \"value_schemaversion\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_stores_context description')\ncontrol 'google_vertex_ai_metadata_stores_context-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_context resource test'\n\n  describe google_vertex_ai_metadata_stores_context(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_context['region']}/metadataStores/#{metadata_stores_context['metadataStore']}/contexts/#{metadata_stores_context['name']}\", region: metadata_stores_context['region']) do\n  \tit { should exist }\n  \tits('name') { should cmp metadata_stores_context['name'] }\n  \tits('schema_title') { should cmp metadata_stores_context['schema_title'] }\n  \tits('etag') { should cmp metadata_stores_context['etag'] }\n  \tits('description') { should cmp metadata_stores_context['description'] }\n  \tits('display_name') { should cmp metadata_stores_context['display_name'] }\n  \tits('schema_version') { should cmp metadata_stores_context['schema_version'] }\n  \tits('create_time') { should cmp metadata_stores_context['create_time'] }\n  \tits('update_time') { should cmp metadata_stores_context['update_time'] }\n\n  end\n\n  describe google_vertex_ai_metadata_stores_context(name: \"does_not_exit\", region: metadata_stores_context['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_contexts.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_contexts resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_context = input('metadata_stores_context', value: {\n  \"name\": \"autologging-experiment-w0apl7la-autologging-tf-experiment-w0apl7la\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/contexts/\",\n  \"metadataStore\": \"default\",\n  \"schema_title\": \"system.ExperimentRun\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"display_name\": \"autologging-tf-experiment-w0apl7la\",\n  \"schema_version\": \"value_schemaversion\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_stores_context description')\ncontrol 'google_vertex_ai_metadata_stores_contexts-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_contexts resource test'\n\n      describe google_vertex_ai_metadata_stores_contexts(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_context['region']}/metadataStores/#{metadata_stores_context['metadataStore']}\", region: metadata_stores_context['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_execution.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_execution resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_execution = input('metadata_stores_execution', value: {\n  \"name\": \"12528100122877440041\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/executions/\",\n  \"metadataStore\": \"default\",\n  \"create_time\": \"value_createtime\",\n  \"schema_version\": \"value_schemaversion\",\n  \"state\": \"COMPLETE\",\n  \"etag\": \"value_etag\",\n  \"display_name\": \"endpoint-create-20230918054541-20230918054500491\",\n  \"schema_title\": \"value_schematitle\",\n  \"description\": \"value_description\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_stores_execution description')\ncontrol 'google_vertex_ai_metadata_stores_execution-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_execution resource test'\n\n  describe google_vertex_ai_metadata_stores_execution(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_execution['region']}/metadataStores/#{metadata_stores_execution['metadataStore']}/executions/#{metadata_stores_execution['name']}\", region: metadata_stores_execution['region']) do\n  \tit { should exist }\n  \tits('create_time') { should cmp metadata_stores_execution['create_time'] }\n  \tits('schema_version') { should cmp metadata_stores_execution['schema_version'] }\n  \tits('state') { should cmp metadata_stores_execution['state'] }\n  \tits('name') { should cmp metadata_stores_execution['name'] }\n  \tits('etag') { should cmp metadata_stores_execution['etag'] }\n  \tits('display_name') { should cmp metadata_stores_execution['display_name'] }\n  \tits('schema_title') { should cmp metadata_stores_execution['schema_title'] }\n  \tits('description') { should cmp metadata_stores_execution['description'] }\n  \tits('update_time') { should cmp metadata_stores_execution['update_time'] }\n\n  end\n\n  describe google_vertex_ai_metadata_stores_execution(name: \"does_not_exit\", region: metadata_stores_execution['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_executions.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_executions resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_execution = input('metadata_stores_execution', value: {\n  \"name\": \"12528100122877440041\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/executions/\",\n  \"metadataStore\": \"default\",\n  \"create_time\": \"value_createtime\",\n  \"schema_version\": \"value_schemaversion\",\n  \"state\": \"COMPLETE\",\n  \"etag\": \"value_etag\",\n  \"display_name\": \"endpoint-create-20230918054541-20230918054500491\",\n  \"schema_title\": \"value_schematitle\",\n  \"description\": \"value_description\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'metadata_stores_execution description')\ncontrol 'google_vertex_ai_metadata_stores_executions-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_executions resource test'\n\n      describe google_vertex_ai_metadata_stores_executions(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_execution['region']}/metadataStores/#{metadata_stores_execution['metadataStore']}\", region: metadata_stores_execution['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_metadata_schema.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_metadata_schema resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_metadata_schema = input('metadata_stores_metadata_schema', value: {\n  \"name\": \"system-dag-execution-v0-0-1\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/metadataSchemas/\",\n  \"metadataStore\": \"default\",\n  \"schema_type\": \"EXECUTION_TYPE\",\n  \"description\": \"value_description\",\n  \"schema_version\": \"value_schemaversion\",\n  \"create_time\": \"value_createtime\",\n  \"schema\": \"value_schema\"\n}, description: 'metadata_stores_metadata_schema description')\ncontrol 'google_vertex_ai_metadata_stores_metadata_schema-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_metadata_schema resource test'\n\n  describe google_vertex_ai_metadata_stores_metadata_schema(name: \"projects/#{gcp_project_id}/locations/#{metadata_stores_metadata_schema['region']}/metadataStores/#{metadata_stores_metadata_schema['metadataStore']}/metadataSchemas/#{metadata_stores_metadata_schema['name']}\", region: metadata_stores_metadata_schema['region']) do\n  \tit { should exist }\n  \tits('schema_type') { should cmp metadata_stores_metadata_schema['schema_type'] }\n  \tits('description') { should cmp metadata_stores_metadata_schema['description'] }\n  \tits('schema_version') { should cmp metadata_stores_metadata_schema['schema_version'] }\n  \tits('name') { should cmp metadata_stores_metadata_schema['name'] }\n  \tits('create_time') { should cmp metadata_stores_metadata_schema['create_time'] }\n  \tits('schema') { should cmp metadata_stores_metadata_schema['schema'] }\n\n  end\n\n  describe google_vertex_ai_metadata_stores_metadata_schema(name: \"does_not_exit\", region: metadata_stores_metadata_schema['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_metadata_stores_metadata_schemas.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_metadata_stores_metadata_schemas resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  metadata_stores_metadata_schema = input('metadata_stores_metadata_schema', value: {\n  \"name\": \"system-dag-execution-v0-0-1\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/metadataStores/default/metadataSchemas/\",\n  \"metadataStore\": \"default\",\n  \"schema_type\": \"EXECUTION_TYPE\",\n  \"description\": \"value_description\",\n  \"schema_version\": \"value_schemaversion\",\n  \"create_time\": \"value_createtime\",\n  \"schema\": \"value_schema\"\n}, description: 'metadata_stores_metadata_schema description')\ncontrol 'google_vertex_ai_metadata_stores_metadata_schemas-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_metadata_stores_metadata_schemas resource test'\n\n      describe google_vertex_ai_metadata_stores_metadata_schemas(parent: \"projects/#{gcp_project_id}/locations/#{metadata_stores_metadata_schema['region']}/metadataStores/#{metadata_stores_metadata_schema['metadataStore']}\", region: metadata_stores_metadata_schema['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_model.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_model resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  model = input('model', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"create_time\": \"value_createtime\",\n  \"pipeline_job\": \"value_pipelinejob\",\n  \"version_update_time\": \"value_versionupdatetime\",\n  \"metadata_artifact\": \"value_metadataartifact\",\n  \"metadata_schema_uri\": \"value_metadataschemauri\",\n  \"version_id\": \"value_versionid\",\n  \"artifact_uri\": \"value_artifacturi\",\n  \"training_pipeline\": \"value_trainingpipeline\",\n  \"display_name\": \"value_displayname\",\n  \"version_create_time\": \"value_versioncreatetime\",\n  \"version_description\": \"value_versiondescription\"\n}, description: 'model description')\ncontrol 'google_vertex_ai_model-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_model resource test'\n\n  describe google_vertex_ai_model(name: \"projects/#{gcp_project_id}/locations/#{model['region']}/models/#{model['name']}\", region: model['region']) do\n  \tit { should exist }\n  \tits('name') { should cmp model['name'] }\n  \tits('update_time') { should cmp model['update_time'] }\n  \tits('etag') { should cmp model['etag'] }\n  \tits('description') { should cmp model['description'] }\n  \tits('create_time') { should cmp model['create_time'] }\n  \tits('pipeline_job') { should cmp model['pipeline_job'] }\n  \tits('version_update_time') { should cmp model['version_update_time'] }\n  \tits('metadata_artifact') { should cmp model['metadata_artifact'] }\n  \tits('metadata_schema_uri') { should cmp model['metadata_schema_uri'] }\n  \tits('version_id') { should cmp model['version_id'] }\n  \tits('artifact_uri') { should cmp model['artifact_uri'] }\n  \tits('training_pipeline') { should cmp model['training_pipeline'] }\n  \tits('display_name') { should cmp model['display_name'] }\n  \tits('version_create_time') { should cmp model['version_create_time'] }\n  \tits('version_description') { should cmp model['version_description'] }\n\n  end\n\n  describe google_vertex_ai_model(name: \"does_not_exit\", region: model['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_model_deployment_monitoring_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_model_deployment_monitoring_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  model_deployment_monitoring_job = input('model_deployment_monitoring_job', value: {\n  \"name\": \"4965515800912855040\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/modelDeploymentMonitoringJobs/\",\n  \"state\": \"value_state\",\n  \"analysis_instance_schema_uri\": \"value_analysisinstanceschemauri\",\n  \"endpoint\": \"projects/165434197229/locations/us-central1/endpoints/5787303642054787072\",\n  \"display_name\": \"churn\",\n  \"schedule_state\": \"value_schedulestate\",\n  \"predict_instance_schema_uri\": \"value_predictinstanceschemauri\",\n  \"next_schedule_time\": \"value_nextscheduletime\",\n  \"create_time\": \"value_createtime\",\n  \"log_ttl\": \"value_logttl\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'model_deployment_monitoring_job description')\ncontrol 'google_vertex_ai_model_deployment_monitoring_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_model_deployment_monitoring_job resource test'\n\n  describe google_vertex_ai_model_deployment_monitoring_job(name: \"projects/#{gcp_project_id}/locations/#{model_deployment_monitoring_job['region']}/modelDeploymentMonitoringJobs/#{model_deployment_monitoring_job['name']}\", region: model_deployment_monitoring_job['region']) do\n  \tit { should exist }\n  \tits('state') { should cmp model_deployment_monitoring_job['state'] }\n  \tits('analysis_instance_schema_uri') { should cmp model_deployment_monitoring_job['analysis_instance_schema_uri'] }\n  \tits('endpoint') { should cmp model_deployment_monitoring_job['endpoint'] }\n  \tits('display_name') { should cmp model_deployment_monitoring_job['display_name'] }\n  \tits('schedule_state') { should cmp model_deployment_monitoring_job['schedule_state'] }\n  \tits('predict_instance_schema_uri') { should cmp model_deployment_monitoring_job['predict_instance_schema_uri'] }\n  \tits('next_schedule_time') { should cmp model_deployment_monitoring_job['next_schedule_time'] }\n  \tits('create_time') { should cmp model_deployment_monitoring_job['create_time'] }\n  \tits('log_ttl') { should cmp model_deployment_monitoring_job['log_ttl'] }\n  \tits('update_time') { should cmp model_deployment_monitoring_job['update_time'] }\n  \tits('name') { should cmp model_deployment_monitoring_job['name'] }\n\n  end\n\n  describe google_vertex_ai_model_deployment_monitoring_job(name: \"does_not_exit\", region: model_deployment_monitoring_job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_model_deployment_monitoring_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_model_deployment_monitoring_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  model_deployment_monitoring_job = input('model_deployment_monitoring_job', value: {\n  \"name\": \"4965515800912855040\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/modelDeploymentMonitoringJobs/\",\n  \"state\": \"value_state\",\n  \"analysis_instance_schema_uri\": \"value_analysisinstanceschemauri\",\n  \"endpoint\": \"projects/165434197229/locations/us-central1/endpoints/5787303642054787072\",\n  \"display_name\": \"churn\",\n  \"schedule_state\": \"value_schedulestate\",\n  \"predict_instance_schema_uri\": \"value_predictinstanceschemauri\",\n  \"next_schedule_time\": \"value_nextscheduletime\",\n  \"create_time\": \"value_createtime\",\n  \"log_ttl\": \"value_logttl\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'model_deployment_monitoring_job description')\ncontrol 'google_vertex_ai_model_deployment_monitoring_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_model_deployment_monitoring_jobs resource test'\n\n      describe google_vertex_ai_model_deployment_monitoring_jobs(parent: \"projects/#{gcp_project_id}/locations/#{model_deployment_monitoring_job['region']}\", region: model_deployment_monitoring_job['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_model_evaluation_slice.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_model_evaluation_slice resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  models_evaluations_slice = input('models_evaluations_slice', value: {\n  \"name\": \"1040489542048845967\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/models/1906524575261261824/evaluations/8892762874796048384/slices/\",\n  \"create_time\": \"value_createtime\",\n  \"model\": \"1906524575261261824\",\n  \"evaluation\": \"8892762874796048384\"\n}, description: 'models_evaluations_slice description')\ncontrol 'google_vertex_ai_model_evaluation_slice-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_model_evaluation_slice resource test'\n\n  describe google_vertex_ai_model_evaluation_slice(name: \"projects/#{gcp_project_id}/locations/#{models_evaluations_slice['region']}/models/#{models_evaluations_slice['model']}/evaluations/#{models_evaluations_slice['evaluation']}/slices/#{models_evaluations_slice['slice']}\", region: models_evaluations_slice['region']) do\n  \tit { should exist }\n  \tits('create_time') { should cmp models_evaluations_slice['create_time'] }\n  \tits('name') { should cmp models_evaluations_slice['name'] }\n  \tits('metrics_schema_uri') { should cmp models_evaluations_slice['metrics_schema_uri'] }\n\n  end\n\n  describe google_vertex_ai_model_evaluation_slice(name: \"does_not_exit\", region: models_evaluations_slice['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_model_evaluation_slices.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_model_evaluation_slices resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  models_evaluations_slice = input('models_evaluations_slice', value: {\n  \"name\": \"1040489542048845967\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/models/1906524575261261824/evaluations/8892762874796048384/slices/\",\n  \"create_time\": \"value_createtime\",\n  \"metrics_schema_uri\": \"value_metricsschemauri\",\n  \"model\": \"1906524575261261824\",\n  \"evaluation\": \"8892762874796048384\"\n}, description: 'models_evaluations_slice description')\ncontrol 'google_vertex_ai_model_evaluation_slices-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_model_evaluation_slices resource test'\n\n      describe google_vertex_ai_model_evaluation_slices(parent: \"projects/#{gcp_project_id}/locations/#{models_evaluations_slice['region']}/models/#{models_evaluations_slice['model']}/evaluations/#{models_evaluations_slice['evaluation']}\", region: models_evaluations_slice['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_models.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_models resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  model = input('model', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"etag\": \"value_etag\",\n  \"description\": \"value_description\",\n  \"create_time\": \"value_createtime\",\n  \"pipeline_job\": \"value_pipelinejob\",\n  \"version_update_time\": \"value_versionupdatetime\",\n  \"metadata_artifact\": \"value_metadataartifact\",\n  \"metadata_schema_uri\": \"value_metadataschemauri\",\n  \"version_id\": \"value_versionid\",\n  \"artifact_uri\": \"value_artifacturi\",\n  \"training_pipeline\": \"value_trainingpipeline\",\n  \"display_name\": \"value_displayname\",\n  \"version_create_time\": \"value_versioncreatetime\",\n  \"version_description\": \"value_versiondescription\"\n}, description: 'model description')\ncontrol 'google_vertex_ai_models-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_models resource test'\n\n      describe google_vertex_ai_models(parent: \"projects/#{gcp_project_id}/locations/#{model['region']}\", region: model['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_models_evaluation.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_models_evaluation resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  models_evaluation = input('models_evaluation', value: {\n\t\"name\": \"6359727915373953024\",\n\t\"model_name\":\"1367728693278932992\",\n  \"region\": \"us-central1\",\n  \"metrics_schema_uri\": \"gs://google-cloud-aiplatform/schema/modelevaluation/classification_metrics_1.0.0.yaml\",\n  \"create_time\": \"2023-09-15T22:47:51.125611Z\",\n  \"annotation_schema_uri\": \"gs://google-cloud-aiplatform/schema/dataset/annotation/text_classification_1.0.0.yaml\",\n  \"display_name\": \"value_displayname\"\n}, description: 'models_evaluation description')\ncontrol 'google_vertex_ai_models_evaluation-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_models_evaluation resource test'\n  describe google_vertex_ai_models_evaluation(name: \"projects/#{gcp_project_id}/locations/#{models_evaluation['region']}/models/#{models_evaluation['model_name']}/evaluations/#{models_evaluation['name']}\", region: models_evaluation['region']) do\n  \tit { should exist }\n  \tits('metrics_schema_uri') { should cmp models_evaluation['metrics_schema_uri'] }\n  \tits('create_time') { should cmp models_evaluation['create_time'] }\n  \tits('annotation_schema_uri') { should cmp models_evaluation['annotation_schema_uri'] }\n  end\n\n  describe google_vertex_ai_models_evaluation(name: \"does_not_exit\", region: models_evaluation['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_models_evaluations.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_models_evaluations resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  models_evaluation = input('models_evaluation', value: {\n  \"name\": \"6359727915373953024\",\n  \"model_name\":\"1367728693278932992\",\n  \"region\": \"us-central1\",\n  \"data_item_schema_uri\": \"value_dataitemschemauri\",\n  \"metrics_schema_uri\": \"value_metricsschemauri\",\n  \"create_time\": \"value_createtime\",\n  \"annotation_schema_uri\": \"value_annotationschemauri\",\n  \"display_name\": \"value_displayname\"\n}, description: 'models_evaluation description')\ncontrol 'google_vertex_ai_models_evaluations-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_models_evaluations resource test'\n\n\n      describe google_vertex_ai_models_evaluations(parent: \"projects/#{gcp_project_id}/locations/#{models_evaluation['region']}/models/#{models_evaluation['model_name']}\", region: models_evaluation['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_nas_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_nas_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  nas_job = input('nas_job', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"end_time\": \"value_endtime\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"value_displayname\",\n  \"start_time\": \"value_starttime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'nas_job description')\ncontrol 'google_vertex_ai_nas_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_nas_job resource test'\n\n  describe google_vertex_ai_nas_job(name: \"projects/#{gcp_project_id}/locations/#{nas_job['region']}/nasJobs/#{nas_job['name']}\", region: nas_job['region']) do\n  \tit { should exist }\n  \tits('name') { should cmp nas_job['name'] }\n  \tits('end_time') { should cmp nas_job['end_time'] }\n  \tits('state') { should cmp nas_job['state'] }\n  \tits('create_time') { should cmp nas_job['create_time'] }\n  \tits('display_name') { should cmp nas_job['display_name'] }\n  \tits('start_time') { should cmp nas_job['start_time'] }\n  \tits('update_time') { should cmp nas_job['update_time'] }\n\n  end\n\n  describe google_vertex_ai_nas_job(name: \"does_not_exit\", region: nas_job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_nas_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_nas_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  nas_job = input('nas_job', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"end_time\": \"value_endtime\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"value_displayname\",\n  \"start_time\": \"value_starttime\",\n  \"update_time\": \"value_updatetime\"\n}, description: 'nas_job description')\ncontrol 'google_vertex_ai_nas_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_nas_jobs resource test'\n\n      describe google_vertex_ai_nas_jobs(parent: \"projects/#{gcp_project_id}/locations/#{nas_job['region']}\", region: nas_job['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_nas_jobs_nas_trial_detail.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_nas_jobs_nas_trial_detail resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  nas_jobs_nas_trial_detail = input('nas_jobs_nas_trial_detail', value: {\n    \"name\": \"1\",\n    \"region\": \"us-central1\",\n    \"nasJob\": \"3217974009958236160\",\n    \"parent\": \"projects/ppradhan/locations/us-central1/nasJobs/3217974009958236160/nasTrialDetails/\",\n    \"parameters\": \"value_parameters\"\n}, description: 'nas_jobs_nas_trial_detail description')\ncontrol 'google_vertex_ai_nas_jobs_nas_trial_detail-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_nas_jobs_nas_trial_detail resource test'\n\n  describe google_vertex_ai_nas_jobs_nas_trial_detail(name: \"projects/#{gcp_project_id}/locations/#{nas_jobs_nas_trial_detail['region']}/nasJobs/#{nas_jobs_nas_trial_detail['nasJob']}/nasTrialDetails/#{nas_jobs_nas_trial_detail['name']}\", region: nas_jobs_nas_trial_detail['region']) do\n  \tit { should exist }\n  \tits('parameters') { should cmp nas_jobs_nas_trial_detail['parameters'] }\n  \tits('name') { should cmp nas_jobs_nas_trial_detail['name'] }\n\n  end\n\n  describe google_vertex_ai_nas_jobs_nas_trial_detail(name: \"does_not_exit\", region: nas_jobs_nas_trial_detail['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_nas_jobs_nas_trial_details.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_nas_jobs_nas_trial_details resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  nas_jobs_nas_trial_detail = input('nas_jobs_nas_trial_detail', value: {\n    \"name\": \"1\",\n    \"region\": \"us-central1\",\n    \"nasJob\": \"3217974009958236160\",\n    \"parent\": \"projects/ppradhan/locations/us-central1/nasJobs/3217974009958236160/nasTrialDetails/\",\n    \"parameters\": \"value_parameters\"\n}, description: 'nas_jobs_nas_trial_detail description')\ncontrol 'google_vertex_ai_nas_jobs_nas_trial_details-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_nas_jobs_nas_trial_details resource test'\n\n      describe google_vertex_ai_nas_jobs_nas_trial_details(parent: \"projects/#{gcp_project_id}/locations/#{nas_jobs_nas_trial_detail['region']}/nasJobs/#{nas_jobs_nas_trial_detail['nasJob']}\", region: nas_jobs_nas_trial_detail['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_pipeline_job.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_pipeline_job resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  pipeline_job = input('pipeline_job', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"end_time\": \"value_endtime\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"schedule_name\": \"value_schedulename\",\n  \"start_time\": \"value_starttime\",\n  \"service_account\": \"value_serviceaccount\",\n  \"display_name\": \"value_displayname\",\n  \"template_uri\": \"value_templateuri\",\n  \"network\": \"value_network\"\n}, description: 'pipeline_job description')\ncontrol 'google_vertex_ai_pipeline_job-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_pipeline_job resource test'\n\n  describe google_vertex_ai_pipeline_job(name: \"projects/#{gcp_project_id}/locations/#{pipeline_job['region']}/pipelineJobs/#{pipeline_job['name']}\", region: pipeline_job['region']) do\n  \tit { should exist }\n  \tits('end_time') { should cmp pipeline_job['end_time'] }\n  \tits('update_time') { should cmp pipeline_job['update_time'] }\n  \tits('state') { should cmp pipeline_job['state'] }\n  \tits('create_time') { should cmp pipeline_job['create_time'] }\n  \tits('name') { should cmp pipeline_job['name'] }\n  \tits('schedule_name') { should cmp pipeline_job['schedule_name'] }\n  \tits('start_time') { should cmp pipeline_job['start_time'] }\n  \tits('service_account') { should cmp pipeline_job['service_account'] }\n  \tits('display_name') { should cmp pipeline_job['display_name'] }\n  \tits('template_uri') { should cmp pipeline_job['template_uri'] }\n  \tits('network') { should cmp pipeline_job['network'] }\n\n  end\n\n  describe google_vertex_ai_pipeline_job(name: \"does_not_exit\", region: pipeline_job['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_pipeline_jobs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_pipeline_jobs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  pipeline_job = input('pipeline_job', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"end_time\": \"value_endtime\",\n  \"update_time\": \"value_updatetime\",\n  \"state\": \"value_state\",\n  \"create_time\": \"value_createtime\",\n  \"schedule_name\": \"value_schedulename\",\n  \"start_time\": \"value_starttime\",\n  \"service_account\": \"value_serviceaccount\",\n  \"display_name\": \"value_displayname\",\n  \"template_uri\": \"value_templateuri\",\n  \"network\": \"value_network\"\n}, description: 'pipeline_job description')\ncontrol 'google_vertex_ai_pipeline_jobs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_pipeline_jobs resource test'\n\n      describe google_vertex_ai_pipeline_jobs(parent: \"projects/#{gcp_project_id}/locations/#{pipeline_job['region']}\", region: pipeline_job['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_schedule.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_schedule resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  schedule = input('schedule', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"started_run_count\": \"value_startedruncount\",\n  \"cron\": \"value_cron\",\n  \"last_pause_time\": \"value_lastpausetime\",\n  \"create_time\": \"value_createtime\",\n  \"start_time\": \"value_starttime\",\n  \"max_run_count\": \"value_maxruncount\",\n  \"next_run_time\": \"value_nextruntime\",\n  \"update_time\": \"value_updatetime\",\n  \"last_resume_time\": \"value_lastresumetime\",\n  \"max_concurrent_run_count\": \"value_maxconcurrentruncount\",\n  \"state\": \"value_state\",\n  \"display_name\": \"value_displayname\",\n  \"end_time\": \"value_endtime\"\n}, description: 'schedule description')\ncontrol 'google_vertex_ai_schedule-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_schedule resource test'\n\n  describe google_vertex_ai_schedule(name: \"projects/#{gcp_project_id}/locations/#{schedule['region']}/schedules/#{schedule['name']}\", region: schedule['region']) do\n  \tit { should exist }\n  \tits('started_run_count') { should cmp schedule['started_run_count'] }\n  \tits('name') { should cmp schedule['name'] }\n  \tits('cron') { should cmp schedule['cron'] }\n  \tits('last_pause_time') { should cmp schedule['last_pause_time'] }\n  \tits('create_time') { should cmp schedule['create_time'] }\n  \tits('start_time') { should cmp schedule['start_time'] }\n  \tits('max_run_count') { should cmp schedule['max_run_count'] }\n  \tits('next_run_time') { should cmp schedule['next_run_time'] }\n  \tits('update_time') { should cmp schedule['update_time'] }\n  \tits('last_resume_time') { should cmp schedule['last_resume_time'] }\n  \tits('max_concurrent_run_count') { should cmp schedule['max_concurrent_run_count'] }\n  \tits('state') { should cmp schedule['state'] }\n  \tits('display_name') { should cmp schedule['display_name'] }\n  \tits('end_time') { should cmp schedule['end_time'] }\n\n  end\n\n  describe google_vertex_ai_schedule(name: \"does_not_exit\", region: schedule['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_schedules.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_schedules resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  schedule = input('schedule', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"started_run_count\": \"value_startedruncount\",\n  \"cron\": \"value_cron\",\n  \"last_pause_time\": \"value_lastpausetime\",\n  \"create_time\": \"value_createtime\",\n  \"start_time\": \"value_starttime\",\n  \"max_run_count\": \"value_maxruncount\",\n  \"next_run_time\": \"value_nextruntime\",\n  \"update_time\": \"value_updatetime\",\n  \"last_resume_time\": \"value_lastresumetime\",\n  \"max_concurrent_run_count\": \"value_maxconcurrentruncount\",\n  \"state\": \"value_state\",\n  \"display_name\": \"value_displayname\",\n  \"end_time\": \"value_endtime\"\n}, description: 'schedule description')\ncontrol 'google_vertex_ai_schedules-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_schedules resource test'\n\n      describe google_vertex_ai_schedules(parent: \"projects/#{gcp_project_id}/locations/#{schedule['region']}\", region: schedule['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_studies.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_studies resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  study = input('study', value: {\n  \"name\": \"2975668570413\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/studies/\",\n  \"display_name\": \"ppradhan_study_20230921_205019\",\n  \"state\": \"ACTIVE\",\n  \"create_time\": \"value_createtime\",\n  \"inactive_reason\": \"value_inactivereason\"\n}, description: 'study description')\ncontrol 'google_vertex_ai_studies-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_studies resource test'\n\n      describe google_vertex_ai_studies(parent: \"projects/#{gcp_project_id}/locations/#{study['region']}\", region: study['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_studies_trial.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_studies_trial resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  studies_trial = input('studies_trial', value: {\n    \"name\": \"1\",\n    \"region\": \"us-central1\",\n    \"parent\": \"projects/165434197229/locations/us-central1/studies/2975668570413/trials/\",\n    \"study\": \"890385007008\",\n    \"start_time\": \"value_starttime\",\n    \"end_time\": \"value_endtime\",\n    \"infeasible_reason\": \"value_infeasiblereason\",\n    \"client_id\": \"value_clientid\",\n    \"custom_job\": \"value_customjob\",\n    \"state\": \"value_state\",\n    \"id\": \"1\"\n}, description: 'studies_trial description')\ncontrol 'google_vertex_ai_studies_trial-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_studies_trial resource test'\n\n  describe google_vertex_ai_studies_trial(name: \"projects/#{gcp_project_id}/locations/#{studies_trial['region']}/studies/#{studies_trial['study']}/trials/#{studies_trial['name']}\", region: studies_trial['region']) do\n  \tit { should exist }\n  \tits('start_time') { should cmp studies_trial['start_time'] }\n  \tits('end_time') { should cmp studies_trial['end_time'] }\n  \tits('name') { should cmp studies_trial['name'] }\n  \tits('infeasible_reason') { should cmp studies_trial['infeasible_reason'] }\n  \tits('client_id') { should cmp studies_trial['client_id'] }\n  \tits('custom_job') { should cmp studies_trial['custom_job'] }\n  \tits('state') { should cmp studies_trial['state'] }\n  \tits('id') { should cmp studies_trial['id'] }\n\n  end\n\n  describe google_vertex_ai_studies_trial(name: \"does_not_exit\", region: studies_trial['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_studies_trials.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_studies_trials resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  studies_trial = input('studies_trial', value: {\n    \"name\": \"1\",\n    \"region\": \"us-central1\",\n    \"parent\": \"projects/165434197229/locations/us-central1/studies/2975668570413/trials/\",\n    \"study\": \"890385007008\",\n    \"start_time\": \"value_starttime\",\n    \"end_time\": \"value_endtime\",\n    \"infeasible_reason\": \"value_infeasiblereason\",\n    \"client_id\": \"value_clientid\",\n    \"custom_job\": \"value_customjob\",\n    \"state\": \"value_state\",\n    \"id\": \"1\"\n}, description: 'studies_trial description')\ncontrol 'google_vertex_ai_studies_trials-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_studies_trials resource test'\n\n      describe google_vertex_ai_studies_trials(parent: \"projects/#{gcp_project_id}/locations/#{studies_trial['region']}/studies/#{studies_trial['study']}\", region: studies_trial['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_study.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_study resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  study = input('study', value: {\n  \"name\": \"2975668570413\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/studies/\",\n  \"display_name\": \"ppradhan_study_20230921_205019\",\n  \"state\": \"ACTIVE\",\n  \"create_time\": \"value_createtime\",\n  \"inactive_reason\": \"value_inactivereason\"\n}, description: 'study description')\ncontrol 'google_vertex_ai_study-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_study resource test'\n\n  describe google_vertex_ai_study(name: \"projects/#{gcp_project_id}/locations/#{study['region']}/studies/#{study['name']}\", region: study['region']) do\n  \tit { should exist }\n  \tits('name') { should cmp study['name'] }\n  \tits('display_name') { should cmp study['display_name'] }\n  \tits('state') { should cmp study['state'] }\n  \tits('create_time') { should cmp study['create_time'] }\n  \tits('inactive_reason') { should cmp study['inactive_reason'] }\n\n  end\n\n  describe google_vertex_ai_study(name: \"does_not_exit\", region: study['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboard.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboard resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard = input('tensorboard', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"blob_storage_path_prefix\": \"value_blobstoragepathprefix\",\n  \"etag\": \"value_etag\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"value_displayname\",\n  \"description\": \"value_description\"\n}, description: 'tensorboard description')\ncontrol 'google_vertex_ai_tensorboard-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboard resource test'\n\n  describe google_vertex_ai_tensorboard(name: \"projects/#{gcp_project_id}/locations/#{tensorboard['region']}/tensorboards/#{tensorboard['name']}\", region: tensorboard['region']) do\n  \tit { should exist }\n  \tits('name') { should cmp tensorboard['name'] }\n  \tits('update_time') { should cmp tensorboard['update_time'] }\n  \tits('blob_storage_path_prefix') { should cmp tensorboard['blob_storage_path_prefix'] }\n  \tits('etag') { should cmp tensorboard['etag'] }\n  \tits('create_time') { should cmp tensorboard['create_time'] }\n  \tits('display_name') { should cmp tensorboard['display_name'] }\n  \tits('description') { should cmp tensorboard['description'] }\n\n  end\n\n  describe google_vertex_ai_tensorboard(name: \"does_not_exit\", region: tensorboard['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboard_experiment_run.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboard_experiment_run resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard_experiment_run = input('tensorboard_experiment_run', value: {\n  \"name\": \"sklearn-2023-09-22-17-16-16-a25b0\",\n  \"tensorboard\": \"1976367752880848896\",\n  \"experiment\": \"autologging-experiment-fyc24zb2\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/1976367752880848896/experiments/autologging-experiment-fyc24zb2/runs/\"\n}, description: 'tensorboard_experiment_run description')\ncontrol 'google_vertex_ai_tensorboard_experiment_run-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboard_experiment_run resource test'\n\n  describe google_vertex_ai_tensorboard_experiment_run(name: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run['region']}/tensorboards/#{tensorboard_experiment_run['tensorboard']}/experiments/#{tensorboard_experiment_run['experiment']}/runs/#{tensorboard_experiment_run['run']}\", region: tensorboard_experiment_run['region']) do\n  \tit { should exist }\n\n  end\n\n  describe google_vertex_ai_tensorboard_experiment_run(name: \"does_not_exit\", region: tensorboard_experiment_run['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboard_experiment_run_time_series_resource.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboard_experiment_run_time_series_resource resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard_experiment_run_time_series_resource = input('tensorboard_experiment_run_time_series_resource', value: {\n  \"name\": \"1197045318546358272\",\n  \"tensorboard\": \"1143342559305662464\",\n  \"experiment\": \"autologging-experiment-a6k29mzk\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/1143342559305662464/experiments/autologging-experiment-a6k29mzk/runs/autologging-tf-experiment-a6k29mzk/timeSeries/\",\n  \"run\": \"autologging-tf-experiment-a6k29mzk\",\n  \"plugin_name\": \"value_pluginname\",\n  \"plugin_data\": \"value_plugindata\",\n  \"description\": \"value_description\",\n  \"etag\": \"value_etag\",\n  \"display_name\": \"value_displayname\",\n  \"update_time\": \"value_updatetime\",\n  \"create_time\": \"value_createtime\",\n  \"value_type\": \"value_valuetype\"\n}, description: 'tensorboard_experiment_run_time_series_resource description')\ncontrol 'google_vertex_ai_tensorboard_experiment_run_time_series_resource-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboard_experiment_run_time_series_resource resource test'\n\n  describe google_vertex_ai_tensorboard_experiment_run_time_series_resource(name: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run_time_series_resource['region']}/tensorboards/#{tensorboard_experiment_run_time_series_resource['tensorboard']}/experiments/#{tensorboard_experiment_run_time_series_resource['experiment']}/runs/#{tensorboard_experiment_run_time_series_resource['run']}/timeSeries/#{tensorboard_experiment_run_time_series_resource['timeSery']}\", region: tensorboard_experiment_run_time_series_resource['region']) do\n  \tit { should exist }\n  \tits('plugin_name') { should cmp tensorboard_experiment_run_time_series_resource['plugin_name'] }\n  \tits('plugin_data') { should cmp tensorboard_experiment_run_time_series_resource['plugin_data'] }\n  \tits('description') { should cmp tensorboard_experiment_run_time_series_resource['description'] }\n  \tits('etag') { should cmp tensorboard_experiment_run_time_series_resource['etag'] }\n  \tits('display_name') { should cmp tensorboard_experiment_run_time_series_resource['display_name'] }\n  \tits('update_time') { should cmp tensorboard_experiment_run_time_series_resource['update_time'] }\n  \tits('create_time') { should cmp tensorboard_experiment_run_time_series_resource['create_time'] }\n  \tits('name') { should cmp tensorboard_experiment_run_time_series_resource['name'] }\n  \tits('value_type') { should cmp tensorboard_experiment_run_time_series_resource['value_type'] }\n\n  end\n\n  describe google_vertex_ai_tensorboard_experiment_run_time_series_resource(name: \"does_not_exit\", region: tensorboard_experiment_run_time_series_resource['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboard_experiment_run_time_series_resources.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboard_experiment_run_time_series_resources resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard_experiment_run_time_series_resource = input('tensorboard_experiment_run_time_series_resource', value: {\n  \"name\": \"1197045318546358272\",\n  \"tensorboard\": \"1143342559305662464\",\n  \"experiment\": \"autologging-experiment-a6k29mzk\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/1143342559305662464/experiments/autologging-experiment-a6k29mzk/runs/autologging-tf-experiment-a6k29mzk/timeSeries/\",\n  \"run\": \"autologging-tf-experiment-a6k29mzk\",\n  \"plugin_name\": \"value_pluginname\",\n  \"plugin_data\": \"value_plugindata\",\n  \"description\": \"value_description\",\n  \"etag\": \"value_etag\",\n  \"display_name\": \"value_displayname\",\n  \"update_time\": \"value_updatetime\",\n  \"create_time\": \"value_createtime\",\n  \"value_type\": \"value_valuetype\"\n}, description: 'tensorboard_experiment_run_time_series_resource description')\ncontrol 'google_vertex_ai_tensorboard_experiment_run_time_series_resources-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboard_experiment_run_time_series_resources resource test'\n\n      describe google_vertex_ai_tensorboard_experiment_run_time_series_resources(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run_time_series_resource['region']}/tensorboards/#{tensorboard_experiment_run_time_series_resource['tensorboard']}/experiments/#{tensorboard_experiment_run_time_series_resource['experiment']}/runs/#{tensorboard_experiment_run_time_series_resource['run']}\", region: tensorboard_experiment_run_time_series_resource['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboard_experiment_runs.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboard_experiment_runs resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard_experiment_run = input('tensorboard_experiment_run', value: {\n    \"name\": \"sklearn-2023-09-22-17-16-16-a25b0\",\n    \"tensorboard\": \"1976367752880848896\",\n    \"experiment\": \"autologging-experiment-fyc24zb2\",\n    \"region\": \"us-central1\",\n    \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/1976367752880848896/experiments/autologging-experiment-fyc24zb2/runs/\"\n}, description: 'tensorboard_experiment_run description')\ncontrol 'google_vertex_ai_tensorboard_experiment_runs-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboard_experiment_runs resource test'\n\n      describe google_vertex_ai_tensorboard_experiment_runs(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard_experiment_run['region']}/tensorboards/#{tensorboard_experiment_run['tensorboard']}/experiments/#{tensorboard_experiment_run['experiment']}\", region: tensorboard_experiment_run['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboards.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboards resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboard = input('tensorboard', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\",\n  \"update_time\": \"value_updatetime\",\n  \"blob_storage_path_prefix\": \"value_blobstoragepathprefix\",\n  \"etag\": \"value_etag\",\n  \"create_time\": \"value_createtime\",\n  \"display_name\": \"value_displayname\",\n  \"description\": \"value_description\"\n}, description: 'tensorboard description')\ncontrol 'google_vertex_ai_tensorboards-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboards resource test'\n\n      describe google_vertex_ai_tensorboards(parent: \"projects/#{gcp_project_id}/locations/#{tensorboard['region']}\", region: tensorboard['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboards_experiment.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboards_experiment resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboards_experiment = input('tensorboards_experiment', value: {\n  \"name\": \"inspec-tensor-experiment\",\n  \"region\": \"us-central1\",\n  \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/6346548241290493952/experiments/\",\n  \"description\": \"value_description\",\n  \"tensorboard\": \"6346548241290493952\",\n  \"source\": \"value_source\",\n  \"display_name\": \"inspec-tensor-experiment\",\n  \"create_time\": \"value_createtime\",\n  \"update_time\": \"value_updatetime\",\n  \"etag\": \"value_etag\"\n}, description: 'tensorboards_experiment description')\ncontrol 'google_vertex_ai_tensorboards_experiment-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboards_experiment resource test'\n\n  describe google_vertex_ai_tensorboards_experiment(name: \"projects/#{gcp_project_id}/locations/#{tensorboards_experiment['region']}/tensorboards/#{tensorboards_experiment['tensorboard']}/experiments/#{tensorboards_experiment['name']}\", region: tensorboards_experiment['region']) do\n  \tit { should exist }\n  \tits('description') { should cmp tensorboards_experiment['description'] }\n  \tits('source') { should cmp tensorboards_experiment['source'] }\n  \tits('display_name') { should cmp tensorboards_experiment['display_name'] }\n  \tits('create_time') { should cmp tensorboards_experiment['create_time'] }\n  \tits('update_time') { should cmp tensorboards_experiment['update_time'] }\n  \tits('name') { should cmp tensorboards_experiment['name'] }\n  \tits('etag') { should cmp tensorboards_experiment['etag'] }\n\n  end\n\n  describe google_vertex_ai_tensorboards_experiment(name: \"does_not_exit\", region: tensorboards_experiment['region']) do\n  \tit { should_not exist }\n  end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_tensorboards_experiments.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_tensorboards_experiments resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  tensorboards_experiment = input('tensorboards_experiment', value: {\n    \"name\": \"inspec-tensor-experiment\",\n    \"region\": \"us-central1\",\n    \"parent\": \"projects/165434197229/locations/us-central1/tensorboards/6346548241290493952/experiments/\",\n    \"description\": \"value_description\",\n    \"tensorboard\": \"6346548241290493952\",\n    \"source\": \"value_source\",\n    \"display_name\": \"inspec-tensor-experiment\",\n    \"create_time\": \"value_createtime\",\n    \"update_time\": \"value_updatetime\",\n    \"etag\": \"value_etag\"\n}, description: 'tensorboards_experiment description')\ncontrol 'google_vertex_ai_tensorboards_experiments-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_tensorboards_experiments resource test'\n\n      describe google_vertex_ai_tensorboards_experiments(parent: \"projects/#{gcp_project_id}/locations/#{tensorboards_experiment['region']}/tensorboards/#{tensorboards_experiment['tensorboard']}\", region: tensorboards_experiment['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_training_pipeline.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_training_pipeline resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  training_pipeline = input('training_pipeline', value: {\n  \"name\": \"value_name\",\n  \"job_id\": \"job_id\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\"\n}, description: 'training_pipeline description')\ncontrol 'google_vertex_ai_training_pipeline-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_training_pipeline resource test'\n\n    describe google_vertex_ai_training_pipeline(name: \"projects/#{gcp_project_id}/locations/#{training_pipeline['region']}/trainingPipelines/#{training_pipeline['job_id']}\", region: training_pipeline['region']) do\n      it { should exist }\n    end\n    describe google_vertex_ai_training_pipeline(name: \"does_not_exit\", region: training_pipeline['region']) do\n      it { should_not exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/controls/google_vertex_ai_training_pipelines.rb",
    "content": "# ----------------------------------------------------------------------------\n#\n#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***\n#\n# ----------------------------------------------------------------------------\n#\n#     This file is automatically generated by Magic Modules and manual\n#     changes will be clobbered when the file is regenerated.\n#\n#     Please read more about how to change this file in README.md and\n#     CONTRIBUTING.md located at the root of this package.\n#\n# ----------------------------------------------------------------------------\n\ntitle 'Test GCP google_vertex_ai_training_pipelines resource.'\n\ngcp_project_id = input(:gcp_project_id, value: 'gcp_project_id', description: 'The GCP project identifier.')\n\n  training_pipeline = input('training_pipeline', value: {\n  \"name\": \"value_name\",\n  \"region\": \"value_region\",\n  \"parent\": \"value_parent\"\n}, description: 'training_pipeline description')\ncontrol 'google_vertex_ai_training_pipelines-1.0' do\n  impact 1.0\n  title 'google_vertex_ai_training_pipelines resource test'\n\n      describe google_vertex_ai_training_pipelines(parent: \"projects/#{gcp_project_id}/locations/#{training_pipeline['region']}\", region: training_pipeline['region']) do\n      it { should exist }\n    end\nend\n"
  },
  {
    "path": "test/integration/verify/inspec.yml",
    "content": "name: inspec-gcp-integration-tests\nversion: 0.11.0\ninspec_version: '>= 4.7.3' \ndepends:\n  - name: inspec-gcp\n    path: ../../../\n"
  },
  {
    "path": "test/mock/mock-gcp.rb",
    "content": "# libraries/mock_gcp.rb\n\nrequire 'gcp_backend'\n\nmodule GcpBackend\n  class MockGcp < GcpBackend::Google\n    def initialize\n      @compute = Google::Apis::ComputeV1::ComputeService.new\n    end\n\n    def get_region_notification_endpoints(_project, _region)\n      region_notification_endpoint = Google::Apis::ComputeV1::NotificationEndpoint.new(\n        id: '1234567890',\n        name: 'test-notification-endpoint',\n        description: 'A test notification endpoint',\n        creation_timestamp: '2021-01-01T00:00:00.000-00:00',\n        self_link: 'https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/notificationEndpoints/test-notification-endpoint'\n      )\n\n      region_notification_endpoints = Google::Apis::ComputeV1::NotificationEndpointList.new(\n        items: [region_notification_endpoint]\n      )\n\n      region_notification_endpoints\n    end\n  end\nend\n\n"
  }
]